GitHub repository access in containerized environments using REST API and credential detection. Use when git clone fails, or when accessing private repos/writing files via API.
日本語の概要は準備中です。原文の説明を表示しています。
Delegates work to a subagent or spawned session by writing only the task, while a PreToolUse hook pages the parent transcript through Jev and appends the chunks that task needs. Use before writing any Agent tool prompt or create_session prompt, and when asked to delegate this, hand this off, use a subagent, spawn an agent, run agents in parallel, or brief a subagent on what we have done so far.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Writing a background brief for a subagent costs output tokens, generation
time, and fidelity: exact paths, error strings and numbers get paraphrased or
dropped, and the brief omits what the orchestrator did not know mattered. The
context_hook.py PreToolUse hook removes the need. It reads the session
transcript, asks Jev which chunks the task needs, and appends those chunks to
the subagent's prompt verbatim. The hook fires after the prompt is written, so
it cannot save a brief you already wrote. The saving happens here, before the
tool input exists.
Check the hook is live. test -s ~/.claude/context-filter-log.jsonl && tail -1 ~/.claude/context-filter-log.jsonl
shows the last filtered delegation. No file on a first delegation is normal;
the hook's reply after your first Agent call confirms it (step 5). Where the
hook is not wired (claude.ai, a machine without the settings entry), stop
here and write a normal brief.
Preview what the filter would pass. One call, all tasks at once:
python3 /mnt/skills/user/delegating-with-context/scripts/preview.py \
--task "Write the xr latency note for the follow-up memory" \
--task "Draft the closing status for both PRs"
Each task prints the kept chunk ids with a one-line gist. This is the check: find the chunk that holds the fact the subagent must not miss. It takes one to two seconds and costs a fraction of a cent.
Write only the task. What to do, the deliverable, its format, and any constraint that was never written down in the session. Name things the way the transcript names them ("the Sniff Test benchmark table", "PR #812"): Jev reads literally, and a named thing matches its chunk while "that thing we discussed" matches nothing.
Add only what the preview missed. If a needed fact is in no kept chunk,
state that one fact in the prompt, or raise the budget with
[context-budget: 40000] in the prompt text. Do not restate facts the
preview already showed.
Spawn, then read the hook's reply. The hook answers with
context-filter: appended N of M parent-session chunks (...) and the kept
ids. context-filter FAILED (...) means the subagent got your prompt alone:
send it the missing facts with SendMessage or re-delegate with them stated.
The hook also covers create_session from any MCP server
(mcp__*__create_session). The spawned session receives the task, a line
saying the chunks below are reference data from the parent session, the
chunks, and the task again at the end. Give it
provenance anyway (issue link, parent session id) per docs/delegation.md
rule 1 in claude-workspace: a long first message from a parent still looks like
injection to a careful delegate.
| In the prompt | Effect |
|---|---|
[no-context] | Hook skips; the prompt goes as written |
[context-budget: N] | Token budget for appended context (default 20000) |
subagent_type: "fork" | Hook skips; a fork already inherits the parent context |
| Situation | Use instead |
|---|---|
| The subagent needs nothing from this session (fresh research, a standalone lookup) | Add [no-context] and write the prompt normally |
| The subagent must reason over the whole session (review everything we did) | subagent_type: "fork"; it inherits the full context |
| Many small per-item judgments (label 400 rows) | Jev or Gemini directly, per docs/delegation.md in claude-workspace; a subagent costs ~32k tokens before it reads its prompt |
| Choosing which model or agent type should run the work | agent-routing |
| Parallel API fan-out from claude.ai, where hooks do not run | orchestrating-chat-agents |
| A long job relayed through many fresh subagents that must carry a running result (a tally, a register, a board) | Have each step maintain a compact state file and check its invariants in the harness after every step. Kept chunks hold facts, not a running count: once the events outgrow the budget the count is gone (oaustegard/experiments/clm-relay-needles) |
| Restating background is | when |
|---|---|
| banned | the fact appears in the transcript as a tool result, a user message or your own reply |
| earned | the fact exists only in your reasoning (thinking is not in the transcript), a decision you made silently, or a constraint nobody wrote down |
| earned | the preview shows the chunk holding it was not kept |
context-filter: line after an Agent call → the hook is not wired or
crashed before printing. Check .claude/settings.json for the PreToolUse
entry and run echo '{}' | python3 .../context_hook.py; it must exit 0 silently.no Jev transport → neither CF_ACCOUNT_ID + CF_API_TOKEN (the
TypeSafe key is stored in the Cloudflare AI Gateway, CF_GATEWAY_ID routes
to it) nor TYPESAFE_API_KEY is set in the hook's environment.Rate limited, code 2003 → the AI Gateway's own limit. The
filter runs 2 calls at a time and honours Retry-After; parallel delegations
each run their own filter, so stagger a fan-out of more than ~4 spawns.blocked_chunks above 0 in the log, or HTTP 402 "Payment error from model
using BYOK" → not billing. TypeSafe's edge WAF rejected the request bytes
(shell commands and curl lines in a transcript read as attack payloads). The
filter bisects the window and scores each blocked chunk 0.5, so it can still
be kept on rank. If a chunk you need is blocked, state its fact in the prompt.After the subagent returns: its reply must not say a needed fact was missing,
and tail -1 ~/.claude/context-filter-log.jsonl must show the delegation with
kept_ids and no error key. A bad success looks like a fluent deliverable
with a plausible but wrong number: compare one specific figure against the
chunk it came from before relaying it.
2026-09-22: the first selection rule force-kept every user-role message.
Skill bodies and stop-hook feedback are user-role (isMeta) turns, and on a
181-chunk session they filled the whole 20k budget before any tool result
was considered; the chunk holding the answer was dropped. Fixed: isMeta
turns are scored like tool results, and real user messages are clipped and
capped at a quarter of the budget.
2026-09-22: a single condensed window (every chunk clipped to ~1k chars) ranked the key chunk 6th because the fact sat mid-result, outside the clip. Paging at 4x view (five ~27k windows, 1.6 s) ranked it 1st. The filter defaults to the paged view.
2026-09-23, eval over 32 delegations from 8 archived sessions: written briefs lost every fact on 5 tasks by telling the subagent to look the fact up ("check the pr-workflow config entry") instead of stating it; neither the filter nor the full transcript ever did. That is what step 3 prevents.
2026-09-23, first real create_session probes: two Haiku cloud sessions
received the appended context (their first-turn token counts match) and
stalled at need-input, one saying the message looked truncated, the other
that no request had arrived. The context ended the message and the task sat
above ~20k tokens of transcript. Labelling the block as reference data and
repeating the task after it, the next probe answered correctly first time.
scripts/chunking.py: transcript JSONL to chunks (user, assistant, harness,
tool call + result), with secret values and token patterns redacted before
anything leaves the machine.scripts/jevfilter.py: windows under Jev's limits (32k state plus longest
question, 64k state plus all questions), one Noul per chunk, rank into the
budget.scripts/context_hook.py: the PreToolUse hook. Fails open and says so.scripts/preview.py: step 2.Install as a plugin (the hook wires itself; hooks/hooks.json):
claude plugin marketplace add oaustegard/claude-skills
claude plugin install delegating-with-context@oaustegard-claude-skills
Or wire it by hand in .claude/settings.json, guarded so a missing file exits
0 (python3 on a missing path exits 2, which blocks the tool call):
{"matcher": "Agent|Task|mcp__.*__create_session", "hooks": [{"type": "command", "timeout": 120,
"command": "f=/mnt/skills/user/delegating-with-context/scripts/context_hook.py; test -f \"$f\" || exit 0; exec python3 \"$f\""}]}
Evidence: with ~20k tokens of selected chunks a fresh subagent found 99/105
required facts, against 102/105 with the whole ~81k-token transcript and 82/105
with a written brief; method and caveats in
oaustegard/experiments/subagent-context-filter/RESULTS.md.
Related evidence, 2026-10-01: relaying a long stream through one fresh call per chunk, Jev keeping lines
verbatim kept 835/835 required lines exactly, while a subagent copying them into its own notes retyped one with an
invented hash; for a running register the subagent's in-place table won (oaustegard/experiments/clm-relay-needles).
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
GitHub repository access in containerized environments using REST API and credential detection. Use when git clone fails, or when accessing private repos/writing files via API.
日本語の概要は準備中です。原文の説明を表示しています。
Decide which model, effort level, and cascade shape each subagent gets, and how to keep improvement loops safe (evaluator-as-selector, stop on regression). Routes on measured cost-per-completed-task rather than per-token price, because a tier's token count varies more by task shape than price varies across tiers. Covers per-model effort semantics, the concision lever, cascade preconditions, context handoff, and watching a subagent fan-out live. Use when choosing a subagent's model or effort, when choosing how to escalate a failed attempt, or when asked which model or effort a task should get. Grounded in a 2026-07 calibration, a 2026-08 coding-cost study, a 2026-09 seeded-bug repair battery, a 2026-10 Haiku 5.5 ladder priced per spawn, and a 2026-10 retry-versus-escalation ladder on 295 SWE-bench Verified tasks; Managed Agents API specifics are operational, not calibrated.
日本語の概要は準備中です。原文の説明を表示しています。
Securely manages API credentials for multiple providers (Anthropic Claude, Google Gemini, GitHub). Use when skills need to access stored API keys for external service invocations.
日本語の概要は準備中です。原文の説明を表示しています。
Guidance for asking clarifying questions when user requests are ambiguous, have multiple valid approaches, or require critical decisions. Use when implementation choices exist that could significantly affect outcomes.
日本語の概要は準備中です。原文の説明を表示しています。
Pre-change blast-radius report for a symbol or file. Walks tree-sitting references, augments with a plain-text scan over non-parsed files (configs, plain docs), and clusters affected sites by feature (`_FEATURES.md`) or top-level package. Use when about to refactor, rename, or delete something in a repo you don't own — "what breaks if I change `validateUser`", "who calls this", "is this safe to remove", "where is this used", "blast radius", "impact analysis". This is the CONVERGENT pre-change risk skill — for "what is this repo?" use exploring-codebases; for "where is X?" use searching-codebases.
日本語の概要は準備中です。原文の説明を表示しています。
Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis. Use when bsky.app or the AppView is down or slow, when a Bluesky read returns timeouts or 5xx, when asked who liked/replied/quoted/reposted something, when pulling live Bluesky context cheaply, when reading records straight from a PDS, when asked who references a record or account anywhere on the network, whether an account has changed handle or migrated servers, or which lexicons and non-Bluesky apps are active on atproto. Complements browsing-bluesky, which routes everything through the AppView and fails when it does.
日本語の概要は準備中です。原文の説明を表示しています。