From release
File-based messaging between agents across any harness. Invoke this skill when you see "📬 unread in .agents/inbox", need to send or read agent messages, or set up an inbox. Triggers on: "📬", ".agents/inbox", "agent inbox", "send message to agent", "check inbox", "agent message".
npx claudepluginhub fairchild/dotclaude --plugin skill-creatorThis skill uses the workspace's default tool permissions.
File-based messaging for agents across harnesses (Claude Code, Codex, Cursor, Gemini CLI, Warp, etc.). Just filesystem operations — `mkdir`, `cat`, `mv`.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
File-based messaging for agents across harnesses (Claude Code, Codex, Cursor, Gemini CLI, Warp, etc.). Just filesystem operations — mkdir, cat, mv.
Pick a goal-oriented slug for yourself (see Self-naming), then create your inbox:
mkdir -p .agents/inbox/<your-slug>/{new,tmp,archive}
Write to tmp/, then mv to new/ (atomic — prevents partial reads). If the directory doesn't exist yet, create it with mkdir -p first.
cat > .agents/inbox/recipient/tmp/20260315T101500-auth-ready.md << 'EOF'
---
from: my-agent
to: recipient
reply_to: ../my-agent/tmp/
timestamp: 2026-03-15T10:15:00Z
thread: auth-v2
---
Auth middleware rewrite is ready on `feat/auth-v2`.
EOF
mv .agents/inbox/recipient/tmp/20260315T101500-auth-ready.md .agents/inbox/recipient/new/
ls .agents/inbox/my-agent/new/
cat .agents/inbox/my-agent/new/20260315T101500-auth-ready.md
mv .agents/inbox/my-agent/new/20260315T101500-auth-ready.md .agents/inbox/my-agent/archive/
Read reply_to from the message frontmatter — it points to the sender's tmp/ directory. Write there, then mv to new/.
When you first need an inbox and don't already have one, name yourself:
auth-rewrite, sidebar-focus, lume-validationmkdir -p .agents/inbox/<your-slug>/{new,tmp,archive}from in all messagesGood names are goal-oriented, not role-oriented. Prefer fix-split-focus over agent-1 or debugger. If the conversation pivots significantly, keep your original name — identity stability matters more than perfect accuracy.
Tell each agent the other's inbox path, or let agents discover peers by listing .agents/inbox/. Every message carries reply_to so the recipient can reply without prior setup.
Markdown with YAML frontmatter. Filename: <YYYYMMDDTHHMMSS>-<slug>.md
| Field | Required | Description |
|---|---|---|
from | yes | Sender's agent name |
to | yes | Recipient's agent name |
reply_to | yes | Sender's tmp/ dir, relative to recipient's inbox (e.g. ../sender/tmp/) |
timestamp | yes | ISO 8601 |
thread | no | Topic grouping (e.g. auth-v2) |
auth-update, review-needed, api-readytmp/ then mv to new/: atomic writes prevent partial readsnew/ to archive/scripts/check-inbox-hook.sh scans .agents/inbox/*/new/ from the working directory. Silent when empty — no configuration needed.
scripts/inbox-startup.sh prints a summary of unread messages when a session starts. Agent name comes from $CLAUDE_SESSION_NAME (falls back to orchestrator). Silent when empty, fast (<200ms).
Configure in settings.json:
{
"hooks": {
"SessionStart": [
{
"type": "command",
"command": "bash ~/.claude/skills/agent-inbox/scripts/inbox-startup.sh"
}
]
}
}
scripts/wake-parent.sh bridges async inbox messages to session lifecycle. After writing a reply to a parent's inbox, call it to wake the parent:
wake-parent.sh --surface <cmux-surface-ref> [--inbox-path <path>] [--agent <name>]
Behavior based on surface state:
claude -p session that reads the inboxNote: The spawned headless session uses
--dangerously-skip-permissionsbecause there is no human at the terminal to approve tool calls. This is the pragmatic approach for now — a future permissions profile or allowlist flag would be preferable.
Requires cmux. See cmux-orchestrator skill for the full Wake-on-Reply pattern.