🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Review Agent

by @yinghaojia

Pre-meeting review coach for Lark/Feishu (or WeCom). Invoked when a Requester DMs their dedicated review-agent subagent with a draft, proposal, plan, or 1:1...

Versionv2.1.2
Downloads531
TERMINAL
clawhub install review-agent

πŸ“– About This Skill


name: review-agent description: "Pre-meeting review coach for Lark/Feishu (or WeCom). Invoked when a Requester DMs their dedicated review-agent subagent with a draft, proposal, plan, or 1:1 agenda. Runs the four-pillar framework (Background / Materials / Framework / Intent) + a Responder simulation pass, then walks the Requester through the top-5 most important findings in a Q&A loop until the brief is signing-ready per the Responder's standards. Produces a 6-section decision brief on close. Use when the user sends a draft/attachment, when their message matches /review start|end|status|help, or when an active review session exists and they reply with a|b|c|p|more|done|. Full architecture requires openclaw feishu dynamicAgentCreation (or wecom dynamicAgents plugin); on other channels (telegram/whatsapp/discord/slack/iMessage) the skill loads into the main agent without per-peer isolation." version: 2.1.2 license: MIT metadata: openclaw: emoji: "πŸ“‹" requires: bins: [python3] recommends: bins: [pdftotext, tesseract, whisper] os: [darwin, linux]

review-agent Β· openclaw skill

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.

When to invoke this skill

Invoke when any of:

  • The Requester sends /review start (optionally with subject)
  • The Requester sends /review end, /review status, /review help
  • The Requester sends an attachment (PDF / image / audio / Lark doc URL / Google Doc URL / long text β‰₯300 chars with headers/tables)
  • There's an active session (./sessions//meta.json with status=active or status=awaiting_subject_confirmation) and the Requester replies with anything that isn't /chat or exit signal
  • Scripts (all run from the peer workspace cwd)

    | Script | When | Returns on stdout | Side effects | |---|---|---|---| | scripts/ingest.py | After initial attachment drop into /input/ | (status; body in /normalized.md) | writes normalized.md; on tool-missing β†’ ingest_failed.json + exit 3 | | scripts/confirm-topic.py | After ingest, before scan | confirmation question text (for you to send via feishu_chat) | writes subject_confirm_draft.md | | scripts/scan.py | After Requester confirms topic | count summary | writes annotations.jsonl, cursor.json | | scripts/qa-step.py "" | Every Requester turn | next finding to emit | updates annotations.jsonl, cursor.json, dissent.md | | scripts/merge-draft.py | When cursor pending empty | ---PREVIEW--- + diff highlights | writes final/revised.md, final/revised_changelog.md | | scripts/final-gate.py --verify-final | After merge | JSON verdict | writes verdict to stdout | | scripts/_build_summary.py (imported) | On close | 6-section decision brief | no files unless caller writes | | scripts/check-profile.py | Before session start | warning if placeholders | exit 1 = placeholders found | | scripts/check-updates.py | On demand | update-available line | caches to ~/.openclaw/review-agent/.update-check.json |

    Happy path (new review from scratch)

    1. Requester sends proposal.pdf to subagent via Lark DM 2. You (subagent) save the PDF to ./sessions//input/proposal.pdf and seed ./sessions//meta.json 3. python3 ~/.openclaw/skills/review-agent/scripts/ingest.py ./sessions// - If exit 3 β†’ relay ingest_failed.json.lark_message to Lark, stop, mark session ingest_failed 4. python3 ~/.openclaw/skills/review-agent/scripts/confirm-topic.py ./sessions// - Pipe stdout β†’ feishu_chat.send (Requester reads it) 5. When Requester confirms: python3 ~/.openclaw/skills/review-agent/scripts/scan.py ./sessions// 6. Read cursor.json.current_id, emit the finding's issue text via feishu_chat 7. Requester replies β†’ python3 ~/.openclaw/skills/review-agent/scripts/qa-step.py "" β†’ its stdout is the next message for Requester 8. Loop step 7 until cursor.pending is empty 9. merge-draft.py β†’ final-gate.py --verify-final 10. If verdict is READY/READY_WITH_OPEN_ITEMS β†’ publish to Lark doc via native feishu_doc.create + feishu_drive.share; send 6-section summary to both parties via feishu_chat; set meta.status=closed

    What you MUST NOT do

  • Directly extract PDF/image/audio content yourself (no pdftotext, tesseract, whisper calls from your Bash) β€” ingest.py owns that
  • Compose the revised brief yourself β€” merge-draft.py owns that
  • Relay tool output previews / bash commands / stderr / tracebacks to Lark β€” only structured stdout from these scripts should reach the Requester
  • Read ./sessions/*/ from any workspace other than yours (architectural β€” openclaw won't let you, but don't try)
  • References

    See references/:

  • agent_persona.md β€” full persona (imported by scripts into LLM system prompts)
  • four_pillars.md β€” pillar definitions
  • annotation_schema.md β€” finding JSON schema
  • summary_template.md β€” 6-section brief format
  • template/ β€” default admin_style.md, review_rules.md, boss_profile.md (used by install)
  • Admin tools (human runs from CLI β€” NOT invoked by subagent)

    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:

    cat ~/.openclaw/skills/review-agent/VERSION
    bash ~/.openclaw/skills/review-agent/update.sh --check