Agent Notifications
777genius/agent-notifications
Send an Agent Notifications desktop notification when the user requests one, attention is needed, or a meaningful milestone warrants an alert during ongoing work.
A skill your agent uses when acting as a project manager that delegates tasks to other coding-agent sessions (Claude Code, Codex, or Pi) - launch workers, assign them work, monitor progress, review…
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install obra/claude-session-driver driving-claude-code-sessions --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/driving-claude-code-sessions .claude/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .claude/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessionsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install obra/claude-session-driver driving-claude-code-sessions --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/driving-claude-code-sessions .agents/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .agents/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install obra/claude-session-driver driving-claude-code-sessions --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/driving-claude-code-sessions .cursor/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .cursor/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/obra/claude-session-driver.git --path skills/driving-claude-code-sessions--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install obra/claude-session-driver driving-claude-code-sessions --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/driving-claude-code-sessions .gemini/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .gemini/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install obra/claude-session-driver driving-claude-code-sessionsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/driving-claude-code-sessions .github/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .github/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install obra/claude-session-driver driving-claude-code-sessions --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obra/claude-session-driver.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/driving-claude-code-sessions .opencode/skills/driving-claude-code-sessions && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "driving-claude-code-sessions" agent skill from https://github.com/obra/claude-session-driver/tree/main/skills/driving-claude-code-sessions into .opencode/skills/driving-claude-code-sessions/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "driving-claude-code-sessions", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
driving-claude-code-sessionsA skill your agent uses when acting as a project manager that delegates tasks to other coding-agent sessions (Claude Code, Codex, or Pi) - launch workers, assign them work, monitor progress, review…
Driving Claude Code Sessions is an agent skill from obra/claude-session-driver. Use when acting as a project manager that delegates tasks to other coding-agent sessions (Claude Code, Codex, or Pi) - launch workers, assign them work, monitor progress, review their tool calls, and collect results
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts.
It sits in Product & Project Management, covering Project management. It works with tmux. The repository describes itself as: Launch, control, and monitor other Claude Code sessions as workers via tmux. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c1c4f8d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
codexclaudeFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Driving Claude Code Sessions loads about 4.2k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 1,772 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from obra/claude-session-driver at commit c1c4f8d, republished under its MIT licence (© obra). 1,772 words, ~4,192 tokens.
.claude/skills/driving-claude-code-sessions/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.You can launch coding-agent sessions — Claude Code, Codex, or Pi — as "workers" in tmux, send them prompts, wait for them to finish, read their output, and hand them off to a human. Workers run with permissions bypassed, so they execute tool calls without prompting. Each worker emits lifecycle events to a JSONL file so the controller can observe what it's doing — Claude and Codex through their hook systems, Pi through a native extension csd loads into it.
All operations go through a single CLI: csd. After launching a worker, the controller receives a shim path at /tmp/csd-workers/bin/<tmux-name> that bakes in the worker handle. Every per-worker operation goes through that path — no positional state to thread between calls, no absolute skill path to prepend. A small set of environment variables tune behavior; see Environment variables at the bottom.
(The worker dir moved from /tmp/claude-workers to /tmp/csd-workers; when the default path is in use, csd creates a back-compat symlink /tmp/claude-workers → /tmp/csd-workers, so old paths and muscle memory still resolve.)
The shim path is deterministic: if you pick a memorable tmux name at launch, you can reconstruct /tmp/csd-workers/bin/<tmux-name> whenever you need it. For agents driving via tool calls, that's the right model — shell state doesn't persist between calls, so a SHIM=...; $SHIM cmd pattern just adds noise. The examples below use the bare path.
Pick a harness with --harness at launch (default claude):
$SKILL/csd launch --harness codex my-task /path/to/project
$SKILL/csd launch --harness pi my-task /path/to/projectThe controller-facing command surface is identical across all three harnesses — launch, send, converse, wait-for-turn, read-turn, read-events, status, stop, and handoff behave the same regardless of harness. A few things differ:
~/.claude, Codex ~/.codex, Pi ~/.pi/agent. csd stages that login into the worker at launch, so to rotate credentials, relaunch.adopt is Claude-only. Claude takes a caller-assigned session id, so a session can be resumed by id (claude --resume). Codex and Pi mint their own ids on the first prompt and offer no resume-by-id — relaunch them instead.launch and the first send/converse a codex worker's status, session-id, and wait-for-turn return no worker known — it is running, it just hasn't registered yet. converse handles this internally, so the typical launch→converse path is fine; only the lower-level commands see the gap. (Claude takes its id at launch and Pi registers at launch, so both are queryable immediately.)(No jq and no bash hooks: csd is a TypeScript/node tool and its hooks are node programs. node is required, but it's already present wherever Claude Code runs.)
The CLI lives at <skill>/scripts/csd. Top-level subcommands need the skill path:
csd launch [--harness <claude|codex|pi>] <tmux-name> <cwd> [-- harness-args...] — bootstrap a worker (harness defaults to claude)csd adopt <tmux-name> <cwd> <session-id> [-- claude-args...] — re-adopt an existing Claude session as a worker (claude-only; see Recovering workers)csd list [--all] — enumerate workerscsd grant-consent — one-time consent for running workers with permissions bypassedOnce a worker is launched, run subsequent commands against /tmp/csd-workers/bin/<tmux-name>:
SKILL=/abs/path/to/skill/scripts
$SKILL/csd grant-consent # one-time per machine
$SKILL/csd launch my-task /path/to/project # stdout: /tmp/csd-workers/bin/my-task
/tmp/csd-workers/bin/my-task status # use the shim directlyPick a memorable tmux name at launch; the shim path is then deterministic. (You can capture it into a shell variable in an interactive shell, but for agent-driven workflows the bare path is simpler — there's no shell state to lose between calls.)
In examples below, $SKILL is the absolute path to skills/driving-claude-code-sessions/scripts. WORKER is the bare shim path (e.g. /tmp/csd-workers/bin/my-task) — substitute the deterministic path for your worker.
$SKILL/csd launch my-task /path/to/project
# stdout: /tmp/csd-workers/bin/my-task
# stderr: Worker launched. tmux/session_id/cwd/events/reproducecsd launch:
/tmp/csd-workers/bin/my-tasksession_start event; Codex and Pi mint their own ids on the first prompt, so launch settles their TUI and the worker's meta self-registers when it fires its first eventreproduce: line is the exact command to relaunch with the same argsPass harness CLI args after a -- separator, or pick a non-default harness with --harness:
$SKILL/csd launch my-task /path/to/project -- --model sonnet
$SKILL/csd launch --harness codex my-task /path/to/project/tmp/csd-workers/bin/my-task converse "Refactor the auth module" 300converse sends the prompt, waits for the worker to finish, and prints the final assistant text on stdout. For tool-heavy turns where the bare text strips the interesting part, use --with-turn to get the full markdown:
/tmp/csd-workers/bin/my-task converse --with-turn "Run the failing tests" 600Multi-turn just works — the wait tracks turn boundaries automatically:
/tmp/csd-workers/bin/my-task converse "Write tests for the auth module" 300
/tmp/csd-workers/bin/my-task converse "Add edge cases for expired tokens" 300If you need to drive the worker more directly:
/tmp/csd-workers/bin/my-task send "Refactor the auth module" # send without waiting
/tmp/csd-workers/bin/my-task wait-for-turn 300 # block until stop or session_end
/tmp/csd-workers/bin/my-task status # idle | working | terminated | gone | unknown
/tmp/csd-workers/bin/my-task read-turn # last turn as markdown (tool results truncated to 5 lines)
/tmp/csd-workers/bin/my-task read-turn --full # last turn with complete tool resultsEvery tool call emits a pre_tool_use event with the tool name and input. Tail the event stream to watch in real time:
/tmp/csd-workers/bin/my-task read-events --follow &
MONITOR_PID=$!
# ... do other work ...
kill $MONITOR_PIDOr pull events after the fact:
/tmp/csd-workers/bin/my-task read-events # all events
/tmp/csd-workers/bin/my-task read-events --last 5
/tmp/csd-workers/bin/my-task read-events --type pre_tool_use--type accepts one of: session_start, user_prompt_submit, pre_tool_use, post_tool_use, stop, session_end. Unknown event names fail fast. (Claude workers emit pre_tool_use but not post_tool_use; Codex and Pi emit both.)
If you see something you don't want, stop the worker:
/tmp/csd-workers/bin/my-task stop/tmp/csd-workers/bin/my-task stopSends /exit, waits up to 10s for session_end, kills the tmux session if still running, and removes the meta, events, and shim files.
stop is destructive: the worker is gone and the shim path stops working. If you wanted the worker around for follow-up turns or a parallel workflow, don't call stop until you're done with it. To resume work under the same name, relaunch — csd launch my-task /path/to/project again — and you'll get a fresh worker at the same shim path.
After stop, the shim no longer exists, so invoking it again surfaces a shell error along the lines of no such file or directory: /tmp/csd-workers/bin/my-task (the exact wording depends on your shell). That's expected; the worker is gone.
/tmp/csd-workers/bin/my-task handoffPrints attach instructions for a human to take over the tmux session.
$SKILL/csd list # live workers (idle/working/terminated)
$SKILL/csd list --all # include 'gone' workers (tmux already exited)
$SKILL/csd list api # substring filter on tmux name
$SKILL/csd prune # remove dead workers + orphaned sidecars/shimscsd launch [--harness <claude|codex|pi>] <tmux-name> <cwd> [-- harness-args...]
csd adopt <tmux-name> <cwd> <session-id> [-- claude-args...] # claude-only
csd list [--all] [<pattern>]
csd prune # remove dead/orphaned worker state
csd grant-consent
<shim> converse [--with-turn] <prompt> [timeout=120]
<shim> send <prompt>
<shim> wait-for-turn [timeout=60] [--after-line N]
<shim> status
<shim> read-events [--last N] [--type T] [--follow] # --last caps the --follow backlog
<shim> read-turn [--full]
<shim> stop
<shim> handoff
<shim> session-id
<shim> events-file<shim> is /tmp/csd-workers/bin/<tmux-name>. Run csd help for the same surface.
$SKILL/csd launch worker-api ~/proj
$SKILL/csd launch worker-ui ~/proj
/tmp/csd-workers/bin/worker-api send "Add pagination to /users"
/tmp/csd-workers/bin/worker-ui send "Add a loading spinner to the user list"
/tmp/csd-workers/bin/worker-api wait-for-turn 600
/tmp/csd-workers/bin/worker-ui wait-for-turn 600
/tmp/csd-workers/bin/worker-api stop
/tmp/csd-workers/bin/worker-ui stop$SKILL/csd launch spec ~/proj
/tmp/csd-workers/bin/spec converse "Write an OpenAPI spec for /users to /tmp/api.yaml" 300
/tmp/csd-workers/bin/spec stop
$SKILL/csd launch impl ~/proj
/tmp/csd-workers/bin/impl converse "Implement the endpoint defined in /tmp/api.yaml" 600
/tmp/csd-workers/bin/impl stopDon't trust worker B's summary of what it did — check the produced file. A worker can report success while having written the wrong thing (see Important Notes).
wait-for-turn matches stop OR session_end, so it returns when the worker dies. Call status afterward: if it's gone, the worker crashed.
converse timeout, check status before wait-for-turnA bare wait-for-turn baselines at the current end of the events file and waits for the next turn-end. If a converse timed out, the worker often finishes during the gap — the stop has already landed, so a follow-up wait-for-turn blocks the entire timeout waiting for a turn that will never start. After a timeout, call status first: idle means the turn already ended (read-turn to read it); working means it's still going.
Worker runtime state (the meta/events/shim files under /tmp/csd-workers) lives in /tmp, which macOS clears on reboot — and the tmux panes die with it. But the conversations survive: Claude Code persists each session transcript at ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl. csd adopt brings one back as a live, driveable worker (this is claude-only — Codex and Pi mint their own session ids and offer no resume-by-id, so relaunch those instead):
$SKILL/csd adopt my-task /path/to/project <session-id>
# stdout: /tmp/csd-workers/bin/my-task (same shim contract as launch)This is claude-only — codex/pi conversations do NOT survive stop. Codex and Pi run under a staged per-worker home at /tmp/csd-workers/homes/<name>/ (config, auth, and the rollout/session transcript), not your real ~/.codex / ~/.pi. stop removes that home, so the transcript is gone and there is no recovery path — relaunch starts a fresh session. Only claude persists its transcript outside the worker dir (in ~/.claude/projects), which is why only claude is adoptable.
adopt pre-writes the meta keyed by <session-id>, starts claude --resume <session-id> (which preserves the id, so the worker emits events normally), and writes the shim — so the resumed conversation is fully driveable (converse/status/read-turn/…), with all prior context intact. If a tmux session of that name already exists (e.g. restored by tmux-resurrect / tmux-continuum), adopt respawns its pane in place, preserving the restored layout; otherwise it opens a new one.
Find a worker's <session-id> from its working directory: the newest *.jsonl in ~/.claude/projects/<cwd with every / . _ replaced by ->. For bulk recovery (e.g. pairing with tmux-continuum's @continuum-boot), examples/recover-workers.sh reads a tmux-resurrect snapshot, derives each id, and calls adopt per worker — run it with --dry-run first. Note: workers are restored as resumed sessions, not their original tool/MCP state; re-pass any launch args (e.g. -- --model …) you depended on.
If you know the tmux name, the path is /tmp/csd-workers/bin/<tmux-name>. If you don't, csd list enumerates everything; csd list <pattern> filters by tmux-name substring.
send uses bracketed-paste, which handles multi-line and special characters. For prompts in the tens-of-KB range, write to a file and tell the worker to read it:
echo "Long instructions..." > /tmp/instructions.txt
/tmp/csd-workers/bin/my-task send "Read /tmp/instructions.txt and follow it"converse/read-turn return whatever the worker says — verbatim, including when the worker is confidently wrong. For correctness-critical handoffs, verify the produced artifact on disk, not the worker's prose self-report.The csd CLI honors a small set of env vars. All are optional.
| Variable | Purpose |
|---|---|
CSD_CLAUDE_BIN / CSD_CODEX_BIN / CSD_PI_BIN | Path to each harness binary. Default to claude / codex / pi (resolved via PATH). Set when a binary is not on PATH or you want to pin a specific version. |
CSD_CODEX_MODEL / CSD_PI_MODEL | Optional model override for codex / pi workers. Unset = the harness default (codex: gpt-5.5; pi: its configured default). |
CSD_CONVERSE_DIAG_FILE | When set, csd converse writes a post-mortem diagnostic on timeout — ps tree, tmux capture-pane, last 30 lines of the worker's session JSONL, last 20 lines of the csd events JSONL — to this path, then emits a csd-diagnostic: <path> pointer to stderr. The file is overwritten on each timeout. Unset = no diagnostic file. Useful when wrapping csd in a harness that can ship the file off-box before the worker is reaped. |
CSD_WORKER_DIR | Override the worker dir (default /tmp/csd-workers). The back-compat /tmp/claude-workers symlink is only created when the default is in use. |
CSD_SUBMIT_TIMEOUT / CSD_SUBMIT_RETRY_INTERVAL | send: seconds to wait for the worker to confirm a pasted prompt (default 10) and seconds between retry-Enter resends (default 2). Raise the timeout if a slow tmux session drops the paste. |
CSD_REGISTER_TIMEOUT | Seconds the FIRST send/converse to a derive worker (codex/pi) waits for it to self-register its session id (default 15). |
HOME | Used to locate ~/.claude/projects/<encoded-cwd>/<sid>.jsonl (claude) and the one-time consent file (~/.claude/.claude-session-driver-consent). |
csd help shows the same surface.
© obra, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/driving-claude-code-sessions of obra/claude-session-driver.
Open the folder on GitHubat commit c1c4f8d
Driving Claude Code Sessions next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Driving Claude Code Sessions this skillobra/claude-session-driver | 110 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Agent Notifications777genius/agent-notifications | 815 | — | ~1.8k | Automated safety check: Pass | Custom licence | |
| CCPM Project Managementautomazeio/ccpm | 8.4k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Uvastral-sh/claude-code-plugins | 313 | 2 repos | ~980 | Automated safety check: Pass | Apache-2.0 | |
| Project Managementkunchenguid/firstmate | 7.7k | — | ~2.1k | Automated safety check: Pass | MIT | |
| Hivemind Goalsactiveloopai/hivemind | 1.6k | — | ~1.7k | Automated safety check: Notes | Apache-2.0 |
777genius/agent-notifications
Send an Agent Notifications desktop notification when the user requests one, attention is needed, or a meaningful milestone warrants an alert during ongoing work.
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
astral-sh/claude-code-plugins
Guide for using uv, the Python package and project manager. An agent skill from astral-sh/claude-code-plugins.
kunchenguid/firstmate
Agent-only procedure for Firstmate project management. An agent skill from kunchenguid/firstmate.
activeloopai/hivemind
Create, track and update team goals via the Deeplake virtual filesystem at memory/goal/.
wanghetommy/ichartjs
Plan, validate, render, explain, and safely edit iChart.js visualizations from tabular, project, or diagram data.
Works with
Categories
A skill your agent uses when acting as a project manager that delegates tasks to other coding-agent sessions (Claude Code, Codex, or Pi) - launch workers, assign them work, monitor progress, review…. Driving Claude Code Sessions is an agent skill from obra/claude-session-driver.
Driving Claude Code Sessions fits situations like: acting as a project manager that delegates tasks to other coding-agent sessions (Claude Code; pi) - launch workers; assign them work; monitor progress.
Run `npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a claude-code`. Or copy the skill folder (skills/driving-claude-code-sessions in obra/claude-session-driver) into .claude/skills/driving-claude-code-sessions in your project. Claude Code loads it when a task matches its description.
Run `npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a codex`. Or copy the skill folder (skills/driving-claude-code-sessions in obra/claude-session-driver) into .agents/skills/driving-claude-code-sessions in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add obra/claude-session-driver --skill driving-claude-code-sessions -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/driving-claude-code-sessions, .gemini/skills/driving-claude-code-sessions, .github/skills/driving-claude-code-sessions and .opencode/skills/driving-claude-code-sessions in your project.
Going by SKILL.md and its folder, Driving Claude Code Sessions needs the command-line tools its instructions call (codex and claude).
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Driving Claude Code Sessions is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Driving Claude Code Sessions: Agent Notifications (777genius/agent-notifications, 815 stars), CCPM Project Management (automazeio/ccpm, 8.4k stars), Uv (astral-sh/claude-code-plugins, 313 stars) and Project Management (kunchenguid/firstmate, 7.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
obra (a GitHub user) maintains it in obra/claude-session-driver, which has 110 GitHub stars. The repository was last updated on October 6, 2026.
Source: obra/claude-session-driver on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.