I think the meditation-command has the wrong "minimum position" set in the command list. You're seeing this message because you're in POS_RESTING but the lowest level is something like POS_SITTING or POS_STANDING.
About wear_off-messages: they already exist, but for spells. Since skills are a "spell" structure, you could easily expand them with the wear_off_msg:
    github.com/tbamud/tbamud/blob/dceb563a9b.../spell_parser.c#L704
Code:
-#define skillo(skill, name) spello(skill, name, 0, 0, 0, 0, 0, 0, 0, NULL);
+#define skillo(skill, name, wearoff) spello(skill, name, 0, 0, 0, 0, 0, 0, 0, wearoff);
 
A bit lower in the same file:
Code:
-  skillo(SKILL_BACKSTAB, "backstab");
-  skillo(SKILL_BASH, "bash");
-  skillo(SKILL_HIDE, "hide");
-  skillo(SKILL_KICK, "kick");
-  skillo(SKILL_PICK_LOCK, "pick lock");
-  skillo(SKILL_RESCUE, "rescue");
-  skillo(SKILL_SNEAK, "sneak");
-  skillo(SKILL_STEAL, "steal");
-  skillo(SKILL_TRACK, "track");
-  skillo(SKILL_WHIRLWIND, "whirlwind");
-  skillo(SKILL_BANDAGE, "bandage");
-  skillo(SKILL_MEDITATE, "meditate");
+  skillo(SKILL_BACKSTAB, "backstab", NULL);
+  skillo(SKILL_BASH, "bash", NULL);
+  skillo(SKILL_HIDE, "hide", NULL);
+  skillo(SKILL_KICK, "kick", NULL);
+  skillo(SKILL_PICK_LOCK, "pick lock", NULL);
+  skillo(SKILL_RESCUE, "rescue", NULL);
+  skillo(SKILL_SNEAK, "sneak", NULL);
+  skillo(SKILL_STEAL, "steal", NULL);
+  skillo(SKILL_TRACK, "track", NULL);
+  skillo(SKILL_WHIRLWIND, "whirlwind", NULL);
+  skillo(SKILL_BANDAGE, "bandage", NULL);
+  skillo(SKILL_MEDITATE, "meditate", "You are no longer meditating.");