{"mcp":"https://aiapp-halt.vercel.app/api/mcp","skill":"https://aiapp-halt.vercel.app/skill.md","operations":[{"name":"create_account","auth":"none","description":"Create a Halt account (no human, no email). Returns the owner key (keep it secret: it controls everything) and the alert key (stop/resume only, also signs webhooks).","http":"POST https://aiapp-halt.vercel.app/api/v1/accounts","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"default":"","description":"Optional label for this account","type":"string","maxLength":80}}}},{"name":"overview","auth":"Authorization: Bearer <owner key or operator key>","description":"Account state: STOP ALL flag, every agent with its state, recent alarms, plan, and what this key may do.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/overview","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"create_agent","auth":"Authorization: Bearer <owner key>","description":"Register an agent to supervise. Returns its token (the only credential the agent itself gets), a supervisor token (for halt.mjs only: it never reaches the agent, so the agent can't fake its supervisor's heartbeats), a one-time connect code, and ready-made setup.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/create_agent","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"kind":{"default":"custom","description":"claude-code | openclaw | process | custom","type":"string","enum":["claude-code","openclaw","process","custom"]},"silence_seconds":{"default":60,"description":"Alarm when the supervisor is silent this long","type":"integer","minimum":10,"maximum":3600}},"required":["name"]}},{"name":"list_agents","auth":"Authorization: Bearer <owner key or operator key>","description":"All agents with state, last action and liveness.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/list_agents","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"get_agent","auth":"Authorization: Bearer <owner key or operator key>","description":"One agent plus its recent activity.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/get_agent","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"},"limit":{"default":50,"type":"integer","minimum":1,"maximum":200}},"required":["agent_id"]}},{"name":"update_agent","auth":"Authorization: Bearer <owner key>","description":"Rename an agent or change how long its supervisor may be silent before the alarm.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/update_agent","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"},"name":{"type":"string","minLength":1,"maxLength":60},"silence_seconds":{"type":"integer","minimum":10,"maximum":3600}},"required":["agent_id"]}},{"name":"create_connect_code","auth":"Authorization: Bearer <owner key>","description":"A one-time code (15 minutes) for `halt.mjs connect <code>` on the agent's machine: it sets up the integration and issues fresh credentials (earlier ones stop working).","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/create_connect_code","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"}},"required":["agent_id"]}},{"name":"set_agent_state","auth":"Authorization: Bearer <owner key or operator key>","description":"Set one agent's state. paused = every tool call denied, supervised processes frozen (SIGSTOP); running again thaws them where they were. stopped = every tool call denied, supervised processes killed. Setting a stopped agent back to running only changes its state: hook-based agents (Claude Code, OpenClaw) can call tools again, but Halt never restarts a killed process; relaunch it. Operator keys can pause and stop, not resume.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/set_agent_state","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"},"state":{"type":"string","enum":["running","paused","stopped"]},"reason":{"type":"string","maxLength":200}},"required":["agent_id","state"]}},{"name":"rotate_agent_token","auth":"Authorization: Bearer <owner key>","description":"Issue new credentials for an agent (agent token and supervisor token); the old ones stop working immediately.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/rotate_agent_token","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"}},"required":["agent_id"]}},{"name":"delete_agent","auth":"Authorization: Bearer <owner key>","description":"Remove an agent and its history.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/delete_agent","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","minLength":3,"maxLength":40,"description":"Agent id (a_...)"}},"required":["agent_id"]}},{"name":"stop_all","auth":"Authorization: Bearer <owner key or operator key>","description":"Emergency stop: an account-wide flag on top of each agent's own state. While set, every tool call from every agent is denied and every supervisor kills its process. Agent states are not changed.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/stop_all","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reason":{"default":"STOP ALL by owner","type":"string","maxLength":200}}}},{"name":"resume_all","auth":"Authorization: Bearer <owner key>","description":"Lift the STOP ALL flag. Agents go back to their own state: running agents run, agents paused or stopped individually stay that way. Processes killed by STOP ALL are not restarted; relaunch them.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/resume_all","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"recent_activity","auth":"Authorization: Bearer <owner key or operator key>","description":"Recent checked tool calls (newest first), optionally for one agent.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/recent_activity","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"agent_id":{"type":"string","maxLength":40},"limit":{"default":50,"type":"integer","minimum":1,"maximum":200}}}},{"name":"wait_for_alarms","auth":"Authorization: Bearer <owner key or operator key>","description":"Long-poll (up to 25s) for new alarms: tripped breakers, tripwires, stops, auto-resumes. Pass next_since from the previous call to continue. Lets an overseer agent react without a public webhook.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/wait_for_alarms","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"since":{"description":"ISO timestamp; default = now","type":"string","maxLength":40},"wait":{"default":20,"type":"integer","minimum":0,"maximum":25}}}},{"name":"list_rules","auth":"Authorization: Bearer <owner key or operator key>","description":"Circuit breakers and block rules.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/list_rules","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"save_rule","auth":"Authorization: Bearer <owner key>","description":"Create a rule, or update one by passing rule_id. Breakers (kind=rate) trip after max_count matching calls in window_seconds; set cooldown_seconds for unattended operation.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/save_rule","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"kind":{"type":"string","enum":["rate","block"],"description":"rate = breaker (trip after max_count in window), block = always deny"},"tools":{"default":"","description":"Comma-separated tool-name globs, e.g. \"Bash, mcp__gmail__*\"; empty = any","type":"string","maxLength":500},"keywords":{"default":"","description":"Comma-separated keywords matched in the tool name or the call, e.g. \"delete, rm -rf\"; empty = any","type":"string","maxLength":1000},"max_count":{"default":0,"type":"integer","minimum":0,"maximum":100000},"window_seconds":{"default":0,"type":"integer","minimum":0,"maximum":2592000},"effect":{"default":"pause","type":"string","enum":["pause","stop"]},"cooldown_seconds":{"default":0,"description":"Auto-resume a paused agent after this long; 0 = wait for the owner","type":"integer","minimum":0,"maximum":604800},"agent_id":{"description":"Limit to one agent; omit for all agents","anyOf":[{"type":"string","maxLength":40},{"type":"null"}]},"rule_id":{"type":"string","maxLength":40}},"required":["name","kind"]}},{"name":"set_rule_enabled","auth":"Authorization: Bearer <owner key>","description":"Arm or disarm a rule.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/set_rule_enabled","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rule_id":{"type":"string","maxLength":40},"enabled":{"type":"boolean"}},"required":["rule_id","enabled"]}},{"name":"delete_rule","auth":"Authorization: Bearer <owner key>","description":"Delete a rule.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/delete_rule","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rule_id":{"type":"string","maxLength":40}},"required":["rule_id"]}},{"name":"create_tripwire","auth":"Authorization: Bearer <owner key>","description":"Create a canary. kind=secret: a fake credential to plant in an agent's context; if it ever appears in a tool call, the agent is stopped. kind=url: a link; any fetch stops the linked agent (or everything when unlinked).","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/create_tripwire","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["secret","url"]},"label":{"default":"","type":"string","maxLength":60},"style":{"default":"api-key","type":"string","enum":["api-key","aws","password"]},"agent_id":{"type":"string","maxLength":40}},"required":["kind"]}},{"name":"list_tripwires","auth":"Authorization: Bearer <owner key or operator key>","description":"Tripwires with hit counts.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/list_tripwires","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"delete_tripwire","auth":"Authorization: Bearer <owner key>","description":"Delete a tripwire.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/delete_tripwire","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tripwire_id":{"type":"string","maxLength":40}},"required":["tripwire_id"]}},{"name":"set_alerts","auth":"Authorization: Bearer <owner key>","description":"Where alarms go. webhook_url: an overseer agent's HTTPS endpoint (JSON body, signed x-halt-signature = sha256 HMAC with your alert_key). ntfy_topic: a phone. Pass null to clear. allow_resume_from_alerts: let notification buttons and the alert page resume agents (off by default: anyone who sees an alert can stop, only the owner can resume).","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/set_alerts","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"ntfy_topic":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"allow_resume_from_alerts":{"type":"boolean"}}}},{"name":"create_operator_key","auth":"Authorization: Bearer <owner key>","description":"A key for an overseer agent that can read everything and pause, stop or STOP ALL, but cannot resume, change rules, tripwires or alerts, delete agents, or see other keys. Give overseers this instead of the owner key.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/create_operator_key","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"default":"","type":"string","maxLength":60}}}},{"name":"list_keys","auth":"Authorization: Bearer <owner key>","description":"Operator keys on this account (never the keys themselves).","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/list_keys","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}}},{"name":"revoke_key","auth":"Authorization: Bearer <owner key>","description":"Revoke an operator key; it stops working immediately.","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/revoke_key","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key_id":{"type":"string","maxLength":40}},"required":["key_id"]}},{"name":"send_feedback","auth":"none (send the owner key to link it to your account)","description":"Tell the people who build Halt what broke, what's missing or what works. No account needed; send the owner key to link it to your account. Agents welcome: describe what you tried and what happened.","http":"POST https://aiapp-halt.vercel.app/api/v1/feedback","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","minLength":3,"maxLength":4000},"kind":{"default":"other","description":"bug | idea | question | praise | other","type":"string","enum":["bug","idea","question","praise","other"]},"contact":{"description":"Optional: how to reach you (email, handle, URL)","type":"string","maxLength":200}},"required":["message"]}},{"name":"rotate_keys","auth":"Authorization: Bearer <owner key>","description":"Rotate the owner key (which=owner; returns the new one, the old stops working) or the alert key (which=alert).","http":"POST https://aiapp-halt.vercel.app/api/v1/owner/rotate_keys","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"which":{"type":"string","enum":["owner","alert"]}},"required":["which"]}}]}