rea
Reverse engineer anything with agents, from app behavior down to native binaries.
A Claude Code hook that checks the session record before dependent steps such as file edits, notebook edits, git commits and pushes, and session stops run. It helps users verify that an agent's actions are consistent with what it recorded.
Claude Code
> /plugin marketplace add Clear-Sights/Makoto> /plugin install makoto@makoto
GitHub Copilot
$ copilot plugin marketplace add Clear-Sights/Makoto$ copilot plugin install makoto@makoto
Makoto is a Claude Code hook. Before a dependent step runs (Write, Edit, MultiEdit, NotebookEdit,
Bash git commit/git push, or Stop), it checks the session record. If a reading the step needs
is missing, it holds the step: a PreToolUse step gets a native deny and a Stop gets a native block.
The hold names the rule, its shape, the exact subject, the one Immediacy rule it enforces and the missing reading. An admitted step gets {}. The checker uses no model and no network.
Claude Code 2.1.275 or later:
/plugin install makoto --marketplace Clear-Sights/Makoto
plugin/hooks/hooks.json sends each native event to cd plugin && python3 -m makoto2. Makoto
needs Python 3.11 or later and uses only the standard library.
Makoto is deterministic enforcement of Immediacy:
IMMEDIACY: A more immediate read assumes less.
+ Original: Read the original instead of a derivation.
โ Unchanged: Do not assume what can change has not.
Code decides every hold from the session record. An admitted step gets {}: Makoto adds nothing to
the model's context, so no check depends on the model reading injected text. A hold states the rule
it enforces, the specific missing reading and the one action that clears it (Clear: ...), and asks no question. A decided hold always blocks:
in every directory, and on every repeat of the same Stop.
makoto.target_exists. The hold ends in Clear: Read <path>.A locked, hash-linked journal keeps every turn under ~/.claude/makoto2_state
(MAKOTO_STATE_DIR overrides).
The optional host envelope makoto (effects, external_subjects, network_subjects,
invocation.subject(s), turn_id, detio_store) lets the host record what it saw, such as
opaque mutations, public names or the program that actually ran. The host must enforce the
decision before it runs a tool or delivers a final answer.
An error in Makoto's own reading (state folder, lock, transcript, a malformed host event) blocks the step, names the error, and gives the one way to disable Makoto. The user's own prompt (UserPromptSubmit) is never blocked: it is admitted and, whenever the journal is writable, recorded.
A corrupted journal does not stop the session. It is moved beside a fresh journal as
<journal>.corrupt-<ns>, and only a step whose reading is missing from what can still be read
(the transcript, then new calls) is held, for that missing reading.
The one way to disable Makoto, if an error keeps blocking, is to run this in a terminal outside the session, so a broken install cannot trap you:
claude plugin disable makoto
Every hook in hooks.json has a 10 s timeout. The per-session lock is never waited on longer
than 3 s (MAKOTO_LOCK_SECONDS); a busy lock blocks the step with that error.
A hold is never capped: a stop_hook_active Stop with a finding is held again every time.
Each call reads only the journal rows and transcript lines added since the previous call: a
.ckpt file beside the journal keeps both reads and the replayed record. A checkpoint that
does not match is ignored and the call replays in full; MAKOTO_CHECKPOINT=0 always does.
FSL-1.1-ALv2 (LICENSE): use, copy, modify and redistribute Makoto for any purpose except a Competing Use, which is offering it, or a product with the same or substantially similar functionality, to others as a commercial product or service. Internal use, non-commercial education and research, and professional services to a licensee are permitted. Each version becomes Apache-2.0 two years after its release. Versions up to and including 85ac4d5 stay Apache-2.0. NOTICE lists the Apache-2.0 excerpts from DetIO and Causality.
python3 -m pytest -q runs tests/. For each of rules a-d, test_rules.py sends a plant
and its twin through the exact hooks.json command: the plant is held and the twin is admitted.
test_robust.py plants each infrastructure error and checks that it blocks with the way out, and that checkpointed calls
decide exactly as full replay does.
scripts/measure_cost.py reports per-hook wall time (cold and warm bytecode) and the bytes a hook
adds to the model's context, on the events tests/ already contains; MEASURE_REPEAT sets the repeat count.
The full suite, fixtures, tools and records live in Clear-Sights/Makoto-Dev. This repository
receives only finished versions. The cut mesh/ gate is kept in git history at 295bf44.
Reverse engineer anything with agents, from app behavior down to native binaries.
A skill pack for authorized reverse engineering, security research, and penetration testing that routes tasks to the right skill and sets up needed tools on demand. It covers API security assessment and Android APK analysis, among others.
Gives an AI agent the step-by-step workflow a senior security analyst follows, covering when to use each technique, what to check first, how to run it and how to verify the result. Covers incident response, forensics, threat intelligence, malware analysis, penetration testing and red teaming.
Agent skill + stdlib Python service to strip multi-vendor AI provenance marks from text and files, for privacy and hygiene on content you own. The skill is a thin client: it drives the machinery over HTTP, so the agent host needs no Python.
Install it with the command on its page. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it