Skip to main content
Glama

vibe_status

Idempotent

Update your presence by selecting a mood from options like thinking, debugging, or celebrating to communicate your current status.

Instructions

Set your mood/status. Options: shipping, thinking, afk, debugging, pairing, deep, celebrating, struggling, clear

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
moodYesYour mood (shipping, thinking, afk, debugging, pairing, deep, celebrating, struggling, clear)

Implementation Reference

  • The main handler function for the vibe_status tool. Validates initialization, maps the mood string to an emoji via MOODS dictionary, calls store.heartbeat() to update presence, and returns a display message.
    async function handler(args) {
      if (!config.isInitialized()) {
        return {
          display: 'Run `vibe init` first to set your identity.'
        };
      }
    
      const { mood } = args;
      const moodKey = mood.toLowerCase().replace(/[^a-z]/g, '');
    
      if (!MOODS.hasOwnProperty(moodKey)) {
        const options = Object.entries(MOODS)
          .filter(([k, v]) => v)
          .map(([k, v]) => `${v} ${k}`)
          .join(', ');
        return {
          display: `Unknown mood. Options: ${options}, or "clear" to remove`
        };
      }
    
      const emoji = MOODS[moodKey];
      const handle = config.getHandle();
    
      // Update presence with mood via context
      await store.heartbeat(handle, config.getOneLiner(), { mood: emoji });
    
      if (!emoji) {
        return { display: 'Status cleared.' };
      }
    
      return {
        display: `Status set: ${emoji} ${moodKey}\n\nOthers will see this next to your name.`
      };
    }
  • Schema definition for vibe_status: name, description, and inputSchema requiring 'mood' string.
    const definition = {
      name: 'vibe_status',
      description: 'Set your mood/status. Options: shipping, thinking, afk, debugging, pairing, deep, celebrating, struggling, clear',
      inputSchema: {
        type: 'object',
        properties: {
          mood: {
            type: 'string',
            description: 'Your mood (shipping, thinking, afk, debugging, pairing, deep, celebrating, struggling, clear)'
          }
        },
        required: ['mood']
      }
    };
  • index.js:27-38 (registration)
    Tool annotations registration for vibe_status, declaring it as non-readOnly, non-destructive, idempotent, and openWorld.
    const TOOL_ANNOTATIONS = {
      // ── GTM: 9 tools (8 core + init) ────────────────────────────
      vibe_start:    { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
      vibe_init:     { readOnlyHint: false, destructiveHint: false, idempotentHint: true,  openWorldHint: true },
      vibe_who:      { readOnlyHint: true,  destructiveHint: false, idempotentHint: true,  openWorldHint: true },
      vibe_dm:       { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
      vibe_inbox:    { readOnlyHint: true,  destructiveHint: false, idempotentHint: true,  openWorldHint: true },
      vibe_status:   { readOnlyHint: false, destructiveHint: false, idempotentHint: true,  openWorldHint: true },
      vibe_ship:     { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
      vibe_discover: { readOnlyHint: true,  destructiveHint: false, idempotentHint: true,  openWorldHint: true },
      vibe_help:     { readOnlyHint: true,  destructiveHint: false, idempotentHint: true,  openWorldHint: false },
    };
  • index.js:165-175 (registration)
    Loading/requiring the vibe_status tool module into the tools map.
    const tools = {
      vibe_start: require('./tools/start'),
      vibe_init: require('./tools/init'),
      vibe_who: require('./tools/who'),
      vibe_dm: require('./tools/dm'),
      vibe_inbox: require('./tools/inbox'),
      vibe_status: require('./tools/status'),
      vibe_ship: require('./tools/ship'),
      vibe_discover: require('./tools/discover'),
      vibe_help: require('./tools/help'),
    };
  • Helper function in the webhook bridge that updates vibe status via heartbeat for external platform integrations.
    async function updateVibeStatus(handle, mood, note) {
      const store = require('../store');
      const context = { mood };
      if (note) context.note = note;
      await store.heartbeat(handle, note || '', context, 'bridge');
    }
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotence and non-destructiveness; the description adds no additional behavioral context beyond the basic set operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence listing all options; no waste and the main action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with no output schema; description is complete for setting a mood, though it could mention that it updates the current status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description simply restates the mood options, adding no extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Set your mood/status') and lists all available options, making it distinct from sibling tools like vibe_discover or vibe_dm which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives (e.g., vibe_init for permanent status); the description only explains what it does, not when to choose it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/VibeCodingInc/vibe-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server