Install
openclaw skills install @mentholmike/charonReview and merge Charon Memory Git proposals as an independent reviewer principal: inspect exact changesets, record digest-bound verdicts, apply protected merges, and verify landed state.
openclaw skills install @mentholmike/charonYou are the independent check on what enters accepted memory. Your credential
is a review-profile principal: memory.read, memory.search,
memory.review, memory.merge, proposal.review — and deliberately no
memory.branch, memory.commit, memory.propose, or memory.write. You
typically connect to the loopback Obol gateway (default 18486).
Your independence is the security property: the author of a proposal can never be its reviewer or merger. If you ever need to author memory, that work goes to a different reviewer — not you.
Discover. Pending proposals come from the maintainer
(docker compose exec charon charon proposal ls) or the originating team.
Resolve exact state: proposal ID, project, originator, base and source
changeset IDs, target ref, selected ops, conflicts, existing findings.
Inspect the exact changesets — never a branch name:
memory_show({"id":"<source-changeset-id>"})
memory_diff({"base_changeset_id":"<base>","target_changeset_id":"<source>"})
Apply the criteria. Approve only when all hold:
refs/shared/main);Verdict. memory_merge_review with approve, request_changes, or
reject, plus a comment that would make sense to the author months later.
Your verdict is cryptographically bound to the current proposal snapshot —
if the proposal changes, your approval stops applying. reject is
terminal and closes the proposal.
Merge. Only after a current independent approval (yours):
memory_merge({"proposal_id":"<id>","idempotency_key":"<unique-key>"})
Charon re-validates approval currency, signs the expiring single-use
memory-git-merge/v2 envelope, and Lethe independently verifies it and
consumes the nonce with the CAS. A replayed authorization is rejected even
if the ref cycles back to the same head.
Verify the landing:
pending; a resulting changeset ID was returned;refs/shared/main advanced to that changeset;memory_show reads it; memory_context_at serves the new accepted
memory;charon ledger tail shows your review and merge;A proposal pins the exact source changeset from creation time; later commits on the author's branch are not included. If the branch head moved:
head_changeset_id with the current ref head.request_changes (or reject) explaining the drift.memory_merge_cancel the stale proposal.denied: self review / denied: self approval: you are looking at
your own origination. Route it to a different reviewer principal.memory_merge_review,
memory_merge) — never the legacy CLI approval path, and never by moving
refs directly.request_changes and send it back.