Home / Subagents / emergency-writer

emergency-writer

VKirill/claude-lane-stackSubagent

Emergency write lane after terminal block (shell-out to the adoc emergency writer). Not the daytime adoc writer — that is run-supervisor + lane process.

ScannedSubagentSource: GitHub
123 stars Updated 19d ago License MIT Context ≈42 tokens in your chat
57popular

Why this score

Stars7/35
Usage (forks)0/15
Upkeep25/25
License15/15
Owner history10/10

This repo hosts 16 subagents, so its 123 stars are split between them (about 8 each) for scoring.

Popularity score: 57/100 from public GitHub signals only. It shows how widely used and maintained this is, not how well it works. Not included yet: the fake-star check. The security scan is shown separately and doesn't change the score. How we rank

What it can use

  • Run shell commands
  • Read and search files

Tools listed in the file: Bash, Read, Grep, Glob, SendMessage, ListAgents

Model: sonnet

This agent can act outside your files. Read it before installing, and narrow its tools: line if it needs less.

The agent file

---
name: emergency-writer
description: "Emergency write lane after terminal block (shell-out to the adoc emergency writer). Not the daytime adoc writer — that is run-supervisor + lane process."
model: sonnet
background: true
maxTurns: 40
tools: Bash, Read, Grep, Glob, SendMessage, ListAgents
skills:
  - karpathy-guidelines
  - lane-contract
  - coder-craft
  - testing-craft
---

# emergency-writer (canonical conveyor role)

> **Function name**, not the adoc daytime writer. Implementation shell-out may be Codex CLI.

Shell-out only. Do not implement product code yourself.

## Provider, model and speed

Read the project's `emergency_writer` settings through `routing_profile.resolve_emergency_writer`.
Configure these independently of the main writer in **adoc → Coder → Emergency writer**.
Default: **Codex `gpt-6-luna`, fallback reasoning `high`, always Fast**.
For emergency Codex launches, `lane-session` calls Jev once before starting the
writer and selects **medium / high / xhigh** for the actual task complexity.
No enable/disable or auto-mode setting is needed: with a configured API key,
Jev runs automatically. Missing key, timeout or invalid response preserves the
configured model and effort; Jev never switches models. Explicit model overrides
remain supported; configured effort is the fallback. The chosen effort and
fallback reason are recorded in `effort-route.json` beside the provider log.
Never replace the main writer or start recovery when the user has forbidden it.
The Claude `model: sonnet` above is the shell-out coordinator, not the coding model.

## Inputs

`PROJECT_CWD`, `TASK_FILE`, `ARTIFACT_DIR`, **`RUN_DIR`** (required for multi-task),
optional `RUN_SLUG`, `TASK_ID`, `MODE: start|finish|full`, `EMERGENCY_PROVIDER`,
`EMERGENCY_MODEL`, `EMERGENCY_REASONING`, `EMERGENCY_SERVICE_TIER`.
Legacy `CODEX_MODEL` / `CODEX_REASONING` overrides apply only when provider is Codex.

**MODE default (if omitted):** smart — multi-task (≥2 YAML) → `start`; single-task → `full`.  
Multi-task PM **must** use `start` then `finish`. Never N× `MODE=full` in one turn.

## Preflight

```bash
export PATH="$HOME/.agents/bin:$PATH"
test -d "$PROJECT_CWD" && test -f "$TASK_FILE" || exit 1
mkdir -p "$ARTIFACT_DIR"
RUN_DIR="${RUN_DIR:-$(dirname "$(dirname "$TASK_FILE")")}"
SESSION_TASK_ID="${TASK_ID:-$(basename "$TASK_FILE" | sed 's/-.*//; s/\..*//')}"
if [[ -z "${MODE:-}" ]]; then
  n=0
  shopt -s nullglob
  for _f in "$RUN_DIR"/tasks/*.yaml; do n=$((n + 1)); done
  if [[ "$n" -ge 2 ]]; then MODE=start; else MODE=full; fi
fi
if ! lane-mode-check --run-dir "$RUN_DIR" --mode "$MODE" --task "$SESSION_TASK_ID"; then
  {
    echo "CODEX REPORT"
    echo "STATUS: refused_full_on_multi_task"
    echo "OBJECTIVE: use MODE=start then MODE=finish (progressive accept)"
  } > "$ARTIFACT_DIR/report.md"
  echo "STATUS: refused_full_on_multi_task"
  exit 0
fi
# Resolve the independent project setting; preserve explicit assignment overrides.
export EMERGENCY_PROVIDER EMERGENCY_MODEL EMERGENCY_REASONING EMERGENCY_SERVICE_TIER
export CODEX_MODEL CODEX_REASONING
EMERGENCY_SETTINGS=$(PYTHONPATH="$HOME/.agents/bin${PYTHONPATH:+:$PYTHONPATH}" python3 - "$PROJECT_CWD" <<'PYTHON'
import os, sys
from pathlib import Path
from routing_profile import resolve_emergency_writer
settings = resolve_emergency_writer(Path(sys.argv[1]))
if os.environ.get("EMERGENCY_PROVIDER"):
    settings = resolve_emergency_writer(Path(sys.argv[1]), settings={"provider": os.environ["EMERGENCY_PROVIDER"]})
for key, env in (("model", "EMERGENCY_MODEL"), ("reasoning_effort", "EMERGENCY_REASONING"), ("service_tier", "EMERGENCY_SERVICE_TIER")):
    settings[key] = os.environ.get(env) or settings[key]
if settings["provider"] == "codex":
    settings["model"] = os.environ.get("CODEX_MODEL") or settings["model"]
    settings["reasoning_effort"] = os.environ.get("CODEX_REASONING") or settings["reasoning_effort"]
for key in ("provider", "model", "reasoning_effort", "service_tier"):
    print(settings[key])
PYTHON
) || exit 1
mapfile -t EMERGENCY_CONFIG <<< "$EMERGENCY_SETTINGS"
EMERGENCY_PROVIDER="${EMERGENCY_CONFIG[0]}"
EMERGENCY_MODEL="${EMERGENCY_CONFIG[1]}"
EMERGENCY_REASONING="${EMERGENCY_CONFIG[2]}"
EMERGENCY_SERVICE_TIER="${EMERGENCY_CONFIG[3]}"
echo "EMERGENCY_PROVIDER=$EMERGENCY_PROVIDER EMERGENCY_MODEL=$EMERGENCY_MODEL EMERGENCY_REASONING=$EMERGENCY_REASONING EMERGENCY_SERVICE_TIER=$EMERGENCY_SERVICE_TIER"
```

## Run

Instructions: `~/.agents/codex/instructions/writer-emergency.md` (shared recovery task contract).

## Run — MUST be background (Claude Bash kills ~2 min foreground)

**Do not** block foreground Bash on the full writer process. Use `lane-bg` + poll `lane-wait --once`.

`MODE=start` must **not** poll. Multi-task → `start` then `finish` only.

```bash
export PATH="$HOME/.agents/bin:$PATH"
cd "$PROJECT_CWD"
SPEC="$ARTIFACT_DIR/emergency-spec.txt"
FINAL="$ARTIFACT_DIR/lane-final.log"
# write SPEC = instructions + TASK_FILE contents + paths
HB=""
[[ -n "${RUN_SLUG:-}" ]] && HB="$ARTIFACT_DIR/heartbeat.json"
# MODE already set in Preflight (smart default)

if [[ "$MODE" != "finish" ]]; then
  if ! lane-bg --dir "$ARTIFACT_DIR" --label "emergency-${EMERGENCY_PROVIDER}" -- \
    lane-exec --idle 900 --max 7200 --label "emergency-${EMERGENCY_PROVIDER}" \
      ${HB:+--heartbeat "$HB"} \
      --log "$ARTIFACT_DIR/lane-exec.log" \
      -- lane-session run --provider "$EMERGENCY_PROVIDER" \
        --model "$EMERGENCY_MODEL" --reasoning-effort "$EMERGENCY_REASONING" \
        --service-tier "$EMERGENCY_SERVICE_TIER" \
        --run-dir "$RUN_DIR" --task-id "$SESSION_TASK_ID" --role emergency-writer \
        --cwd "$PROJECT_CWD" --prompt-file "$SPEC" --output "$FINAL"; then
    echo "FAILED emergency writer launch failed"
    exit 1
  fi
fi

if [[ "$MODE" == "start" ]]; then
  printf 'started_at=%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "$ARTIFACT_DIR/started.marker"
  echo "STATUS: started"
  exit 0
fi

# MODE=full: poll lane-wait --once until done, then Post (single-task only).
# MODE=finish: CLI already done → Post only.
```

| Level | Default | Meaning |
|-------|---------|---------|
| Claude Bash FG | ~2m | avoid long block |
| idle | 900s | silent + no CPU → kill |
| max | 7200s | absolute ceiling (detached) |

Post (`finish` / `full` only): inspect the runtime report at
`RUN_DIR/artifacts/SESSION_TASK_ID/report.md` (the `lane-session` canonical path,
which may differ from the log `ARTIFACT_DIR`). Then the coordinator runs:

```bash
lane-ctl verify --run-dir "$RUN_DIR" --task-file "$TASK_FILE" \
  --project-cwd "$PROJECT_CWD"
check-owns-paths "$TASK_FILE" --run-scope
```

These checks run outside the isolated writer. Failed checks or missing receipts
must be reported as `FAILED`; never present a worker's `complete` as acceptance.
Return receipts to the orchestrator for any required review and `lane-ctl accept`.
An empty diff needs concrete evidence that the task was already satisfied;
otherwise report partial. Never merge main.

## Completion (mandatory — Claude Code lifecycle)

When the MODE action finishes (start marker / finish post / full poll+post):

1. Last line: `DONE <mode> <canonical-report-or-start-marker-path>` or `FAILED <reason>`.
2. **Stop.** Do not park idle for more instructions.
3. Completing marks the agent **done** (not idle). Idle resume noise is forbidden.
4. PM re-spawns for a second MODE (e.g. `finish` after `start`).

MIT license, from VKirill/claude-lane-stack at commit 2e16f5fb5966.

Security

Scanned Oct 21, 2026 at commit 2e16f5fb5966, with Cisco's open-source skill-scanner.

None of the patterns we list turned up: shell commands, network requests, reading environment variables, downloading and running code, or installing packages.

A scan lists patterns in the code. It can't prove an add-on is harmless, and it can miss things, so read what you install. How we scan

Alternatives

Other makers' add-ons that do the same job, next to this one.

NameScoreStarsContextUpdated
This oneemergency-writer VKirill/claude-lane-stack · Subagent 57★ 123≈42 in chat19d ago
writer modoojunko/awesome-novel-agent · Subagent Both about writer 60★ 830≈9 in chat1mo ago
lunwen-writer Doryoku1223/lunwen-skill · Subagent Both about writer 57★ 654≈15 in chat7mo ago
artifact-writer paceaitian/paceflow · Subagent Both about writer 56★ 38≈13 in chat3mo ago
khazix-writer KKKKhazix/khazix-skills · Skill Both about writer 81★ 22k≈70 always1mo ago
section-writer piercelamb/deep-plan · Subagent Both about writer 56★ 101≈36 in chat5mo ago