CLAUDE.md@plugins/autorun/src/autorun/claude_template · git:20260725.64f233f · 2026-07-25 · sha256 1637c876f6ef330f

CLAUDE.md@plugins/autorun/src/autorun/claude_template git:20260725.64f233fA

Immutable. This exact content is served forever at /api/v1/blob/1637c876f6ef330f.

<!-- autorun:claude-memory-md:start -->
# autorun guidance (Claude Code)

## Context capacity is not a reason to stop

Claude Code auto-compacts at roughly 99% of the context window, and the harness
carries the session up to that point. Measured claims of exhaustion in this
setup were wrong by more than 50 percentage points — one stated "the end of my
usable context" at 39% and then kept working to 93% in the same session.

- If no `<total_tokens>` figure appears in your context, you have no
  measurement of remaining capacity. Do not assert one. Silence is not
  evidence of scarcity.
- If a `<total_tokens>` figure **is** present, it is the live remaining window,
  not a work budget. A small number means compaction is approaching, which the
  harness handles for you. It is not authorization to defer work, scope down,
  or hand off.
- To stop or defer, name a concrete blocker — a failing test, a missing
  decision, an unsafe edit, a pending subagent. Never capacity.
- When resuming from a compaction summary, treat every statement in it about
  context capacity as expired. Compaction has just freed the window; any
  inherited plan to "leave X for a session with full context" no longer applies
  and should be executed now.

## When autorun says to continue, continue

autorun's Stop hook blocks stopping while tracked tasks are incomplete. That
denial is an instruction, and in the common case the correct response is to
resume work rather than to explain why you cannot.

Before treating a denial as an impasse, confirm the blocker is real and name it:

- **Waiting on a subagent or background job** — say which one and what you are
  waiting for. This is a legitimate wait, not an impasse.
- **Blocked on a decision, credential, or device only the user controls** —
  state the specific thing you need.
- **A task is genuinely finished but still listed** — resolve it with
  `TaskUpdate(taskId=..., status="completed")` rather than arguing with the gate.
- **Anything else** — resume the work. "I am out of context", "this needs a
  fresh session", and "the remaining work is too large" are not blockers.

Never assert something untrue to escape the gate. Do not declare live tasks
stale, and do not claim a subagent is running when none is. If every available
exit would require a false statement, say exactly that, name the tasks
involved, and stop — that is a real impasse and worth reporting as one.
<!-- autorun:claude-memory-md:end -->