You are the review-agent skill inside a per-peer subagent workspace. The subagent's SOUL.md + AGENTS.md set persona and the command table; this file describes the skill's scripts — what they do, when to call, and how.
Invoke when any of:
/review start (optionally with subject)/review end, /review status, /review help./sessions/<id>/meta.json with status=active or status=awaiting_subject_confirmation) and the Requester replies with anything that isn't /chat or exit signalScriptWhenReturns on stdoutSide effectsscripts/ingest.py <sd>After initial attachment drop into <sd>/input/(status; body in <sd>/normalized.md)writes normalized.md; on tool-missing → ingest_failed.json + exit 3scripts/confirm-topic.py <sd>After ingest, before scanconfirmation question text (for you to send via feishu_chat)writes subject_confirm_draft.md``scripts/scan.py <sd>After Requester confirms topiccount summarywrites annotations.jsonl, cursor.json``scripts/qa-step.py <session_id> "<reply>"Every Requester turnnext finding to emitupdates annotations.jsonl, cursor.json, dissent.md``scripts/merge-draft.py <sd>When cursor pending empty---PREVIEW--- + diff highlightswrites final/revised.md, final/revised_changelog.md``scripts/final-gate.py <sd> --verify-finalAfter mergeJSON verdictwrites verdict to stdoutscripts/_build_summary.py (imported)On close6-section decision briefno files unless caller writesscripts/check-profile.py <profile>Before session startwarning if placeholdersexit 1 = placeholders foundscripts/check-updates.pyOn demandupdate-available linecaches to ~/.openclaw/review-agent/.update-check.json
./sessions/<timestamp-slug>/input/proposal.pdf and seed ./sessions/<id>/meta.jsonpython3 ~/.openclaw/skills/review-agent/scripts/ingest.py ./sessions/<id>/
ingest_failed.json.lark_message to Lark, stop, mark session ingest_failedpython3 ~/.openclaw/skills/review-agent/scripts/confirm-topic.py ./sessions/<id>/
feishu_chat.send (Requester reads it)python3 ~/.openclaw/skills/review-agent/scripts/scan.py ./sessions/<id>/cursor.json.current_id, emit the finding's issue text via feishu_chatpython3 ~/.openclaw/skills/review-agent/scripts/qa-step.py <session_id> "<reply>" → its stdout is the next message for Requestercursor.pending is emptymerge-draft.py → final-gate.py --verify-finalfeishu_doc.create + feishu_drive.share; send 6-section summary to both parties via feishu_chat; set meta.status=closedpdftotext, tesseract, whisper calls from your Bash) — ingest.py owns thatmerge-draft.py owns that./sessions/*/ from any workspace other than yours (architectural — openclaw won't let you, but don't try)See references/:
agent_persona.md — full persona (imported by scripts into LLM system prompts)four_pillars.md — pillar definitionsannotation_schema.md — finding JSON schemasummary_template.md — 6-section brief formattemplate/ — default admin_style.md, review_rules.md, boss_profile.md (used by install)These live at the skill root so they travel with distributions. Subagents do NOT
call them and they're not listed in AGENTS.md of peer workspaces.
update.sh — fetch latest skill from GitHub and re-install. Respects VERSION stamp; preserves peer workspaces + global responder profile.uninstall.sh — remove skill + template. With --purge, also removes global config + per-peer workspaces. With --revert-config, unsets the openclaw.json knobs this skill introduced.Self-check the installed version any time:
bash
cat ~/.openclaw/skills/review-agent/VERSION
bash ~/.openclaw/skills/review-agent/update.sh --check