agents
Skill24 starsChanged 2 months agoMITView on GitHub
Delegate long-running work (research, deep summaries, multi-step analysis) to detached sub-agents. Edmund orchestrates; the sub-agent does the task in the background. MANDATORY for any task >30s — spawning releases the session lock so new messages are processed immediately.
43 other projects use a version of this.
Adopted by
Most recently taken up by
- agentprocess/agentprocesstheir own version, first seen Nov 8, 2026
- OpenMontageInc/OpenMontagetheir own version, first seen Nov 8, 2026
- calesthio/OpenMontagetheir own version, first seen Nov 8, 2026
- akillness/jeo-skillstheir own version, first seen Nov 6, 2026
- claude-world/director-mode-litetheir own version, first seen Nov 1, 2026
- metagit-ai/metagit-clitheir own version, first seen Oct 31, 2026
Used with
Projects with it also use realtime, speech-engine and 8 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.
hkarpinenSkillrealtime
Real-time communication patterns for web applications — WebSockets, Server-Sent Events (SSE), transport selection, scaling persistent connections, and reverse proxy configuration. Use when implementing live updates (vote counts, new replies, typing indicators, notifications), choosing a transport, designing real-time event flows, or wiring real-time into a multi-context system. Stack agnostic — applies to any backend and frontend. Does NOT cover message broker configuration or domain event design.
Also in 5 projects that use this
RobStrayerSkillspeech-engine
Add real-time voice conversations to a custom agent runtime with ElevenLabs Speech Engine. Use when building Speech Engine servers, WebSocket handlers, WebRTC browser clients, conversation token endpoints, interruption-aware streaming responses, or voice-enabled chat agents that connect developer-owned server logic to ElevenLabs speech-to-text and text-to-speech.
Also in 3 projects that use this
RobStrayerSkillvoice-isolator
Remove background noise and isolate vocals/speech from audio using ElevenLabs Voice Isolator (audio isolation) API. Use when cleaning up noisy recordings, removing music or background ambience from dialogue, isolating speech from field recordings, preparing audio for transcription, extracting vocals, or any "denoise / clean up / isolate voice" task.
Also in 3 projects that use this
wlzhSkillvoice-changer
音频变声处理工具 - 使用 RVC AI 模型进行真实的声音转换,支持视频直接输入
Also in 3 projects that use this
perso-aiSkilldubbing
Auto-dub (voice-translate) videos into other languages, with lip-sync (Perso AI Dubbing).
Also in 3 projects that use this
awesome-genmediaSkillsound-effects
Generate custom sound effects using each::sense AI. Create realistic and stylized audio for any scenario including impacts, ambiences, foley, UI sounds, nature, mechanical effects, and transitions. Powered by stable-audio-2-5 for precise audio generation. Use for: video production, game development, podcasts, apps, UI/UX, presentations, film. Triggers: sound effect, sfx, audio effect, foley, generate sound, ambient sound, ui sound, impact sound, whoosh, explosion, nature sound, notification sound, create audio
Also in 3 projects that use this
Other versions43 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 43
- calesthio/OpenMontage★ 78ksame name
- OpenMontageInc/OpenMontage★ 78ksame name
- mex-memory/mex★ 1.8ksame name
- theDakshJaitly/mex★ 1.8ksame name
- elevenlabs/skills★ 539same name
- butterbase-ai/butterbase-plugin★ 535same name
- butterbase-ai/butterbase-skills★ 535same name
- tadaspetra/loop★ 296same name
- aws-samples/sample-well-architected-skills-and-steering★ 268same name
- Chinna95P/mpv-anime-build★ 225same name
33 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 repository27 other files it gives its agents.
- persona.example/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- cloudflareSkill
- deep-researchSkill
- fishingSkill
- frontend-designSkill
- generationSkill
- gifgrepSkill
- hikeSkill
- historySkill
- image-genSkill
- instant-shareSkill
- iterative-designSkill
- kitchenSkill
- printingSkill
- radaromega-proSkill
- radaromegaSkill
- remindersSkill
- skycamSkill
- summarizeSkill
- compare-optionsSkill
- research-trioSkill
- teamsSkill
- trading-loopSkill
- videoSkill
- voice-memoSkill
- web-design-guidelinesSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 5 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 38 edited versions we read keep these.
5
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
- Very specific: line 12
Any task >30 seconds MUST use
spawn_agent: Never run long work inline. - Distinctive: line 23
Don't spawn for:
- Distinctive: line 52
When you see this, deliver immediately — read, reformat, send.
- Very specific: line 56
If you started inline work and then realized it's longer than expected, OR check_incoming() shows the user sent a follow-up, use …
- Distinctive: line 103
When you read a result, don't paste it raw.
- Very specific: line 108
If the result is long, send the takeaway as text and attach the full result.md via send_attachment.
- Distinctive: line 129
When an agent or team finishes, Edmund gets an automatic wake-up event in the parent conversation.
- Distinctive: line 139
When you see one of these, treat it as a prompt to deliver: read the result, reformat, send.
“Common” is measured: kept by at least 6 in 10 of the 38 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
agents
Edmund is the orchestrator. Sub-agents are the workers.
The mandate
Any task >30 seconds MUST use spawn_agent. Never run long work inline.
Why: while a claude -p turn is running, the session lock is held. New messages queue and the user gets no response until the turn ends. Spawning an agent releases the lock immediately — Edmund ends its turn, and new messages flow through normally. The agent runs in the background; Edmund is woken up when it finishes.
When to spawn
Spawn when:
- The task will take more than ~30 seconds (deep research, long article summarization, code analysis across many files, video generation pipeline, anything multi-step).
- You want to run two or three investigations in parallel.
- You want to reply to the user now and deliver the deeper answer once it's ready.
Don't spawn for:
- Simple one-shot lookups (a single web fetch, one tool call, a quick calculation). Those run fine inline.
- Something that requires the user's iMessage context (sub-agents don't share your persona or person-file memory).
- Media generation (
generate_image/generate_videohave their own paths — they're already non-blocking).
The standard flow
user: "research the top iMessage bots and give me a comparison"
edmund: check_incoming() ← any follow-ups before starting?
send_message("on it, give me a few")
spawn_agent(task: "Research the 5 most popular iMessage bot frameworks...")
→ returns agent_20260420_xxx
→ turn ends immediately, session lock released
user (sends a new message while agent runs): "also how are you doing"
→ processed normally — no lock contention
agent finishes → Edmund gets a wake-up event automatically
edmund: read_agent_result(id) → reformat → send replyWake-up is automatic — when an agent finishes, a cron event fires in the parent session. You do NOT need to poll. The wake-up envelope looks like:
[Scheduled event]
A sub-agent you spawned has finished (status: done).
Agent id: agent_... Task was: ...
Read the result with read_agent_result("agent_...") and relay it to the user.When you see this, deliver immediately — read, reformat, send. The user is waiting.
Mid-task preemption (handoff_current_work)
If you started inline work and then realized it's longer than expected, OR check_incoming() shows the user sent a follow-up, use handoff_current_work:
edmund: [already partway through long research inline]
check_incoming() → "actually can you also order me a pizza lol"
handoff_current_work(
work_done: "Found 3 sources on X, drafted outline...",
work_remaining: "Finish research, compile comparison table, write summary.",
context: "User asked for top 5 iMessage bot frameworks comparison."
)
→ spawns agent_20260420_yyy with full context
send_message("haha on it — also handed the research off, I'll send it when done")
→ turn ends fast, Edmund handles pizza ask inline next turnThe agent picks up exactly where you stopped. Edmund wakes up when it finishes.
Writing a good task
The sub-agent has no memory of this conversation. Everything it needs goes into the task string. Include:
- The goal in one sentence.
- The shape of the deliverable (number of items, bullet vs prose, with or without sources).
- Any constraints (timeframe, sources to avoid, format).
Bad: "research iMessage"
Good: "List 5 iMessage-compatible messaging frameworks. For each give: name, what it is in one line, the GitHub org, macOS version support, and one differentiator. Skip anything that's Android-first. Return as a numbered list."
Tools the sub-agent has
Full MCP palette (generation, history, skills, Bash, Read/Write, etc.) inside its own sandbox at <parent-sandbox>/agents/<id>/. It cannot:
- Send iMessage text (
send_message) or attachments (send_attachment) — session key isagent:<id>, which doesn't resolve to a chat. - Access Edmund's person-file or cross-conversation memory.
This is by design. The sub-agent is a focused worker. Edmund is the relay.
Managing in-flight agents
list_agents()— all agents from this conversation, newest firstlist_agents(status: "running")— just the active onescheck_agent(id)— status + log tail; useful when the user asks "what's it doing?"cancel_agent(id)— when the task's obsoleteread_agent_result(id)— only when status=done
Reporting back to the user
When you read a result, don't paste it raw. The sub-agent's output is structured for you, not for iMessage. Reformat:
- Strip headers and markdown.
- Compress to the iMessage bubble-friendly shape from SOUL.md.
- Lead with the takeaway; follow with the supporting bullets.
- If the result is long, send the takeaway as text and attach the full
result.mdviasend_attachment.
Teams (multi-agent coordination)
For multi-stage pipelines or parallel investigation, use spawn_team instead of N individual spawn_agent calls:
spawn_team(members)— one call spawns a coordinated group with a sharedteam_idand a shared scratch dir (<parent-sandbox>/teams/<team_id>/shared/). Members can drop files there for handoff.list_team(team_id)— progress across all members.read_team_results(team_id)— role-keyed map of all member results.cancel_team(team_id)— kill the whole group.
Team completion fires ONE wake-up event when all members settle (not one per member). Individual spawn_agent fires per-completion.
Pre-shaped team patterns live in skills/teams/:
research-trio— scout + summarizer + verifier for researched answers.compare-options— one agent per named option, same criteria for all, for side-by-side comparisons.
list_skills(query: "team") to see what's there. Read the skill, tailor the task strings to the topic, call spawn_team.
Proactive delivery
When an agent or team finishes, Edmund gets an automatic wake-up event in the parent conversation. The event envelope will read like:
[Scheduled event · <timestamp>]
A sub-agent you spawned has finished (status: done).
Agent id: agent_...
Task was: ...
Read the result with `read_agent_result("agent_...")` and relay it to the user.When you see one of these, treat it as a prompt to deliver: read the result, reformat, send. The user is waiting on this — don't just acknowledge the event, finish the relay in this same turn.
Anti-patterns
- Spawning an agent for a task you could do in one inline tool call. Wastes tokens and adds latency.
- Writing vague tasks ("research X") and expecting structured output. Pin down the shape.
- Calling
spawn_teamwhen onespawn_agentwould do. Teams have overhead (N API calls, shared-dir bookkeeping); only use them when the work genuinely splits across roles. - Pasting raw sub-agent output into iMessage. Reformat first.
- Ignoring the proactive delivery event. If the envelope says an agent finished, actually deliver.
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.

