[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DSTHC6YXGQSRRKTA5ERSJR":3,"skill-same:01M6DSTHC6YXGQSRRKTA5ERSJR":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":44,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M6DSTHC6YXGQSRRKTA5ERSJR","oacp",null,"Use the OACP CLI and protocol from Codex to coordinate agents through signed inbox\u002Foutbox messages, task dispatch, review loops, and project memory.","kiloloop\u002Foacp-skills","kiloloop","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F264514437?v=4","01M6DSS1K2JKZD3YRMXRH54968","Kiloloop","01M6DSS1SMM810F7327W2YX7ZZ",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Foacp\u002Fcodex\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31],"review","cli","codex","memory","protocol","inbox","messages","use","dispatch","coordinate","task","outbox","project","2026-11-10 10:12:30",false,"---\nname: oacp\ndescription: Use the OACP CLI and protocol from Codex to coordinate agents through signed inbox\u002Foutbox messages, task dispatch, review loops, and project memory.\n---\n\n# OACP\n\nRun this version gate first. If `oacp` is missing or older than `0.5.3`, stop\nand tell the user to install or upgrade `oacp-cli[crypto]` before continuing.\n\n```bash\nif ! command -v oacp >\u002Fdev\u002Fnull 2>&1; then\n  echo \"oacp CLI not found; install 'oacp-cli[crypto]>=0.5.3'\" >&2\n  exit 1\nfi\n\nOACP_VERSION=\"$(oacp --version)\"\nprintf '%s\\n' \"${OACP_VERSION}\"\npython3 - \"${OACP_VERSION}\" \u003C\u003C'PY'\nimport re\nimport sys\n\nversion = sys.argv[1].strip()\nmatch = re.search(r\"(\\d+)\\.(\\d+)\\.(\\d+)\", version)\nif not match:\n    raise SystemExit(f\"could not parse oacp version: {version}\")\nparts = tuple(int(part) for part in match.groups())\nif parts \u003C (0, 5, 3):\n    raise SystemExit(f\"oacp {version} is older than required 0.5.3\")\nPY\n```\n\nInstall or upgrade with `pip install --upgrade 'oacp-cli[crypto]>=0.5.3'`\n(or `uv tool install --upgrade 'oacp-cli[crypto]'`). The crypto extra enables\nmessage signing, verification, and trust checks used by the coordination\nskills.\n\nOACP is a filesystem coordination protocol. Use the installed `oacp` command\nas the primary interface, and use the public\n[OACP specification](https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp\u002Fblob\u002Fmain\u002FSPEC.md) when\nyou need protocol details that are not summarized here.\n\n## Start\n\nResolve the project before reading or writing messages. Prefer an explicit\n`--project` from the user; otherwise detect `.oacp` from the repo root.\n\n```bash\nPROJECT=\"$(python3 - \u003C\u003C'PY'\nimport json\nimport os\n\nproject = \"\"\nif os.path.islink(\".oacp\"):\n    target = os.path.realpath(\".oacp\")\n    marker = os.path.join(target, \"workspace.json\") if os.path.isdir(target) else target\n    try:\n        with open(marker, \"r\", encoding=\"utf-8\") as f:\n            project = json.load(f).get(\"project_name\", \"\") or \"\"\n    except Exception:\n        project = os.path.basename(target) if os.path.isdir(target) else os.path.basename(os.path.dirname(target))\nelif os.path.isfile(\".oacp\"):\n    try:\n        with open(\".oacp\", \"r\", encoding=\"utf-8\") as f:\n            project = json.load(f).get(\"project_name\", \"\") or \"\"\n    except Exception:\n        project = \"\"\nprint(project)\nPY\n)\"\nOACP_ROOT=\"${OACP_HOME:-$HOME\u002Foacp}\"\ntest -n \"${PROJECT}\"\n```\n\nRun health checks before substantial coordination work:\n\n```bash\noacp doctor --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nMemory sync requires the separate `agent-memory` CLI (`agent-memory-cli`).\nIf it is unavailable, report the missing prerequisite and treat shared-memory\nfreshness as unknown. When current shared facts are needed, pull on demand:\n\n```bash\nagent-memory pull --home \"${OACP_ROOT}\"\n```\n\nAfter intentional memory updates, publish only within an authorized wrap-up\nor an explicit publication grant:\n\n```bash\nagent-memory push --home \"${OACP_ROOT}\"\n```\n\nKeep the existing home and runtime startup policy. These commands do not\nrequire `agent-memory setup codex` or a change to session hooks.\n\n## Read\n\nUse CLI JSON for inbox discovery. Do not recurse through inbox directories or\nparse processed archives unless the user asks.\n\n```bash\noacp inbox \"${PROJECT}\" --agent codex --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nTreat the inbox listing as discovery, not as permission to custom-parse a live\npath. Route each candidate through `\u002Fcheck-inbox`: it captures one immutable\nsnapshot, verifies before parsing, retains the accepted SHA-256, and enforces\nthe receiver's `off`, `warn`, or `enforce` posture. Under `enforce`, anything\nother than signed-verified is held or quarantined in `dead_letter\u002F` without\nsurfacing attacker-controlled fields.\n\nKeep these routing defaults:\n\n- `task_request`, `brainstorm_request`, and `review_request`: summarize and\n  get user confirmation before live execution.\n- `question`: answer with a reply `notification` using `--in-reply-to`.\n- `notification`: summarize; acknowledge only when the sender requested it.\n- `review_lgtm`: report the quality gate result, then proceed according to the\n  repo's merge policy.\n- Unknown, malformed, or expired messages: report and leave them in the inbox.\n\nArchive a processed inbox file only after its handling path succeeds and its\nlive digest still matches the accepted snapshot.\n\n## Send\n\nUse `oacp send` for all message writes. Prefer `--dry-run --json` first when\ncomposing a new message type or a complex body.\n\n```bash\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Cagent>\" \\\n  --type notification \\\n  --subject \"Re: \u003Csubject>\" \\\n  --body-file \"\u003Cbody-file>\" \\\n  --in-reply-to \"\u003Cmessage-id>\" \\\n  --priority P2 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nUse `--body-file` for multi-line YAML bodies. Use `--in-reply-to` for replies\nso OACP can inherit conversation context from the parent message; use\n`--parent-message-id` only when you need to set the parent field directly. Use\n`--related-pr` on review-loop messages. After the dry run is correct and the\nuser has approved the live write, rerun the same command without `--dry-run`.\nWhen a live send succeeds, verify the reported `inbox_path` exists before\ntreating the message as delivered.\n\nValidate hand-written or edited message files before relying on them:\n\n```bash\noacp validate \"\u003Cmessage-file>\"\n```\n\n## Poll\n\nFor recurring checks, use the user's runtime loop support or one shell loop.\nDo not spend repeated LLM turns polling the same wait state.\n\n```bash\noacp watch --project \"${PROJECT}\" --agent codex \\\n  --state-id \"codex-\u003Cstable-subscriber-id>\" --since epoch \\\n  --oacp-dir \"${OACP_ROOT}\" --json\n```\n\n`--state-id` (v0.4.0+) gives each subscriber an independent cursor. Use\n`--since epoch` when creating a cursor so existing backlog wakes the first pass;\nit has no effect after that cursor exists. Duplicate delivery across concurrent\nsubscribers is expected, so confirm the file still exists before processing.\nUse `--show-archived` only when archive events are part of the task; it is noisy\nwhen watching your own inbox.\n\n## Signing and trust (v0.5.3+)\n\nOACP messages may carry a detached-JWS Ed25519 auth trailer. Signing is\nsender-controlled; verification posture is receiver-controlled:\n\n```bash\noacp trust keygen --agent codex --oacp-dir \"${OACP_ROOT}\"\noacp trust keys --agent codex --oacp-dir \"${OACP_ROOT}\"\noacp trust import \u003Ckid>.pub.json --project \"${PROJECT}\" --agent codex \\\n  --oacp-dir \"${OACP_ROOT}\"\noacp trust list --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\"\noacp trust sign-policy --project \"${PROJECT}\" --agent codex \\\n  --oacp-dir \"${OACP_ROOT}\"\noacp verify \u003Cmessage.yaml> --project \"${PROJECT}\" --receiver codex \\\n  --oacp-dir \"${OACP_ROOT}\"\n```\n\n- `signing.verify_mode: warn` annotates verification but grants no authority.\n- `signing.verify_mode: enforce` accepts only signed-verified intake; other\n  outcomes fail closed and processing evidence is quarantined to\n  `dead_letter\u002F`.\n- Attach authentication to an existing autonomy audit with\n  `oacp verify \u003Csnapshot> ... --attach-audit \u003Caudit.yaml>`; never hand-write\n  `message_auth`.\n\n## Review Loops\n\nAuthor flow:\n\n1. Open or update the PR and run the repo's required checks.\n2. Send a `notification` with subject prefix `WIP:` if a dispatcher needs PR\n   progress.\n3. Send `review_request` directly to the reviewer with `related_pr`, `pr`,\n   `branch`, and `diff_summary` in the body.\n4. If the reviewer sends `review_feedback`, address findings, then send\n   `review_addressed`.\n5. Send a fresh `review_request` for re-review. `review_addressed` is context;\n   it is not the trigger for a stateless reviewer invocation.\n6. Merge only after `review_lgtm`, required checks are green, and the repo's\n   merge policy is satisfied.\n\nContinuation grants (v0.4.3+) may authorize later reviewer invocations in one\nsame-thread PR loop. They authorize running the round, not its verdict, GitHub\neffects, or merge. The reviewer still enforces exact-head, quality, budget, and\npermitted-side-effect guards.\n\nReviewer flow:\n\n1. On `review_request`, inspect the PR diff and relevant project rules.\n2. Send exactly one terminal response: `review_feedback` or `review_lgtm`.\n3. Exit after the terminal response. Do not wait in-session for\n   `review_addressed`.\n\nReview feedback should point to a findings packet when the project uses one.\nLGTM bodies should include `quality_gate_result: pass` and\n`merge_ready: true`.\n\n## Safety\n\n- Read the nearest repo instructions before running repo-scoped Git or GitHub\n  commands.\n- Do not print tokens, cookies, private headers, or full secrets in messages,\n  logs, PR comments, or final replies.\n- Do not put absolute local paths in shared OACP artifacts; prefer\n  `$OACP_HOME`, `$HOME`, repo-relative paths, or public URLs.\n- Ask before live writes when the message type or repo protocol requires user\n  approval.\n- Keep PR comments concise and data-minimized; detailed machine state belongs\n  in inbox messages or packets.\n\n## Examples\n\nCheck health and the Codex inbox:\n\n```bash\nPROJECT=\"my-project\"\nOACP_ROOT=\"${OACP_HOME:-$HOME\u002Foacp}\"\noacp --version\noacp doctor --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\" --json\noacp inbox \"${PROJECT}\" --agent codex --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nDraft a `task_request` before sending it:\n\n```bash\nBODY_FILE=\"$(mktemp)\"\ncat > \"${BODY_FILE}\" \u003C\u003C'EOF'\nImplement the requested change.\n\nAcceptance criteria:\n- Keep the patch scoped.\n- Run the relevant validation.\n- Reply with results and follow-ups.\nEOF\n\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Cagent>\" \\\n  --type task_request \\\n  --subject \"Implement scoped change\" \\\n  --body-file \"${BODY_FILE}\" \\\n  --priority P2 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nRequest review for a PR:\n\n```bash\nPR_NUMBER=\"123\"\nBRANCH=\"$(git branch --show-current)\"\nDIFF_SUMMARY=\"$(git diff --stat \"origin\u002Fmain...${BRANCH}\" | sed 's\u002F^\u002F  \u002F')\"\nCONVERSATION_SEQUENCE=\"$(python3 - \u003C\u003C'PY'\nimport time\nprint(time.time_ns() % 1_000_000)\nPY\n)\"\nCONVERSATION_ID=\"conv-$(date -u +%Y%m%d)-codex-${CONVERSATION_SEQUENCE}\"\nBODY_FILE=\"$(mktemp)\"\ncat > \"${BODY_FILE}\" \u003C\u003CEOF\npr: ${PR_NUMBER}\nbranch: ${BRANCH}\ndiff_summary: |\n${DIFF_SUMMARY}\nmax_turns_reviewer: 8\nmax_runtime_s_reviewer: 600\nrepo: \u003Cowner\u002Frepo>\nround: 1\ndeclared_head: \u003Cfull-head-sha>\nside_effects:\n  - writes_findings_packet\n  - sends_oacp_reply\n  - submits_github_review\nEOF\n\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Creviewer-agent>\" \\\n  --type review_request \\\n  --subject \"Review: PR #${PR_NUMBER}\" \\\n  --body-file \"${BODY_FILE}\" \\\n  --conversation-id \"${CONVERSATION_ID}\" \\\n  --related-pr \"${PR_NUMBER}\" \\\n  --priority P1 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nGenerate the numeric sequence once (at most six digits), keep the resulting\nconversation ID unchanged across every round and reply in this review thread,\nand create a fresh ID only for a genuinely new thread. Declare\n`submits_github_review` only when a\nformal GitHub approval is intended and authorized; declare\n`comments_on_github` separately when a status comment is also intended.\n\nRecipients archive terminally processed inbox messages under the original\nfilename in `inbox\u002Farchive\u002F` with a digest-checked, no-clobber move. Pending,\nexpired, malformed, held, approval-gated, drifted, or collision cases stay in\n`inbox\u002F`; plain deletion and legacy `processed\u002F` moves lose receiver-side\nevidence and are not protocol-compliant.\n","# OACP\n\nRun this version gate first. If `oacp` is missing or older than `0.5.3`, stop\nand tell the user to install or upgrade `oacp-cli[crypto]` before continuing.\n\n```bash\nif ! command -v oacp >\u002Fdev\u002Fnull 2>&1; then\n  echo \"oacp CLI not found; install 'oacp-cli[crypto]>=0.5.3'\" >&2\n  exit 1\nfi\n\nOACP_VERSION=\"$(oacp --version)\"\nprintf '%s\\n' \"${OACP_VERSION}\"\npython3 - \"${OACP_VERSION}\" \u003C\u003C'PY'\nimport re\nimport sys\n\nversion = sys.argv[1].strip()\nmatch = re.search(r\"(\\d+)\\.(\\d+)\\.(\\d+)\", version)\nif not match:\n    raise SystemExit(f\"could not parse oacp version: {version}\")\nparts = tuple(int(part) for part in match.groups())\nif parts \u003C (0, 5, 3):\n    raise SystemExit(f\"oacp {version} is older than required 0.5.3\")\nPY\n```\n\nInstall or upgrade with `pip install --upgrade 'oacp-cli[crypto]>=0.5.3'`\n(or `uv tool install --upgrade 'oacp-cli[crypto]'`). The crypto extra enables\nmessage signing, verification, and trust checks used by the coordination\nskills.\n\nOACP is a filesystem coordination protocol. Use the installed `oacp` command\nas the primary interface, and use the public\n[OACP specification](https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp\u002Fblob\u002Fmain\u002FSPEC.md) when\nyou need protocol details that are not summarized here.\n\n## Start\n\nResolve the project before reading or writing messages. Prefer an explicit\n`--project` from the user; otherwise detect `.oacp` from the repo root.\n\n```bash\nPROJECT=\"$(python3 - \u003C\u003C'PY'\nimport json\nimport os\n\nproject = \"\"\nif os.path.islink(\".oacp\"):\n    target = os.path.realpath(\".oacp\")\n    marker = os.path.join(target, \"workspace.json\") if os.path.isdir(target) else target\n    try:\n        with open(marker, \"r\", encoding=\"utf-8\") as f:\n            project = json.load(f).get(\"project_name\", \"\") or \"\"\n    except Exception:\n        project = os.path.basename(target) if os.path.isdir(target) else os.path.basename(os.path.dirname(target))\nelif os.path.isfile(\".oacp\"):\n    try:\n        with open(\".oacp\", \"r\", encoding=\"utf-8\") as f:\n            project = json.load(f).get(\"project_name\", \"\") or \"\"\n    except Exception:\n        project = \"\"\nprint(project)\nPY\n)\"\nOACP_ROOT=\"${OACP_HOME:-$HOME\u002Foacp}\"\ntest -n \"${PROJECT}\"\n```\n\nRun health checks before substantial coordination work:\n\n```bash\noacp doctor --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nMemory sync requires the separate `agent-memory` CLI (`agent-memory-cli`).\nIf it is unavailable, report the missing prerequisite and treat shared-memory\nfreshness as unknown. When current shared facts are needed, pull on demand:\n\n```bash\nagent-memory pull --home \"${OACP_ROOT}\"\n```\n\nAfter intentional memory updates, publish only within an authorized wrap-up\nor an explicit publication grant:\n\n```bash\nagent-memory push --home \"${OACP_ROOT}\"\n```\n\nKeep the existing home and runtime startup policy. These commands do not\nrequire `agent-memory setup codex` or a change to session hooks.\n\n## Read\n\nUse CLI JSON for inbox discovery. Do not recurse through inbox directories or\nparse processed archives unless the user asks.\n\n```bash\noacp inbox \"${PROJECT}\" --agent codex --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nTreat the inbox listing as discovery, not as permission to custom-parse a live\npath. Route each candidate through `\u002Fcheck-inbox`: it captures one immutable\nsnapshot, verifies before parsing, retains the accepted SHA-256, and enforces\nthe receiver's `off`, `warn`, or `enforce` posture. Under `enforce`, anything\nother than signed-verified is held or quarantined in `dead_letter\u002F` without\nsurfacing attacker-controlled fields.\n\nKeep these routing defaults:\n\n- `task_request`, `brainstorm_request`, and `review_request`: summarize and\n  get user confirmation before live execution.\n- `question`: answer with a reply `notification` using `--in-reply-to`.\n- `notification`: summarize; acknowledge only when the sender requested it.\n- `review_lgtm`: report the quality gate result, then proceed according to the\n  repo's merge policy.\n- Unknown, malformed, or expired messages: report and leave them in the inbox.\n\nArchive a processed inbox file only after its handling path succeeds and its\nlive digest still matches the accepted snapshot.\n\n## Send\n\nUse `oacp send` for all message writes. Prefer `--dry-run --json` first when\ncomposing a new message type or a complex body.\n\n```bash\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Cagent>\" \\\n  --type notification \\\n  --subject \"Re: \u003Csubject>\" \\\n  --body-file \"\u003Cbody-file>\" \\\n  --in-reply-to \"\u003Cmessage-id>\" \\\n  --priority P2 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nUse `--body-file` for multi-line YAML bodies. Use `--in-reply-to` for replies\nso OACP can inherit conversation context from the parent message; use\n`--parent-message-id` only when you need to set the parent field directly. Use\n`--related-pr` on review-loop messages. After the dry run is correct and the\nuser has approved the live write, rerun the same command without `--dry-run`.\nWhen a live send succeeds, verify the reported `inbox_path` exists before\ntreating the message as delivered.\n\nValidate hand-written or edited message files before relying on them:\n\n```bash\noacp validate \"\u003Cmessage-file>\"\n```\n\n## Poll\n\nFor recurring checks, use the user's runtime loop support or one shell loop.\nDo not spend repeated LLM turns polling the same wait state.\n\n```bash\noacp watch --project \"${PROJECT}\" --agent codex \\\n  --state-id \"codex-\u003Cstable-subscriber-id>\" --since epoch \\\n  --oacp-dir \"${OACP_ROOT}\" --json\n```\n\n`--state-id` (v0.4.0+) gives each subscriber an independent cursor. Use\n`--since epoch` when creating a cursor so existing backlog wakes the first pass;\nit has no effect after that cursor exists. Duplicate delivery across concurrent\nsubscribers is expected, so confirm the file still exists before processing.\nUse `--show-archived` only when archive events are part of the task; it is noisy\nwhen watching your own inbox.\n\n## Signing and trust (v0.5.3+)\n\nOACP messages may carry a detached-JWS Ed25519 auth trailer. Signing is\nsender-controlled; verification posture is receiver-controlled:\n\n```bash\noacp trust keygen --agent codex --oacp-dir \"${OACP_ROOT}\"\noacp trust keys --agent codex --oacp-dir \"${OACP_ROOT}\"\noacp trust import \u003Ckid>.pub.json --project \"${PROJECT}\" --agent codex \\\n  --oacp-dir \"${OACP_ROOT}\"\noacp trust list --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\"\noacp trust sign-policy --project \"${PROJECT}\" --agent codex \\\n  --oacp-dir \"${OACP_ROOT}\"\noacp verify \u003Cmessage.yaml> --project \"${PROJECT}\" --receiver codex \\\n  --oacp-dir \"${OACP_ROOT}\"\n```\n\n- `signing.verify_mode: warn` annotates verification but grants no authority.\n- `signing.verify_mode: enforce` accepts only signed-verified intake; other\n  outcomes fail closed and processing evidence is quarantined to\n  `dead_letter\u002F`.\n- Attach authentication to an existing autonomy audit with\n  `oacp verify \u003Csnapshot> ... --attach-audit \u003Caudit.yaml>`; never hand-write\n  `message_auth`.\n\n## Review Loops\n\nAuthor flow:\n\n1. Open or update the PR and run the repo's required checks.\n2. Send a `notification` with subject prefix `WIP:` if a dispatcher needs PR\n   progress.\n3. Send `review_request` directly to the reviewer with `related_pr`, `pr`,\n   `branch`, and `diff_summary` in the body.\n4. If the reviewer sends `review_feedback`, address findings, then send\n   `review_addressed`.\n5. Send a fresh `review_request` for re-review. `review_addressed` is context;\n   it is not the trigger for a stateless reviewer invocation.\n6. Merge only after `review_lgtm`, required checks are green, and the repo's\n   merge policy is satisfied.\n\nContinuation grants (v0.4.3+) may authorize later reviewer invocations in one\nsame-thread PR loop. They authorize running the round, not its verdict, GitHub\neffects, or merge. The reviewer still enforces exact-head, quality, budget, and\npermitted-side-effect guards.\n\nReviewer flow:\n\n1. On `review_request`, inspect the PR diff and relevant project rules.\n2. Send exactly one terminal response: `review_feedback` or `review_lgtm`.\n3. Exit after the terminal response. Do not wait in-session for\n   `review_addressed`.\n\nReview feedback should point to a findings packet when the project uses one.\nLGTM bodies should include `quality_gate_result: pass` and\n`merge_ready: true`.\n\n## Safety\n\n- Read the nearest repo instructions before running repo-scoped Git or GitHub\n  commands.\n- Do not print tokens, cookies, private headers, or full secrets in messages,\n  logs, PR comments, or final replies.\n- Do not put absolute local paths in shared OACP artifacts; prefer\n  `$OACP_HOME`, `$HOME`, repo-relative paths, or public URLs.\n- Ask before live writes when the message type or repo protocol requires user\n  approval.\n- Keep PR comments concise and data-minimized; detailed machine state belongs\n  in inbox messages or packets.\n\n## Examples\n\nCheck health and the Codex inbox:\n\n```bash\nPROJECT=\"my-project\"\nOACP_ROOT=\"${OACP_HOME:-$HOME\u002Foacp}\"\noacp --version\noacp doctor --project \"${PROJECT}\" --oacp-dir \"${OACP_ROOT}\" --json\noacp inbox \"${PROJECT}\" --agent codex --oacp-dir \"${OACP_ROOT}\" --json\n```\n\nDraft a `task_request` before sending it:\n\n```bash\nBODY_FILE=\"$(mktemp)\"\ncat > \"${BODY_FILE}\" \u003C\u003C'EOF'\nImplement the requested change.\n\nAcceptance criteria:\n- Keep the patch scoped.\n- Run the relevant validation.\n- Reply with results and follow-ups.\nEOF\n\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Cagent>\" \\\n  --type task_request \\\n  --subject \"Implement scoped change\" \\\n  --body-file \"${BODY_FILE}\" \\\n  --priority P2 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nRequest review for a PR:\n\n```bash\nPR_NUMBER=\"123\"\nBRANCH=\"$(git branch --show-current)\"\nDIFF_SUMMARY=\"$(git diff --stat \"origin\u002Fmain...${BRANCH}\" | sed 's\u002F^\u002F  \u002F')\"\nCONVERSATION_SEQUENCE=\"$(python3 - \u003C\u003C'PY'\nimport time\nprint(time.time_ns() % 1_000_000)\nPY\n)\"\nCONVERSATION_ID=\"conv-$(date -u +%Y%m%d)-codex-${CONVERSATION_SEQUENCE}\"\nBODY_FILE=\"$(mktemp)\"\ncat > \"${BODY_FILE}\" \u003C\u003CEOF\npr: ${PR_NUMBER}\nbranch: ${BRANCH}\ndiff_summary: |\n${DIFF_SUMMARY}\nmax_turns_reviewer: 8\nmax_runtime_s_reviewer: 600\nrepo: \u003Cowner\u002Frepo>\nround: 1\ndeclared_head: \u003Cfull-head-sha>\nside_effects:\n  - writes_findings_packet\n  - sends_oacp_reply\n  - submits_github_review\nEOF\n\noacp send \"${PROJECT}\" \\\n  --from codex \\\n  --to \"\u003Creviewer-agent>\" \\\n  --type review_request \\\n  --subject \"Review: PR #${PR_NUMBER}\" \\\n  --body-file \"${BODY_FILE}\" \\\n  --conversation-id \"${CONVERSATION_ID}\" \\\n  --related-pr \"${PR_NUMBER}\" \\\n  --priority P1 \\\n  --oacp-dir \"${OACP_ROOT}\" \\\n  --dry-run \\\n  --json\n```\n\nGenerate the numeric sequence once (at most six digits), keep the resulting\nconversation ID unchanged across every round and reply in this review thread,\nand create a fresh ID only for a genuinely new thread. Declare\n`submits_github_review` only when a\nformal GitHub approval is intended and authorized; declare\n`comments_on_github` separately when a status comment is also intended.\n\nRecipients archive terminally processed inbox messages under the original\nfilename in `inbox\u002Farchive\u002F` with a digest-checked, no-clobber move. Pending,\nexpired, malformed, held, approval-gated, drifted, or collision cases stay in\n`inbox\u002F`; plain deletion and legacy `processed\u002F` moves lose receiver-side\nevidence and are not protocol-compliant.\n",{"name":5,"description":7},"main","ea78d5cce0208a15b59f6f2c49e729ba71a3c5af","skills\u002Foacp\u002Fcodex",1,"https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills","https:\u002F\u002Foacp.dev\u002Fskills\u002F","https:\u002F\u002Fgithub.com\u002Fkiloloop","https:\u002F\u002Fkiloloop.com","2026-10-31 14:39:52",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add kiloloop\u002Foacp-skills --skill oacp",{"tool":52,"command":53},"bunx","bunx skills add kiloloop\u002Foacp-skills --skill oacp",{"tool":55,"command":56},"pnpm","pnpm dlx skills add kiloloop\u002Foacp-skills --skill oacp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Foacp\u002Fcodex\u002FSKILL.md",true,[60,65,68,71,74,77,80,83],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":64},"algorithms.md","REFERENCE","参考文档","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Falgorithms.md",{"path":66,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":67},"failure_modes.md","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Ffailure_modes.md",{"path":69,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":70},"formulas.md","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Fformulas.md",{"path":72,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":73},"implementation_notes.md","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Fimplementation_notes.md",{"path":75,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":76},"integration_arbitragex.md","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Fintegration_arbitragex.md",{"path":78,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":79},"manifest.json","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Fmanifest.json",{"path":81,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":82},"references.json","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Freferences.json",{"path":84,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":14,"sourceHtmlUrl":85},"validation_tests.md","https:\u002F\u002Fgithub.com\u002Fhefarica\u002Farbitragex-v2\u002Fblob\u002Fmain\u002F.claude\u002Fagents\u002Fskills\u002Fbloxroute-backrun-bundle-flow\u002Fvalidation_tests.md",[87,98,103,128,134,143],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":32},"01M6DSWR7WDRG7C3D31R4QKW5T","\u003Cskill-name>","\u003Cone-line description>","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Ftemplate\u002Fcodex\u002FSKILL.md",[],[94,95,96,97],"skill name","name","\u003Cskill name>","line",{"skillNo":99,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":32},"01M6DSWMRPCHQH4HJJF3MATTXZ","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Ftemplate\u002Fclaude\u002FSKILL.md",[],[94,95,96,97],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":32},"01M6DSWH83XKNGJSKX2XWQCRKJ","wrap-up","End-of-session cleanup for Codex — inspect stale artifacts, run debrief, write significant org-memory events, run a delta-first self-improve pass, then publish bounded approved memory and repository changes.","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrap-up\u002Fcodex\u002FSKILL.md",[],[110,111,112,113,22,114,115,116,117,118,119,120,121,122,123,124,125,126,127,21],"wrap up","up","wrap","run","cleanup","artifacts","repository","publish","first","improve","write","session","stale","session cleanup","delta","self","end","debrief",{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":32},"01M6DSWEQBS2CE6F2H8T3VQNZY","claude","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrap-up\u002Fclaude\u002FSKILL.md",[],[],{"skillNo":135,"name":105,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":32},"01M6DSW99EPXDVAG8GHR785CC5","End-of-session cleanup, debrief, org-memory events, self-improve, commit, and push in one command.","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[110,111,112,125,22,140,114,141,119,142,121,123,126,127],"commit","push","command",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":32},"01M6DSW4FRNRKRQ0TRMZAYNMKZ","self-improve","Audit and improve Codex operating guidance: skills, curated project memory, AGENTS.md, and relevant configuration. Use for explicit self-improve requests, routine wrap-up drift checks, stale or conflicting guidance, or an approved cleanup. Route release-wide OACP migrations and context-budget audits to audit-oacp-skills. Do not hand-edit generated Codex memories or installed plugin\u002Fsystem artifacts.","https:\u002F\u002Fgithub.com\u002Fkiloloop\u002Foacp-skills\u002Fblob\u002Fmain\u002Fskills\u002Fself-improve\u002Fcodex\u002FSKILL.md",[],[150,125,119,31,114,151,152,153,154,155,156,157,111,158,159,160,161,162,5,22],"self improve","release","audit","Budget","system","edit","context","generated","do","route","drift","memories","operating"]