AITP is a local-first protocol for long-running collaboration between researchers and AI agents.
Its goal is not merely to save notes. A mature AITP collaborator should remember the details that matter, recover why decisions were made, preserve failed attempts, connect knowledge across Topics, extract reusable physical knowledge and technical Skills, and surface new Insights without confusing them with established results.
After weeks or years of work, a new session should be able to:
- resume a Topic without asking the researcher to repeat its history;
- trace every remembered claim to its source record, and every evidence-bearing record to exact pinned evidence;
- recall conventions, constraints, decisions, failures, and open questions;
- connect a current problem to relevant results from other Topics;
- distinguish physical knowledge, reusable procedure, and speculative Insight;
- propose a reusable Skill with provenance and evaluations;
- work with a researcher across many sessions without losing corrections, commitments, or the reasoning behind the current direction.
AITP records project memory, not scientific truth. Evidence and human judgment remain authoritative.
AITP's end state has two kinds of objects: four stores and typed, provenance-carrying, append-only relation records between them.
L literature external (arXiv / INSPIRE / publishers); mirror: references/
M AITP memory .aitp append-only records + reviewed artifacts (agent-facing)
H researcher judgment and corrections; leaves attributable traces
D documents the research itself: theory/, manuscripts/, notes, Obsidian
M is memory; D is the research. Notes live in M; derivations and manuscripts live in D; M pins D and cites L; H gates promotion. Every durable movement that M relies on uses one of these relation records — cite, ground, synthesize, decide, supersede, link, review, publish — each with an author, a time, and an evidence pin where reachable. Proposals live as drafts; accepted relations are saved records. Not every movement is recorded: ordinary D edits live in Git, and unwritten H judgments are invisible by design.
The protocol has three parts:
- Schemas — append-only Markdown records with evidence pins (ledger design), reviewed compiled artifacts, and link records.
- A small deterministic CLI — the write gate: validate, persist, project, benchmark. Nothing semantic runs in Python.
- Methodology Skills — the research discipline: when to read, how to survey literature, when to record, how to distill, when to stop and ask.
The original L0–L4 vision is preserved as cognitive discipline and dissolved as software. See Roadmap and Product Design.
The normative plan, including complexity budgets and gate definitions, is docs/roadmap.md. This README keeps the public implementation checkpoint synchronized with it.
| Stage | Status | Outcome | Exit gate |
|---|---|---|---|
| M0 — Ledger | done | Reliable single-Topic records and Notes | Idempotent writes, pinned evidence, grounded enter, real-project use |
| M0.5 — Slim core | done | One canonical runtime, deduplicated without net growth | No runtime duplication, no oversized module, unchanged ledger contracts |
| M0.6 — Adopt & bootstrap | implementation closed; original empirical gate not passed | Deterministic init --adopt/inventory implementation and anchored, unexecuted FROZEN v6 packet; no bootstrap-validation or plain-files advantage claim |
Narrowed gate review accepted; original bootstrap Notes/decisions, recall/false-import/human-time, held-out S3, paired S1/S2, cold-start, conformance, causal, and treatment-advantage evidence is not measured; deferred; not counted |
| M1a — Memory that restores | done; deterministic gate passed | Versioned list, show, closeout-first enter v2, Note-age structural signal, generated public-schema goldens, deterministic S1/S2 regression, read-only GW_librpa acceptance |
Deterministic gate passed; this is not a behavioral or treatment-superiority gate. Evidence: docs/archive/m1a-stage-notes.md |
| M1b — Open items & behavior pilot | M1b-R1 done; remaining M1b candidates deferred | Authoritative A–H + Followup roster in docs/m1b-spec.md §0.1 and the adjudication in docs/archive/m1b-adjudication.md: A and Followups 1/3/4/5 selected in M1b-R1 (check v0.1-only + compact enter text), implemented per docs/archive/m1b-r1-spec.md; B, C–E, Followup 2 (lineage), Followup 6 (structured prepare) deferred; F moved to M4 Skill-only; G independent; H dropped |
R1 deterministic gate passed (independent review with no S0/S1/S2 blockers; 78 tests; benchmark final PASS; 1,423-line runtime within the 1,425 target and 1,450 cap; goldens; S1/S2 regression; read-only byte-identical real-store acceptance; same-day precision-fix amendment superseding the pre-amendment 77-test/1,421-line run) — evidence in docs/archive/m1b-r1-stage-notes.md. Not a behavioral or treatment-superiority gate; lineage is a deferred candidate |
| M1c — Topic workstreams | done; deterministic gate passed | Optional explicit workstreams membership on Entries/Notes (unscoped legacy visible only in the global view, explicit multi-membership, no registry); repeatable --workstream prepare flag (duplicates rejected); single-slug scoped enter/list (aitp/enter-0.3/aitp/list-0.2 with one additive top-level singular workstream key) with global relations computed first and strictly scoped projections including handoff; global warnings/malformed; no flag ⇒ old schemas byte-unchanged; budget target ≤ 1,550 / cap ≤ 1,600 nonblank lines, modules < 400 |
Deterministic gate passed 2026-08-13: 107 tests (85 unchanged + 22 new workstream tests); benchmark final PASS (module/plugin help < 250 ms; 1,000-Entry enter/list < 1 s); runtime 1,519 nonblank lines within target/cap; real-store no-flag old-runtime parity and zero-write tree. Evidence: docs/m1c-stage-notes.md; frozen spec docs/archive/m1c-workstreams-spec.md. Not a behavioral or treatment-superiority gate |
| M1e — Evidence lifecycle + reviewed backfill | done; deterministic gate passed | sha256-once: save-strict / check-historical pin scheme; optional .aitp/local/check-policy.json reviewed mutable-path policy (legacy strict drift/missing downgraded only on mutable matches; immutable/unmatched stay errors; no policy ⇒ byte-unchanged); new aitp backfill workstreams --mapping … --decision <human-entry> [--apply] dry-run-first, idempotent, explicit-only workstream backfill that adds/merges frontmatter membership and preserves body/other fields; budget target ≤ 1,800 / cap ≤ 1,850 nonblank lines, modules < 400 |
Deterministic gate passed 2026-08-15: 154 tests passed; runtime 1,793 nonblank lines within target/cap (max module records.py 379); no-policy check parity asserted; backfill dry-run/apply/idempotence and human-anchor rejection asserted; git diff --check clean. Evidence: docs/m1e-stage-notes.md; frozen spec docs/archive/m1e-evidence-lifecycle-backfill-spec.md. Not a behavioral or treatment-superiority gate |
M1d — Scoped check workstream health |
done; deterministic gate passed | Single-occurrence --workstream <slug> on check (repeated flags parser-rejected) emitting the scoped aitp/check-report-0.2: strict admitted explicit-membership attribution (malformed, duplicate-ID, unscoped, out-of-scope, and TOPIC.md findings never scoped), whole-store scan and global relations computed first with the scoped report a strict subset projection (same findings, levels, codes, (path, code, message) order), scoped counts entries, notes, errors, warnings, by_code, outside_scope (per-level by_code buckets; outside_scope a pure global−scoped level delta that never affects status/exit), exactly four human-only scoped text lines, empty scope legal (exit 0); no flag ⇒ aitp/check-report-0.1 byte-unchanged (JSON, text, exit, zero-write); budget target ≤ 1,550 / cap ≤ 1,600 nonblank lines, modules < 400 |
Deterministic gate passed 2026-08-14: 126 tests (107 unchanged + 19 new scoped-check tests); benchmark final PASS (module/plugin --help < 250 ms; 1,000-Entry enter/list < 1 s); runtime 1,543 nonblank lines within target/cap (max module records.py 348); git diff --check clean. Evidence: docs/m1d-stage-notes.md; frozen spec docs/archive/m1d-workstream-health-spec.md. Not a behavioral or treatment-superiority gate |
| M2 — Reviewed artifacts | design option; blocked | No pre-design: triggers on natural-demand evidence that Entries/Notes are inadequate for recurring synthesis; until then, synthesis files + authority: human decision Entries |
A no-runtime M1b decision does not authorize M2; its own natural-demand review must show Entries/Notes are inadequate first |
| M3 — Cross-topic links | design option; blocked | No pre-design: triggers on ≥ 3 real Topics and a real cross-Topic rg/citation failure; until then, ordinary citations, no catalog/link runtime |
Natural cross-Topic use shows rg plus ordinary citations are inadequate, then human-confirmed links answer a real question with provenance |
| M4 — Collaborator protocol | blocked design option; Skill-only | Long-horizon question → hypothesis → prediction → test loop | M1b pilot evidence only if that pilot is selected; otherwise M4's own natural-demand and prospective-evidence adjudication against the plain-files baseline. It does not depend on the dormant FROZEN v6 suite |
The 2026-08-10 M0.6 gate-review decision is applied in
docs/archive/m0.6-gate-review.md: M0.6
implementation is closed only under the approved narrowed reviewed claim; the
original empirical gate was not passed. M1a is done; deterministic gate
passed; see docs/archive/m1a-stage-notes.md. This is not a
behavioral or treatment-superiority gate. The original empirical M0.6 conditions
remain not measured, deferred, and not counted.
The 2026-08-15 reviewed Skill-only change ships as 0.6.0: automatic
session-boundary current-state maintenance (enter/check, evidence review,
method-card retrieval at session start; agent-authority closeout/working-Note
upkeep at session end, superseding stale records, with no-delta zero-write
and pre/post verification) and method-card distillation — stable repeated
procedures become method-card theory Notes (the existing mode: theory
Note profile, body-first-line marker > method-card: <slug>, fixed six
headings), drafted automatically on trigger but gated through pinned trials,
a human decision Entry approval, and an explicit human publish request.
It is not a roadmap stage: no behavioral runtime/CLI/schema change; version
strings synchronized (runtime stays 1,543 nonblank lines) and no M2/M3/M4 flip. The natural-use
feedback is feedback/2026-08-15-multi-topic-automatic-organization-and-method-distillation-natural-use.md;
the design record is docs/method-cards-and-distillation.md.
The same-day GW/LibRPA feedback
(feedback/2026-08-15-gw-librpa-natural-use.md)
is folded in as template/Skill guidance only: record/note prepare
prompts now show the required target/at ref shape (the key is at,
never pin), and using-aitp teaches evidence-lifecycle pin choice,
immutable pointer manifests, old-pin drift interpretation,
malformed-vs-warning terminology, and session-start handoff/goal checks. No CLI flag, schema, exit code, or runtime line changed.
M1a is done; M1b-R1 is done (remaining M1b candidates deferred); M1c
(Topic workstreams) is done; deterministic gate passed
(see item 6 below), M1d (scoped check workstream health) is
done; deterministic gate passed (see item 7 below), M1e
(evidence lifecycle + reviewed backfill) is done; deterministic gate passed
(see item 9 below), and the 2026-08-15 reviewed Skill-only 0.6.0 slice
(automatic session-boundary maintenance + method-card distillation) is
shipped (see item 8 below). The
two-session ordinary natural-use pause is complete, the
M1b reviewed freeze revision is recorded, and the selected M1b-R1 read-side
slice is implemented per docs/archive/m1b-r1-spec.md with
its deterministic gate passed (evidence in
docs/archive/m1b-r1-stage-notes.md). Current
natural-use triage — the active queue plus a path-stable logical archive — is
maintained in feedback/README.md; dated observations
retain their original evidence paths:
-
aitp init --adoptis implemented and tested, and has been exercised on real trees; preserved operator before/after hash evidence is incomplete perdocs/archive/m0.6-gate-review.md. This is a documented real-tree evidence gap, not a claim of complete bootstrap validation. -
aitp inventoryis implemented with deterministic traversal, ordering, and content hashing in a timestamped local manifest. Bootstrap Notes, human decision Entries, recall, false-import rate, and human-time evidence are not measured; deferred; not counted. -
The conformance suite core is implemented and frozen as
suite/FROZEN.mdv6. It is dormant: an anchored, unexecuted preregistration, not an active gate, and it has never produced a score. Its hashes are self-consistent and its identity-contract bytes are anchored by commit145261805d5205d2150dca18c6c42d5a18a628f2. A no-turn preflight verified preparation, then stopped before S3 because exact model/prompt identity and two-machine/account isolation were unavailable. It produced no score. Held-out S3, paired S1/S2 scores, cold-start, conformance, causal, and treatment-advantage evidence are not measured; deferred; not counted under the approved closure.The optional future automation handoff is specified in
docs/external-evaluation-harness.md. It is a separate project, not AITP scope or a runtime dependency; it cannot retroactively satisfy M0.6 or replace the human gate decision. -
M1a implementation and its deterministic gate are complete; the auditable evidence is in
docs/archive/m1a-stage-notes.md. The current CLI isinit,enter,inventory,record,note,list,show, andcheck;enterusesaitp/enter-0.2,listusesaitp/list-0.1,showusesaitp/show-0.1, andcheckis shipped and gated with two read-only transports: the no-flagaitp/check-report-0.1perdocs/archive/m1b-r1-spec.mdwith its deterministic gate passed (evidence indocs/archive/m1b-r1-stage-notes.md), and the M1d scopedaitp/check-report-0.2(--workstream <slug>) perdocs/archive/m1d-workstream-health-spec.mdwith its deterministic gate passed (evidence indocs/m1d-stage-notes.md).docs/m1b-spec.mdrecords the 2026-08-12 reviewed freeze revision; the natural-use pause is complete and the M1b-R1 read-side slice is implemented and gated.lineageis a deferred candidate, absent from the CLI. -
The natural-use evidence: the first feedback arrived 2026-08-11 (
feedback/2026-08-11-gw-librpa-natural-use-feedback.md, one long session chain) and the second ordinary session on 2026-08-12 (feedback/2026-08-12-power-law-heisenberg-natural-use-feedback.md, an independent real-Topic correction session); the researcher's six followup suggestions are archived infeedback/2026-08-12-gw-librpa-followup-feedback.md. The reviewed freeze revision and dispositions are indocs/archive/m1b-adjudication.md. Neither session is a controlled experiment. -
M1c (Topic workstreams) is done; deterministic gate passed: the 2026-08-13 natural-use feedback (
feedback/2026-08-13-gw-librpa-workstreams-natural-use-feedback.md) records observable facts from a GW_librpa store that shares source/build/provenance across three research lines (crpa, magnetic-symmetry, qsgw-semiconductor); the frozen implementation spec isdocs/archive/m1c-workstreams-spec.md(optionalworkstreamslist, unscoped legacy visible only in the global view, explicit multi-membership, repeatable--workstreamprepare flag, single-slug scopedaitp/enter-0.3/aitp/list-0.2with global relations computed first and strictly scoped projections including handoff, global warnings, no registry). M1c is independent of the frozen M1b roster (§0.1 dispositions unchanged) and of M3; its deterministic gate passed and the evidence is recorded indocs/m1c-stage-notes.md. -
M1d (scoped
checkworkstream health) is done; deterministic gate passed: the 2026-08-14 feedback chain — three ordinary real-Topic sessions, none of them an AITP gate or a controlled experiment (feedback/2026-08-14-gw-librpa-natural-use.md,feedback/2026-08-14-gw-librpa-qsgw-semiconductor-natural-use.md,feedback/2026-08-14-yangian-power-law-heisenberg-chain-natural-use.md) drove the frozen implementation specdocs/archive/m1d-workstream-health-spec.md(single-occurrence--workstream <slug>oncheck; scopedaitp/check-report-0.2with strict admitted explicit-membership attribution, global scan and relations computed first with the scoped report a strict subset projection, scoped counts with per-levelby_codeand the derivedoutside_scopelevel delta, exactly four human-only scoped text lines, empty scope legal; no flag ⇒aitp/check-report-0.1byte-unchanged). M1d additively supersedes the M1c "checkhas no scope flag" clause for the flag variant only; every other M1c clause and all M1b dispositions (§0.1) are unchanged, and M1d selects no M1b candidate. Its deterministic gate passed and the evidence is recorded indocs/m1d-stage-notes.md. The same change ships theusing-aitpSkill guidance (pin/ref lifecycle, fail-closed exit-code handling, reviewed manual backfill, working-note judgment) and the bundled natural-use feedback template (plugins/aitp-research-protocol/skills/using-aitp/natural-use-session-template.md). -
The 2026-08-15 reviewed Skill-only slice ships as 0.6.0 — no behavioral runtime/CLI/schema change; version strings synchronized (runtime stays at 1,543 nonblank lines; every M1b/M1c/M1d contract is unchanged). The natural-use feedback (
feedback/2026-08-15-multi-topic-automatic-organization-and-method-distillation-natural-use.md) records observable facts from a two-workspace session: the two-store handoff tidying cost, the researcher's refusal of future manual tidying, and the request to study thequantum.harnessreference repo — no controlled comparison, no superiority claim. The slice adds: automatic session-boundary current-state maintenance inusing-aitp(session start:enter/check, evidence review, method-card retrieval via the generic marker searchrg "^> method-card:"; session end: agent-authority closeout/working-Note upkeep superseding stale records, no-delta zero-write, pre/postcheck/enterverification — the agent maintains, never the researcher); a new implicit meta-Skilldistilling-methods(draft a method-card theory Note automatically only on trigger — explicit request, or a stable procedure across ≥ 2 sessions, or the same failure twice with the same workaround; trial Entries pin the exact card; revisions supersede; two pinned trials then a publication proposal; a humandecisionEntry pinning the card is the approval gate; an explicit later human publish request is the publication gate — never auto-publish, never cross-Topic propagate, never infer workstreams, never resolve failures on a card's authority, no Python summarization). Method cards reuse the existingmode: theoryNote profile (titleMethod card: <slug>, body-first-line marker> method-card: <slug>, fixed six theory headings) — no new schema, mode, or review state; cards inform, Skills route, and there is no card registry or INDEX. The design record isdocs/method-cards-and-distillation.md(quantum.harness scale and adopt/adapt/reject evidence; the reference repo's cards are predominantly human-curated, not auto-distilled). A same-day follow-up fromfeedback/2026-08-15-gw-librpa-natural-use.mdstays Skill/template-only:record/noteprepare prompts show the requiredtarget/atref shape, andusing-aitpadds evidence-lifecycle pin choice, pointer-manifest immutability, old-pin drift interpretation,malformed-vs-warning terminology, and session-start handoff/goal checks. No runtime/CLI/schema changed. -
M1e (evidence lifecycle + reviewed backfill) ships as 0.7.0 and is a runtime stage slice, not a Skill-only change. It adds
sha256-once:mutable-observation pins; optional.aitp/local/check-policy.jsonreviewed mutable-path policy for legacy strict pins; andaitp backfill workstreamswith a dry-run default and a mandatory human decision Entry that sha256-pins the mapping. No policy file means check remains byte-unchanged. The frozen spec isdocs/archive/m1e-evidence-lifecycle-backfill-spec.mdand gate evidence isdocs/m1e-stage-notes.md. -
The 2026-08-21 0.8.0 amendment is a reviewed Skill-only design change, not a stage, natural-use gate, or behavioral evaluation result. It extends the
distilling-methodsSkill (the single rule source) and theusing-aitpfallback routing with: a low-trust> method-observation: <slug>marker on eligible durable Entries (candidate, not proof — the runtime never validates it); conservative candidate review (rgdiscovery +showcanonical read, exit 2 fail closed, distinct logical execution judgment, no auto-draft by marker count); pre-card basis vs post-card exact trial (pre-card Entries arebasis_refsonly; post-card trials must exact-sha256:pin the saved card at creation; contradictory trial stops); a two-step human decision (cardApprove/Defer/Reject, then a separatePublish now/Keep local, both saved as independent humandecisionEntries by the main agent; main-agent-only; no hardcoded model/preset); the platform tool/card/Skill three-layer boundary (tool executes, card records, Skill routes; barehost:pathnever accepted as evidence; host Goal never auto-imported); and a best-effort fallback lifecycle (no runtime hook, no exactly-once; native host coordinator planned but not implemented). It changes no CLI command, flag, file schema, transport schema, exit code, or runtime line — version strings synchronized to 0.8.0; runtime stays 1,793 nonblank lines; no M1b/M1c/M1d/M1e disposition change; no M2/M3/M4 flip. The design record isdocs/method-cards-and-distillation.md.
The binding evidence-before-complexity ratchet, gate order, fixed-cap rule,
natural-use pause, exhaustive A–H disposition process, and no-runtime/M2 rule
are normative in docs/roadmap.md §Simplicity and stage authorization
and docs/m1b-spec.md §0.1.
In brief: M1a is done with its deterministic gate passed; the two-session
ordinary natural-use pause is complete (2026-08-11 GW session chain +
2026-08-12 Power-law Heisenberg session); the 2026-08-12 reviewed freeze
revision selected the read-side slice M1b-R1 (aitp check v0.1-only +
compact enter text), implemented per docs/archive/m1b-r1-spec.md with its
deterministic gate passed (evidence in docs/archive/m1b-r1-stage-notes.md).
M1c (Topic workstreams) and M1d (scoped check) are done with their
deterministic gates passed. The 2026-08-15 reviewed Skill-only slice (0.6.0:
automatic session-boundary maintenance + method-card distillation) is shipped
with no behavioral runtime/CLI/schema change; version strings synchronized
— no new stage, no stage flip. M2/M3 remain
design options.
This README is the public roadmap and current-state entry point. Any change
that alters stage status, roadmap scope, CLI surface, gate evidence, spec
paths, runtime budgets, installation, or user-facing operation must update the
corresponding README sections in the same change. docs/roadmap.md remains
the normative detailed plan; README maintenance must never be deferred to a
later session.
Multi-user synchronization, permissions, and remote federation are off the roadmap. For the default single-researcher, non-adversarial model, Git and author/reviewer provenance are sufficient until a concrete collaboration failure disproves it.
AITP must remain a protocol with a small deterministic tool, not grow into an agent framework.
- Keep one canonical copy of runtime source. Plugin packaging must not create a second hand-maintained implementation.
- Keep each Python module below 400 nonblank lines. Split by stable responsibility, not by abstract framework layers.
- Freeze the M0 command surface:
init,enter,record, andnote. Later commands are additive and must not weaken these contracts. - Cumulative runtime budget: stage-end caps in
docs/roadmap.md; about 2,000 lines total maximum. M0.5 must deduplicate without net growth. - Python may parse, validate, persist, project, and benchmark records. Physical reasoning, synthesis, literature judgment, and collaboration policy belong in Skills and reviewed artifacts.
- Default to no index:
rgover Markdown is the query path. Add a derived cache only if a reproducible realistic benchmark demonstrates the need, and only as a disposable artifact. - Do not add a required database, vector service, MCP server, hook, daemon, scheduler, event bus, dependency-injection system, or plugin framework.
- Target installed-plugin startup below 250 ms for
--helpand below one second forenteron a 1,000-Entry fixture. - A new feature must include a measured use case, an acceptance test, and its effect on code size and startup time.
- Agent behavior conformance is measured by an external suite, never enforced by the runtime.
If a milestone cannot fit these constraints, reduce its scope before expanding the runtime.
M0 (Evidence Ledger) and M0.5 (slim core) are done. M0.6 (adopt and
bootstrap) is done under the approved narrowed reviewed claim: init --adopt and inventory are implemented, while the original bootstrap and
scored-suite evidence is not measured; deferred; not counted. FROZEN v6 remains
an anchored, unexecuted preregistration. M1a is done; deterministic gate
passed; its auditable evidence is in docs/archive/m1a-stage-notes.md.
M1b is done; deterministic gate passed (M1b-R1): the natural-use pause is
complete, the 2026-08-12 reviewed freeze revision selected the read-side
slice M1b-R1, implemented per docs/archive/m1b-r1-spec.md, and its deterministic
gate passed — auditable evidence in
docs/archive/m1b-r1-stage-notes.md
(docs/archive/m1b-adjudication.md, docs/archive/m1b-r1-spec.md). Total M1b denotes only
that this selected slice completed; all other roster rows keep their
dispositions (B, C–E, Followup 2 lineage, Followup 6 deferred; F → M4;
G independent; H dropped).
M1c (Topic workstreams) is done; deterministic gate passed per the
frozen spec
docs/archive/m1c-workstreams-spec.md:
optional explicit workstreams membership on Entries/Notes (unscoped legacy
visible only in the global view), repeatable --workstream prepare flag
(duplicates rejected), and single-slug scoped
enter/list (aitp/enter-0.3/aitp/list-0.2, no flag ⇒ old schemas
byte-unchanged) with global relations computed first and strictly scoped
projections including handoff; global warnings; no
registry. The deterministic gate passed and the evidence is recorded in
docs/m1c-stage-notes.md.
M1d (scoped check workstream health) is done; deterministic gate
passed per the frozen spec
docs/archive/m1d-workstream-health-spec.md:
the single-occurrence --workstream <slug> flag on check emits the
scoped aitp/check-report-0.2 — strict admitted explicit-membership
attribution (malformed, duplicate-ID, unscoped, out-of-scope, and TOPIC.md
findings are never scoped), whole-store scan and global relations computed
first with the scoped report a strict subset projection, scoped counts with
per-level by_code and the derived outside_scope level delta (never a
finding, never affecting status/exit), exactly four human-only scoped
text lines, and empty scope legal (exit 0). Without the flag every check
surface is byte-unchanged aitp/check-report-0.1. The deterministic gate
passed and the evidence is recorded in
docs/m1d-stage-notes.md.
The 2026-08-15 0.6.0 release is a Skill/template slice, not a roadmap stage:
it adds automatic session-boundary current-state maintenance and method-card
distillation through Skills and documentation only, and the same-day
GW/LibRPA feedback adds prepare-template ref hints plus pin-lifecycle and
pointer-immutability guidance. It changes no CLI
command, flag, file schema, transport schema, exit code, or runtime line —
the installed skills drive the same init/enter/record/note/list/
show/check surface. Session start runs enter/check, reviews the
evidence, and retrieves method cards by marker; session end keeps the ledger
current automatically (agent-authority closeout/working Note, superseding
stale records; no-delta zero-write; post-save verification), and stable
repeated procedures may be distilled into method-card theory Notes through
the human-gated chain in distilling-methods (draft → trial → revision →
proposal → human approval → explicit publication). See
docs/method-cards-and-distillation.md.
The 2026-08-21 0.8.0 amendment is a further Skill-only design change:
method-observation markers, conservative candidate review, post-card exact
trials, two-step human decisions, the platform tool/card/Skill three-layer
boundary, and the best-effort fallback lifecycle — all in Skill text and
manifest descriptions only. It changes no CLI command, flag, file
schema, transport schema, exit code, or runtime line; version strings
synchronized to 0.8.0; runtime stays 1,793 nonblank lines. See
docs/method-cards-and-distillation.md.
Implemented command groups (the complete current CLI surface):
aitp init [--adopt]
aitp enter [--workstream <slug>] # M1c: scoped enter-0.3 with flag
aitp inventory <path> --name <name>
aitp record prepare ... [--workstream <slug>]... -> aitp record save <draft> # M1c: repeatable prepare flag
aitp note prepare ... [--workstream <slug>]... -> aitp note save <draft> # M1c: repeatable prepare flag
aitp list [--workstream <slug>] # M1c: scoped list-0.2 with flag
aitp show <entry-id>
aitp check [--workstream <slug>] # M1d: scoped check-report-0.2 with flag; no flag ⇒ 0.1 byte-unchanged
aitp backfill workstreams --mapping <path> --decision <entry-id> [--apply] # M1e
enter, list, and show expose the versioned read contracts
aitp/enter-0.2, aitp/list-0.1, and aitp/show-0.1; the M1c scoped
variants aitp/enter-0.3 and aitp/list-0.2 are emitted only when the
single-occurrence --workstream <slug> flag is passed (shipped;
deterministic gate passed). check is the
read-only store-health command with two read-only transports — the no-flag
aitp/check-report-0.1 (byte-unchanged; the M1b-R1 baseline, shipped
per docs/archive/m1b-r1-spec.md with its deterministic gate passed,
evidence in docs/archive/m1b-r1-stage-notes.md) and the M1d single-slug
scoped aitp/check-report-0.2 (--workstream <slug>, shipped;
deterministic gate passed, evidence in docs/m1d-stage-notes.md) — while
the diagnosed file schemas remain the shipped v0.1 ones
(aitp/lite-entry-0.1/aitp/lite-note-0.1). Both modes: exit 0 clean /
1 findings / 2 cannot run or misuse; read-only, zero-write. lineage is a
deferred candidate and is absent from the CLI — it may return only through
a new reviewed freeze revision.
check always scans the whole store once and computes the global report
exactly as a no-flag run; the flag restricts only the report. A finding is
scoped only when its path is an admitted record (parse and structure
passed, and the ID was unique) whose frontmatter workstreams explicitly
lists the slug — strict exact membership, never inferred: malformed,
duplicate-ID, unscoped, out-of-scope, and TOPIC.md findings are never
attributed to any scope. Relations validate against the global entry_map
first, so an in-scope resolver may target an out-of-scope record without a
finding, and the scoped findings list is the globally sorted list
restricted to in-scope paths — same levels, codes, messages, and order.
# whole store (no flag): `aitp/check-report-0.1`; one line per finding, then the summary
aitp check
warning[empty_topic_goal]: .aitp/topic/TOPIC.md: Research Goal is not established
check: 0 error(s), 1 warning(s)
# scoped: exactly four text lines, always — details live in --json
aitp check --workstream crpa
workstream: crpa
check: 1 error(s), 1 warning(s)
by_code: {"hash_mismatch": {"errors": 1, "warnings": 0}, "invalid_timestamp": {"errors": 0, "warnings": 1}}
outside_scope: 3 error(s), 1 warning(s) (run "aitp check" for the whole store)
# empty scope: a legacy store whose records carry no `workstreams` is in no scope
aitp check --workstream crpa
workstream: crpa
check: 0 error(s), 0 warning(s)
by_code: {}
outside_scope: 0 error(s), 1 warning(s) (run "aitp check" for the whole store)
aitp check --workstream <slug> --json emits aitp/check-report-0.2: the
complete 0.1 payload plus one additive top-level workstream key and two
additive counts keys — by_code (per-level tally code → {"errors": n, "warnings": m} over the scoped findings, keys sorted by code, always
present) and outside_scope (global totals minus scoped totals, per level;
a pure level delta that never appears in findings and never affects
status or the exit code). Scoped counts.entries/counts.notes count
admitted in-scope records. Without the flag every surface is
byte-unchanged aitp/check-report-0.1.
Read the empty scope correctly: a well-formed slug with no admitted
in-scope records is a valid scope — counts 0, by_code: {}, status
clean, exit 0. Records without a workstreams field are in no scope,
so on a legacy store every scoped run is empty and a scoped clean/exit 0
means nothing is attributable, not health; scoped health is meaningful
only once records explicitly carry workstreams (new scoped records, or a
reviewed manual backfill — the runtime never backfills). A scoped clean
is never a whole-store health certificate: the no-flag run remains the
whole-store instrument, and outside_scope keeps the global remainder
visible. In scripts, exit 2 means the store state is unknown — capture the
exit code and fail closed (the using-aitp Skill shows the pattern).
The Hakimi integration handoff baseline (compatibility matrix, versioned
envelope decisions, red lines, phased H0/H1/H2 plan) lives in
docs/hakimi/.
AITP owns the CLI, Skills, and the machine-readable adapter surface
plugins/aitp-research-protocol/aitp.contract.json; Hakimi and the dsh
AITP mode consume that surface and must not fork AITP semantics. Before
closing any AITP development change that alters the CLI surface, a
transport schema, a model-facing tool description, or a Skill surface,
confirm the two external adapters in the same change:
- Update
aitp.contract.jsonand runpytest tests/ledger/test_adapter_contract.py; an out-of-date contract must fail CI, never be repaired later. - Hakimi: update
docs/hakimi/(README and compatibility matrix) and confirm its adapter loads the new contract version or fails closed on an unknown schema — never silently falls back to an old command surface. - DeepSeek Harness: confirm the dsh AITP mode (the external
anchored-aitppreset, seedocs/dsh-adapters.md) still builds itsaitp_*tools fromaitp.contract.json, reads Skills from the AITP checkout, and passes its preflight (contractSchema,contractSha256, launcher hash) and smoke tests. - Record the exact AITP commit, contract sha256, launcher sha256, and delivered Skill hashes with the run; a run may not silently mix an old adapter with a new AITP surface.
Additive, contract-described changes propagate to both adapters on their next load. Breaking or semantic changes require an explicitly reviewed adapter revision in the same change, per the Hakimi compatibility matrix and the external evaluation-harness contract.
Properties:
- Markdown and filesystem are canonical;
- no database, vector service, MCP server, hook, or daemon is required;
- the Codex plugin bundles
$aitp,$using-aitp(pin/ref/exit-code, evidence-lifecycle and pointer-immutability guidance,sha256-onceand check-policy rules, reviewedbackfill workstreams, automatic session-boundary maintenance, session-start handoff/goal checks, method-observation markers and best-effort fallback harvest, and the bundled natural-use feedback template), and the implicit$distilling-methodsmeta-Skill (method-observation markers, conservative candidate review, post-card exact trials, two-step human decisions, and the platform tool/card/Skill three-layer boundary); - the M0 ledger contracts have been exercised against a real theoretical-physics workspace;
- all current tests pass.
The master plan is docs/roadmap.md.
main stable integrated protocol, roadmap, and released capabilities
ledger-core immutable M0 ledger baseline
slim-core M0.5 runtime simplification; gate passed, kept as a historical baseline
research-graph archived; superseded by the M3 cross-topic-links design
The former repository implementation is retained separately as legacy/v5-final during repository cutover. Old authority and experimental branches are archival evidence, not active product lines.
Feature branches should be short-lived. Stable milestones land on main; permanent branches exist only for explicit historical baselines.
.agents/plugins/ local Codex marketplace
docs/ concise active designs
plugins/aitp-research-protocol/ installable Codex plugin
plugins/aitp-research-protocol/aitp.contract.json machine-readable Hakimi/dsh adapter surface
plugins/aitp-research-protocol/scripts/vendor/aitp/ canonical single runtime
tests/ledger/ ledger and plugin contracts
The repository contains no compatibility runtime for former implementations.
The same bundle under plugins/aitp-research-protocol/ installs on both
supported agent platforms (CLI + per-platform manifest; no MCP, hooks, or
daemon).
Install the local Codex plugin:
codex plugin marketplace add /absolute/path/to/AITP-Research-Protocol
codex plugin add aitp-research-protocol@aitp-protocolStart a new Codex session and invoke:
$aitp
Use /skills to inspect installed Skills. $aitp is a Skill invocation; /aitp is not a Codex slash command.
Install the same bundle in Kimi Code:
/plugins install /absolute/path/to/AITP-Research-Protocol/plugins/aitp-research-protocol
/reload
Kimi Code runs from its managed copy (~/.kimi-code/plugins/managed/), so
re-run the install after the bundle changes. Invoke with /skill:aitp.
Since 0.6.0 the installed Skills maintain the ledger automatically at session
boundaries (enter/check + evidence review + method-card retrieval at start;
closeout/working-Note upkeep with no-delta zero-write at end) and may draft
method-card theory Notes for stable repeated procedures. Since 0.8.0 the
Skills also tag eligible durable Entries with low-trust method-observation
markers and route through two-step human decisions (card approval then
publication choice). No extra commands are
needed — every write goes through the existing record/note prepare/save
path, publication stays human-gated, and nothing runs in the background
(no daemon, hook, or MCP).
For standalone development:
python3.12 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/pytest -q- Evidence before abstraction.
- Append history; do not silently rewrite it.
- Preserve provenance through every derived layer.
- Distinguish fact, decision, interpretation, and hypothesis.
- Keep local files readable without AITP.
- Make indexes disposable and rebuildable.
- Require explicit human gates for publication and sharing.
- Add complexity only after a real research workflow demonstrates the need.
- not a transcript archive;
- not a vector database presented as memory;
- not an autonomous scientific authority;
- not a general-purpose team permissions or synchronization platform;
- not a replacement for Git, notebooks, papers, or human review;
- not a reason to record every conversational detail.
AITP succeeds when it helps humans and agents think together over time while making it easier—not harder—to inspect why they believe something.