
Ahelpa
- 6 installs
- Updated July 4, 2026
- alterxyz/ahelpa
ahelpa is a skill that launches, manages, and communicates with persistent helper coding agents via tmux.
About
ahelpa spawns, manages, and communicates with persistent helper agents running in tmux. A developer uses it to delegate long-running tasks, run parallel work across multiple agents, or get a fresh-context second opinion. Tasks and results are exchanged through files, with results landing in a per-session summary.md and artifacts directory.
- Spawn and manage persistent helper coding agents via tmux
- Fan out parallel work and wait on multiple helpers at once
- File-based handoff protocol with summary.md and artifacts per session
Ahelpa by the numbers
- 6 all-time installs (skills.sh)
- Ranked #12,825 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
ahelpa capabilities & compatibility
- Capabilities
- orchestration · planning
- Use cases
- orchestration · planning
What ahelpa says it does
ahelpa lets you spawn, manage, and communicate with persistent helper agents running in tmux.
**`wait` blocks until completion or timeout.** Default 500 seconds. If it returns `still_running`, re-wait
npx skills add https://github.com/alterxyz/ahelpa --skill ahelpaAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| Last updated | July 4, 2026 |
| Repository | alterxyz/ahelpa ↗ |
What it does
Spawn and manage persistent helper coding agents in tmux to delegate or parallelize work.
Who is it for?
Developers who want to delegate or parallelize coding tasks across multiple agent instances.
Skip if: Simple single-agent tasks where launching helper sessions adds overhead.
When should I use this skill?
You need to delegate a task to another coding agent, run parallel agents, or get a fresh-context second opinion.
What you get
Helper agents run tasks in tmux and return results via per-session files.
- summary.md
- artifacts directory
By the numbers
- default wait timeout is 500 seconds
- 12 documented key rules
- a meaningful task typically takes 2-10 minutes
Files
ahelpa — Agent Help Agent
What is ahelpa
ahelpa lets you spawn, manage, and communicate with persistent helper agents running in tmux. Use it to delegate long-running tasks, fan out work across multiple parallel agents, or get a second opinion from a fresh context without polluting your own conversation.
Packaged releases include the runtime bundle. Source checkouts can build it with bun run package:skill.
Public documentation is available in English and Simplified Chinese:
README.md/README.zh-CN.mddocs//docs/zh-CN/
Installation
which ahelpa || {
mkdir -p ~/.ahelpa/bin
tar xzf <skill-dir>/bundle/ahelpa-darwin-arm64.tar.gz -C ~/.ahelpa/bin/
export PATH="$HOME/.ahelpa/bin:$PATH"
}Replace <skill-dir> with the absolute path to this skill's directory. The binary installs to ~/.ahelpa/bin/. Run ahelpa version to verify. If the bundle is missing in a source checkout, run bun run package:skill first.
Quick Start
result=$(ahelpa launch claude-code --task "Refactor the auth module")
session_id=$(echo $result | jq -r .sessionId)
token=$(echo $result | jq -r .ownerToken)
ahelpa wait "$session_id"
cat ".ahelpa/$session_id/summary.md"Helper type to CLI binary mapping:
claude-code→claudeCLI on PATHcodex→codexCLI on PATH
Verify prerequisites with command -v claude or command -v codex, not command -v claude-code.
Key Rules
1. File handoff is the protocol. Exchange tasks and results through files. Do not rely on capture to parse terminal output. 2. `wait` blocks until completion or timeout. Default 500 seconds. If it returns still_running, re-wait — this is normal, not an error. 3. Wait on multiple helpers at once. Use ahelpa wait id1 id2 id3, not one-at-a-time waits. 4. Ownership is non-transitive. You can only manage sessions you launched. Your helper's helpers are not yours to control. 5. Results land in files. After completion: .ahelpa/<session-id>/summary.md for the summary, .ahelpa/<session-id>/artifacts/ for supporting files. 6. Use `task` for long instructions. ahelpa task <id> --file <path> avoids tmux keystroke limits. 7. `capture` is for debugging only. Not a communication channel. 8. Tidy up. After reading results, move useful outputs to the project tree and keep .ahelpa/ clean. 9. Helpers have full permissions. They run as the local user. Use --project to scope working directories, or git worktrees for isolation. 10. Inline refresh works without daemon. wait, check, and status refresh session state even if the daemon isn't running. 11. Don't re-derive the CLI. Follow this document for normal helper delegation. Only inspect src/ or tests/ when debugging ahelpa itself. 12. Trust prompt handling is automatic. The codex driver handles directory trust prompts by sending Enter. No manual intervention needed during normal use.
Timing and Patience
Helpers are full coding agents. A meaningful task typically takes 2–10 minutes.
- Wait first, ask questions later. The 500-second default is generous.
- `still_running` is normal. Re-wait. The helper is working.
- Don't capture early. It adds no information in the first few minutes.
- Don't poll every 30 seconds. One wait, then one re-wait if needed.
- Escalate after 8–10 minutes of silence. Use
captureonce to see what's happening, thensendto nudge orkilland retry.
Command Reference
| Command | Description |
|---|---|
launch <type> --task "..." [--label] [--project] | Spawn a helper. Returns JSON: sessionId, ownerToken, tmuxSession. |
wait <id...> [--all] [--timeout <seconds>] | Block until sessions complete or timeout (default 500s). |
check [--parent <id>] | Non-blocking status poll. |
send <id> "msg" --token <tok> | Send a message to a running helper. |
capture <id> --token <tok> [--lines N] | Snapshot terminal output (debugging only). |
task <id> --file <path> --token <tok> | Deliver a task file to a running helper. |
kill <id> --token <tok> | Terminate a helper session. |
logs <id> --token <tok> | Read session output (live or archived). |
status | Show all sessions and daemon state. |
clean | Remove dead records and orphan runtime files. |
version | Show installed runtime version. |
| `daemon start\ | stop` |
Sentinel Protocol
Helpers signal completion by printing sentinel strings to stdout:
[AHELPA:DONE]— task finished; results written to.ahelpa/<session-id>/[AHELPA:NEED_HELP]— helper is stuck and needs input from the host
The daemon (or inline refresh) detects these and transitions session state: DONE → idle, NEED_HELP → error. A wait returning error means the helper asked for help — use capture or logs to see what it needs, then send to intervene.
Messenger Pattern
For long tasks or multiple parallel helpers, spawn a cheap background subagent to poll rather than blocking with wait.
| Situation | Approach |
|---|---|
| Short task, single helper | ahelpa wait <id> |
| Long task or multiple helpers | Spawn a messenger subagent |
Messenger prompt template:
You are a messenger. Your only job is:
1. Periodically run: ahelpa check
2. When a session shows idle/error/dead, inspect its .ahelpa/<session-id>/ result directory
3. Report the status and summarize summary.md plus any artifacts
4. Do NOT do any work yourself — no analysis, no coding, no modifications
5. Be patient. No results is normal. Keep checking.See references/claude-code.md and references/codex.md for platform-specific messenger setup.
Troubleshooting
ahelpa is a thin layer over tmux. Every helper is a plain tmux session:
tmux ls # list all sessions
tmux attach -t <session-id> # attach and see live output
tmux capture-pane -t <session-id> -p # dump pane content without attachingManual tmux intervention is an allowed escape hatch, not a protocol violation. After manual intervention, the sentinel protocol still works.
Closure Gate
For development/testing of ahelpa itself:
bun run closure:gateVerifies the full launch → wait → capture → kill cycle across both drivers. If codex returns an authentication error, fix the local codex CLI login state before running the gate.
ahelpa on Claude Code
Platform-specific guidance for using ahelpa inside Claude Code.
Binary Mapping
ahelpa launch claude-code ...uses theclaudeCLIahelpa launch codex ...uses thecodexCLI
Verify with command -v claude or command -v codex, not command -v claude-code.
Typical Workflow
# 1. Launch a helper
result=$(ahelpa launch claude-code --task "Add unit tests for auth.ts" --project /path/to/project)
session_id=$(echo $result | jq -r .sessionId)
token=$(echo $result | jq -r .ownerToken)
# 2a. Short task: wait inline
ahelpa wait "$session_id"
# 2b. Long task: spawn a messenger (see below)
# 3. Pick up results
cat ".ahelpa/$session_id/summary.md"
ls ".ahelpa/$session_id/artifacts/"Cross-agent launch:
result=$(ahelpa launch codex --task "Migrate the database schema" --project /path/to/project)
session_id=$(echo "$result" | jq -r .sessionId)
ahelpa wait "$session_id"Spawning a Messenger
Use the Agent tool with run_in_background: true and a cheap model:
{
"tool": "Agent",
"input": {
"model": "haiku",
"run_in_background": true,
"prompt": "You are a messenger. Your only job is:\n1. Periodically run: ahelpa check\n2. When a session shows idle/error/dead, inspect .ahelpa/<session-id>/\n3. Report the status and summarize summary.md plus any artifacts\n4. Do NOT do any work yourself — no analysis, no coding, no modifications\n5. Be patient. No results is normal. Keep checking."
}
}PostToolUse Hook
You can configure a hook to automatically check helper status after every Bash call:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "ahelpa check --parent 2>/dev/null || true"
}
]
}
]
}
}This gives passive status notifications without manual polling.
Timeout
ahelpa wait defaults to 500 seconds, fitting within Claude Code's 600-second Bash tool timeout. Never set --timeout above 580 to preserve teardown headroom.
Codex Helper Note
In some directories, codex shows a one-time trust prompt. The launch flow handles this automatically by sending Enter. If codex still looks idle, run ahelpa check to re-read session state.
Usage Discipline
For normal helper delegation, follow the SKILL.md workflow directly. Only inspect src/ or tests/ when debugging ahelpa itself.
ahelpa on Codex
Platform-specific guidance for using ahelpa inside the Codex CLI.
Runtime Constraints
Codex operates in persistent interactive mode only — there is no background agent or subagent tool. All ahelpa operations happen inline in your conversation loop.
Codex is launched with --dangerously-bypass-approvals-and-sandbox, so helper agents also run with full permissions. Be deliberate about --project and working directory isolation.
Binary Mapping
ahelpa launch codex ...uses thecodexCLIahelpa launch claude-code ...uses theclaudeCLI
Verify with command -v codex or command -v claude, not command -v claude-code.
Trust Prompts
In some directories, codex shows a one-time trust prompt (Do you trust the contents of this directory?). The launch flow handles this automatically by sending Enter, then proceeds to task delivery. If a task appears idle for an unusually long time, run ahelpa check to re-read session state.
Typical Workflow
# 1. Launch a helper
result=$(ahelpa launch codex --task "Migrate DB schema" --project /path/to/project)
session_id=$(echo $result | jq -r .sessionId)
# 2. Wait (500s default fits Codex interactive limits)
ahelpa wait "$session_id"
# 3. Pick up results
cat ".ahelpa/$session_id/summary.md"
ls ".ahelpa/$session_id/artifacts/"Cross-agent launch:
result=$(ahelpa launch claude-code --task "Review the API contracts" --project /path/to/project)
session_id=$(echo "$result" | jq -r .sessionId)
ahelpa wait "$session_id"Messenger Pattern
Codex has no background agent tool, so the messenger pattern works differently: you must poll inline rather than delegating to a subagent.
while true; do
result=$(ahelpa check)
echo "$result" | jq '.[] | select(.status == "idle" or .status == "error" or .status == "dead")'
sleep 30
donePrefer ahelpa wait for single short tasks. Structure multi-helper work so you can checkpoint and poll between steps.
Notes
- No PostToolUse hooks in Codex — manual
ahelpa checkis required. captureis available for debugging but should not be part of normal flow.wait,check, andstatusperform inline refresh even without the daemon running.- Keep
.ahelpa/tidy: move useful outputs to the project tree when done.
Usage Discipline
For normal helper delegation, follow the SKILL.md workflow directly. Only inspect src/ or tests/ when debugging ahelpa itself.
Related skills
FAQ
How do helpers return their results?
Results land in files: .ahelpa/<session-id>/summary.md for the summary and .ahelpa/<session-id>/artifacts/ for supporting files.
What does still_running mean after a wait?
It is normal, not an error; re-wait because the helper is still working. The default wait timeout is 500 seconds.