inbox
Skill0 starsChanged 4 months agoMITView on GitHub
Send a message from one Claude session to another concurrent session — typically a sandboxed session asking the host (non-sandboxed) session to do something the sandbox can't (write via a read-only connector, run a host-only tool), or leaving a note for a named session. Delivery is automatic via the inbox hook. Also covers the rare container (e.g. ~/me) that can't reach the shared inbox and needs a manual relay.
25 other projects use a version of this.
Adopted by
Most recently taken up by
- nmamano/isomuxtheir own version, first seen Nov 8, 2026
- tandregbg/core-claude-skillstheir own version, first seen Nov 4, 2026
- buildomator/buildomatortheir own version, first seen Nov 4, 2026
- le4ker/mneme-templatetheir own version, first seen Nov 1, 2026
- shakhruz/mila-coretheir own version, first seen Nov 1, 2026
- Anglesite/anglesite-skillstheir own version, first seen Oct 27, 2026
Used with
Projects with it also use tailor, task and 7 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ledqSkilltailor
Tailor the resume to one job posting. Give it a URL, paste the posting (or refer to one pasted earlier in this chat), or point at a saved application folder; it resolves the JD and runs the tailor-pipeline workflow end to end.
Also in 3 projects that use this
endlessblinkSkilltask
Create a new task in MASTER_PLAN.md with auto-generated sequential IDs. Supports TASK, BUG, FEATURE, and INQUIRY types. Triggers on "/task", "add task", "new task", "create task", "track this".
Also in 3 projects that use this
genomewalkerSkilltasks
Browse and resume tasks, threads, and background jobs across sessions
Also in 3 projects that use this
AnthropicSkillonboarding
Generate an onboarding checklist and first-week plan for a new hire. Use when someone has a start date coming up, building the pre-start task list (accounts, equipment, buddy), scheduling Day 1 and Week 1, or setting 30/60/90-day goals for a new team member.
Also in 3 projects that use this
VercelSkillsetup
Set up Vercel CLI and project configuration. Use when the user says "set up Vercel", "configure Vercel", "link to Vercel", or "vercel init".
Also in 6 projects that use this
AnthropicSkillstatus
Case status summary by audience — client-facing (plain language), internal (for the professor), or court-ready (formal caption format per local rules). Same facts, different framing and depth. Use when a student needs to update the client, brief the professor, or prepare a court status report.
Also in 3 projects that use this
Other versions25 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 25
- me2resh/apexyard★ 542same name
- m13v/fazm★ 340same name
- mediar-ai/fazm★ 340same name
- kv0906/pm-kit★ 138same name
- minorun365/html-share★ 117same name
- buildomator/buildomator★ 102same name
- nmamano/isomux★ 43same name
- alxyrgin/health-os★ 38same name
- Anglesite/anglesite-skills★ 15same name
- aibtcdev/skills★ 11same name
15 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository39 other files it gives its agents.
- anecdotesSkill
- backupSkill
- checkSkill
- cite-syncSkill
- dataSkill
- diariosSkill
- distill-styleSkill
- driveSkill
- dropboxSkill
- fetch-annotationsSkill
- findings-auditSkill
- findingsSkill
- gmailSkill
- handoffSkill
- howtoSkill
- hypothesisSkill
- iatSkill
- ideaSkill
- institutionsSkill
- literatureSkill
- llmkitSkill
- meetSkill
- memory-auditSkill
- new-pipelineSkill
- new-projectSkill
- nextSkill
- otterSkill
- outlookSkill
- questionsSkill
- referee-panelSkill
- siteSkill
- style-checkSkill
- style-reviewSkill
- style-reviseSkill
- tactiqSkill
- theorySkill
- validate-sectionSkill
- whatsappSkill
- zoomSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 1 is distinctive, and 3 are very specific to this project.
0
Common
Most of the 20 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 26
Don't hand-write message files.
- Very specific: line 83
Check inbox/presence/ before sending something load-bearing: if the target's last_seen is already over an hour old, it is unreachable, and …
- Very specific: line 106
If SHARED, use send_message.py as above — you're done.
- Very specific: line 107
If ISOLATED (the ~/me case), write the message to ~/me/claude/outbox/sandbox-to-host_<TS>.md and say plainly: *"Message staged in the ~/me …
“Common” is measured: kept by at least 6 in 10 of the 20 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Inter-session inbox
Concurrent Claude sessions leave messages for each other under
<workspace>/inbox/messages/. A UserPromptSubmit hook (userprompt_inbox.py) injects any
unseen messages addressed to a session at its next prompt, so delivery is automatic — nobody
has to relay or be told to "check the inbox".
Host and sandbox share the SAME <workspace> filesystem and git repo. The sandbox's
/workspace and the host's workspace are the same directory on the same machine (see
[[workspace_shared_filesystem]]). So the normal case is simple: write the message into the
shared inbox and the other session picks it up. There is no "may not be mounted" problem in the
standard sandbox — that only bites the separate ~/me container (see Fallback below).
Just use the sender tool
Don't hand-write message files. Use:
research-kit/tools/send_message.py --to host --subject "<subject>" --body "<text>"
# body can also come from stdin:
echo "Rebuild rol and deploy." | research-kit/tools/send_message.py --to host --subject "rol deploy"The tool resolves the workspace, writes <from>-to-<to>_<utc-timestamp>.md into
<workspace>/inbox/messages/, and stamps the machine-parsed headers
(From-Session: / From-Name: / To-Session: / To-Name:) so the recipient can reply
straight back. Hand-rolling the file loses reply-routing and name targeting.
Addressing (pick one)
--to host | sandbox | all— environment address. Default is the other env (a sandbox session defaults to reaching a host session). Use when you don't care which session of that type picks it up. If none is running, the file waits until one is.--to-name "<name>"— target the session a user named with/rename(resolved via~/.claude/sessions/). This is how "message the 'CGU pipeline' session" works. Prints the list of named sessions if the name doesn't match.--to-session <id>— target one specific session id (e.g. aFrom-Sessionyou received in a reply).
Where the workspace is
send_message.py and the hook both resolve <workspace> the same way, so you rarely need the
literal path — but for reference:
- Sandbox:
/workspace. - Host, laptop:
~/research. - Host, educloud:
/projects/ec113/henrik/research/(set viaRESEARCH_WORKSPACE).
Resolution order: $RESEARCH_WORKSPACE if set, else the first of /workspace / ~/research
that contains research-kit/. On educloud, RESEARCH_WORKSPACE must be set because that path
isn't in the default candidate list.
Receiving
The hook delivers up to 3 unseen messages per prompt and tracks seen filenames per session in
~/.claude/state/inbox_seen_<session>.json. Act only on messages relevant to your current work;
leave targeted messages meant for another session (don't delete them). Delete (rm) only the
messages you actually consumed — they're git-ignored plain files. Because host and sandbox
share the same /workspace, a message another session wrote is already on disk for you — no
git pull or re-run needed.
Delivery is not guaranteed — don't read silence as agreement
inbox_waker.py (cron, every minute) types a sentinel prompt into an idle session's tmux pane,
so an idle peer is normally reached within ~1-3 minutes. Two limits mean it can fail silently:
ACTIVE_SECS = 120— a session seen in the last 2 min counts as awake and is skipped, on the assumption its Stop hook will drain the mail. If it was mid-turn when you wrote, add ~2 min before expecting a reply. Don't conclude the system is broken and poke it by hand at t+1min.STALE_SECS = 3600— after an hour with no heartbeat the waker gives up permanently. A message to a session that has been idle longer than that will never be delivered on its own.
Check inbox/presence/ before sending something load-bearing: if the target's last_seen is
already over an hour old, it is unreachable, and the roster injected into your prompt is a hint,
not a guarantee anyone is listening.
inbox_reaper.py (piggy-backs on the waker's cron entry, self-throttled hourly) retires messages
that sat undelivered past a 7-day grace: they move to inbox/dead/ (never deleted), each with
a line in inbox/dead/REAPED.jsonl recording whether it was undelivered or merely consumed
(delivered, recipient never rm'd it). If the sender is still in presence it gets a bounce saying
the request was not done. So: an undelivered ask eventually reports back, but slowly. For
anything that must happen regardless of whether a peer reads it, don't message — make it durable
yourself (edit the file, rule, or doc directly).
Fallback: a container without the shared inbox (~/me)
The ~/me container does not mount the shared workspace, so send_message.py can't write
into <workspace>/inbox/messages/ and the host cron can't see this container's filesystem (see
[[inbox_messaging]]). There, stage the message in the version-controlled ~/me outbox and tell
the user it needs a manual relay:
- Preflight — is the shared inbox reachable?
test -d /workspace/inbox/messages && echo SHARED || echo ISOLATED - If
SHARED, usesend_message.pyas above — you're done. - If
ISOLATED(the~/mecase), write the message to~/me/claude/outbox/sandbox-to-host_<TS>.mdand say plainly: "Message staged in the ~/me outbox; it won't auto-deliver from this container — paste the request into a host session, or open a session in ~/me and checkclaude/outbox/."
Verified against source on 2026-08-04:
research-kit/tools/send_message.py(sender),research-kit/tools/hooks/userprompt_inbox.py(delivery hook),research-kit/tools/drain_outbox.py(host upload-outbox drain — a separate mechanism for Dropbox uploads, not messaging).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

