Shared Memory Intake
Use ~/.codex/memories/ as the canonical shared knowledge store and
~/.agents/shared-memory-inbox/ as the external submission store. Read
MEMORY.md before opening matching rollout_summaries/ files. Treat dynamic claims
as UNCONFIRMED until verified in the active session.
Actor contract
Require an explicit actor: --as claude or --as codex. Never infer it from the
runtime.
| Actor |
Allowed operations |
Forbidden operations |
claude |
read official memory; create one submission in inbox/pending/ |
edit or delete official memory, or another submission |
codex |
read, review, promote, supersede, maintain |
delete historical summaries or silently overwrite a current claim |
Claude: submit
Read MEMORY.md; do not restate an existing current claim as a new submission.
Create one uniquely named Markdown file under ~/.agents/shared-memory-inbox/pending/ with YAML frontmatter:
schema_version: 1
source_runtime: claude
submitted_at: 2026-07-26T00:00:00Z
cwd: /absolute/path
source_session: opaque-session-id
claim_status: unverified
evidence_host: hostname-or-fleet-id
evidence_host is optional for same-host evidence and required when the cited
source exists only on another host.
Keep only reusable conclusions, source references, evidence, and unknowns. Never
include credentials, tokens, private keys, cookies, or raw transcripts.
Validate before handoff:
python3 ~/.agents/skills/shared-memory-intake/scripts/validate_submission.py /absolute/path/to/submission.md
A correction is a new submission with supersedes_submission; never overwrite the
earlier proposal.
Codex: review and promote
- Acquire the single-curator lease before promotion:
mkdir ~/.agents/shared-memory-inbox/.curator.lock.
If it already exists, stop and report the active-curator conflict. Release it with
rmdir after the outcome is recorded.
- Run the validator on the candidate. Reject on schema or secret-pattern failure.
- Inspect the cited source and live-verify every dynamic claim that would enter the
current index. For cross-host evidence, require
evidence_host, verify the live
source on that host, and record the curator host plus verification time in the
promoted summary. Missing host access remains UNCONFIRMED.
- Re-read
MEMORY.md immediately before its update. If its relevant topic changed
during review, restart the review instead of merging assumptions.
- Promote accepted knowledge to a new immutable
rollout_summaries/*.md record and
update MEMORY.md as the only current index. Give every changed reusable claim a
lifecycle state: active, superseded, or UNCONFIRMED.
- Move the candidate to
processed/ or rejected/ without deleting its audit trail.
Codex: maintain
- Acquire the same single-curator lease and re-read
MEMORY.md immediately before
every official-memory write; stop on an active-curator conflict.
- Scan current index entries for changed paths, versions, models, deployments, or
stale references.
- Demote unverified dynamic claims to
UNCONFIRMED; mark replaced claims
superseded with their replacement reference.
- Consolidate duplicate current entries. Do not rewrite historical rollout summaries.
- Re-run the validator on any newly promoted submission and report the paths changed.
Validator
Use scripts/validate_submission.py. It is a narrow preflight gate, not proof that a
claim is true and not a complete secret scanner. A pass authorizes review only; Codex
still owns evidence verification and promotion.
1---2name: shared-memory-intake3description: Curate shared Codex memory when Claude submits findings or Codex reviews, promotes, or maintains task memory.4---56# Shared Memory Intake78Use `~/.codex/memories/` as the canonical shared knowledge store and9`~/.agents/shared-memory-inbox/` as the external submission store. Read10`MEMORY.md` before opening matching `rollout_summaries/` files. Treat dynamic claims11as `UNCONFIRMED` until verified in the active session.1213## Actor contract1415Require an explicit actor: `--as claude` or `--as codex`. Never infer it from the16runtime.1718| Actor | Allowed operations | Forbidden operations |19|---|---|---|20| `claude` | read official memory; create one submission in `inbox/pending/` | edit or delete official memory, or another submission |21| `codex` | read, review, promote, supersede, maintain | delete historical summaries or silently overwrite a current claim |2223## Claude: submit24251. Read `MEMORY.md`; do not restate an existing current claim as a new submission.262. Create one uniquely named Markdown file under `~/.agents/shared-memory-inbox/pending/` with YAML frontmatter:2728 ```yaml29 schema_version: 130 source_runtime: claude31 submitted_at: 2026-07-26T00:00:00Z32 cwd: /absolute/path33 source_session: opaque-session-id34 claim_status: unverified35 evidence_host: hostname-or-fleet-id36 ```3738 `evidence_host` is optional for same-host evidence and required when the cited39 source exists only on another host.40413. Keep only reusable conclusions, source references, evidence, and unknowns. Never42 include credentials, tokens, private keys, cookies, or raw transcripts.434. Validate before handoff:4445 ```sh46 python3 ~/.agents/skills/shared-memory-intake/scripts/validate_submission.py /absolute/path/to/submission.md47 ```48495. A correction is a new submission with `supersedes_submission`; never overwrite the50 earlier proposal.5152## Codex: review and promote53541. Acquire the single-curator lease before promotion: `mkdir ~/.agents/shared-memory-inbox/.curator.lock`.55 If it already exists, stop and report the active-curator conflict. Release it with56 `rmdir` after the outcome is recorded.572. Run the validator on the candidate. Reject on schema or secret-pattern failure.583. Inspect the cited source and live-verify every dynamic claim that would enter the59 current index. For cross-host evidence, require `evidence_host`, verify the live60 source on that host, and record the curator host plus verification time in the61 promoted summary. Missing host access remains `UNCONFIRMED`.624. Re-read `MEMORY.md` immediately before its update. If its relevant topic changed63 during review, restart the review instead of merging assumptions.645. Promote accepted knowledge to a new immutable `rollout_summaries/*.md` record and65 update `MEMORY.md` as the only current index. Give every changed reusable claim a66 lifecycle state: `active`, `superseded`, or `UNCONFIRMED`.676. Move the candidate to `processed/` or `rejected/` without deleting its audit trail.6869## Codex: maintain70711. Acquire the same single-curator lease and re-read `MEMORY.md` immediately before72 every official-memory write; stop on an active-curator conflict.732. Scan current index entries for changed paths, versions, models, deployments, or74 stale references.753. Demote unverified dynamic claims to `UNCONFIRMED`; mark replaced claims76 `superseded` with their replacement reference.774. Consolidate duplicate current entries. Do not rewrite historical rollout summaries.785. Re-run the validator on any newly promoted submission and report the paths changed.7980## Validator8182Use `scripts/validate_submission.py`. It is a narrow preflight gate, not proof that a83claim is true and not a complete secret scanner. A pass authorizes review only; Codex84still owns evidence verification and promotion.