@tryinget/pi-autoresearch
v0.4.1
Published
Pi extension package for the governed pi-autoresearch bounded experiment runtime.
Maintainers
Readme
summary: "Overview and quickstart for monorepo package @tryinget/pi-autoresearch." read_when:
- "Starting work in this package workspace."
- "Looking for the current pi-autoresearch package surface and boundary." system4d: container: "Monorepo package for the governed pi-autoresearch experiment-loop capability." compass: "Keep the operator affordance obvious while preserving explicit boundaries to Prompt Vault, AK, and ontology." engine: "Scaffold the package shell -> land the bounded runtime kernel -> bind upstream control planes later." fog: "The main risk is recreating the upstream monolith before the package seams are explicit and tested."
@tryinget/pi-autoresearch
Monorepo package for the governed pi-autoresearch capability in Pi.
- Workspace path:
packages/pi-autoresearch - Release component key:
pi-autoresearch - Extension entry:
extensions/pi-autoresearch.ts - Current phase:
supervised_dogfood_internal_alpha - Vision / end-state anchor: docs/project/vision.md
- Product posture anchor: docs/project/product-posture.md
- Canonical dogfood playbook: docs/project/dogfood-playbook.md
- Benchmark matrix runbook: docs/project/benchmark-matrix-runbook.md
Why this package exists
This package is the local runtime home for the future pi-autoresearch experiment loop described in:
- pi-autoresearch RFC
- pi-autoresearch foundation status
- pi-autoresearch architecture correction
- pi-autoresearch runtime machine and event-ledger status
- Prompt Vault template set
- Prompt Vault rollout
- Ontology concept set
The package started as a small shell and still preserves the recognizable /autoresearch operator surface while avoiding a premature re-import of the upstream monolith.
The current boundary is now more specific: the package is the runtime owner for the executable experiment-loop machine, while AK and Prompt Vault remain separate durable-truth owners.
The long-term destination is captured in docs/project/vision.md: autonomous in execution, governed in authority.
Current public surface
Command
/autoresearch- may also be launched through the package-owned extension-originated
pi.sendUserMessagebridge for the exact ASC self-evolution campaign-start prompt; this bridge executes the package-owned plan-only campaign-start front door directly and opens the result editor; it is not a general slash-command parser - with no objective, opens/reports the bounded runtime overview
- with
dashboard, opens a read-only operator dashboard in the editor with current posture, metric contract, candidate decision summary, candidate policy, and next legal surfaces - with
nextorcandidate next, first surfaces open matrix candidate-review posture when packet inventory is waiting for owner review; otherwise inspects current candidate posture and prepares the recommended reviewable next call: bind when no candidate exists, plan keep/discard/rewind when evidence points there, or the next runtime/finalize call when more samples/rebaseline/finalize is needed - with
bindorbind current, prepares a reviewableautoresearch_candidate_bind({ ... })call to inspect a candidate worktree and prepare the exact measurement run call - with
measureormeasure current, inspects the candidate worktree and prepares the exact reviewableautoresearch_runtime_run({ ...candidate metadata... })measurement call only when candidate intake readiness isready; otherwise it falls back to theautoresearch_candidate_bind({ ... })intake review call - with
candidate,decision,keep,discard, orrewind, prepares a reviewableautoresearch_candidate_decision({ ... })call for status or plan-only lifecycle decisions - with
open candidates, opens a read-only open candidate-review posture summary with counts, sample cell inventory, explicit discovered candidate-result packet paths, the exact owner-review call seeded with those paths, and the post-fan-in finalizer/token-request handoff for candidates found useful; this does not keep/discard/finalize, merge/reset worktrees, or write evidence - with
integrate candidates, opens a read-only useful-candidate integration handoff: first run owner review over explicit candidate-result packet paths, then request thepost_fanin_finalizer/finalize_post_fanintoken for selected useful lanes; it does not apply patches, merge, promote, cleanup worktrees, or write evidence - with
revieworreview keep|discard|rewind, opens the final owner decision surface after measured packet inventory is complete; it shows a read-only candidate-decision overlay selector before the editor checklist when TUI overlays are available, and falls back to the editor otherwise - with
learning,learning export, orlearning handoff, prepares the exactautoresearch_runtime_status({ action: "learning_export" })call for review so the returned packet path can be handed to the owner-routed KES adapter - with
overlayorfullscreen, opens a read-only live TUI dashboard overlay with periodic refresh and recent-run table - with
export, writes.autoresearch/autoresearch-dashboard.htmlas measured packet inventory inspection (candidate-result packets, selected lanes, open candidate-review cells, exported counts, andexport_visibility_blockersbefore owner review), opens it in the browser when possible, and refreshes the file every ~2s for the current Pi session;export offstops the refresher - with
widget on|off, shows or hides the persistent above-editor status widget for the current session; the widget labels candidate runs, final kept runs, andchecks-failedreceipts separately so historical failed checks are not confused with promotion/finalization state - with
run|loop|go|start <objective>, executes the first bounded foreground autoresearch campaign directly (runMode: "bounded_loop", three-iteration/default 30-minute budget, peer lane planned only) so the operator can give one explicit start instruction and step away until budget/gates stop it - with any other objective, prepares a reviewable
autoresearch_campaign_start({ ... })tool call in the editor - keeps durable authority explicit: direct first-entrypoint runs stay bounded/local and still do not secretly spawn peers, commit, merge/delete worktrees, write AK/KES evidence, or promote candidates
- may also be launched through the package-owned extension-originated
$$ autoresearch <objective>/$$ ar <objective>through the declared@tryinget/pi-trigger-adapterpackage seam- registers the picker lazily through the lightweight adapter; it does not probe the heavier
@tryinget/pi-interactionumbrella package - opens the picker for plan-only, governed setup plan, baseline, or bounded-loop campaign-start modes when the shared pi-interaction input runtime is active
- replaces the editor text with the exact
autoresearch_campaign_start({ ... })call selected by the operator - degrades to the deterministic input fallback if picker registration cannot initialize, while validation treats a missing required adapter link as install drift
- registers the picker lazily through the lightweight adapter; it does not probe the heavier
$$ autoresearch next/$$ ar next- deterministically inserts open candidate-review posture with explicit candidate-result packet paths and a finalizer handoff when matrix packet inventory is waiting; otherwise inserts the recommended next candidate call using the same read-only candidate-decision posture as the dashboard
- remains review-first; no benchmark, worktree command, or durable promotion is executed automatically
$$ autoresearch integrate candidates/$$ ar integrate candidates- deterministically inserts the useful-candidate integration handoff with explicit review and post-fan-in finalizer calls
- remains token-gated; no patch application, merge, cleanup, evidence write, or promotion is executed automatically
$$ autoresearch bind|measure [current|<worktree>]/$$ ar bind|measure [current|<worktree>]- when the shared pi-interaction input runtime is active, opens a candidate-bind/measure picker that inserts either the exact
autoresearch_candidate_bind({ ... })inspection call or the exactautoresearch_runtime_run({ ...candidate metadata... })measurement call selected by the operator - also has a deterministic input fallback so candidate intake/measurement does not get mistaken for a campaign objective
- remains review-first; the bind path is read-only/plan-only, and the measure path only prepares the run call for review rather than executing it automatically when intake readiness is
ready
- when the shared pi-interaction input runtime is active, opens a candidate-bind/measure picker that inserts either the exact
$$ autoresearch candidate/$$ ar candidateand$$ autoresearch keep|discard|rewind- when the shared pi-interaction input runtime is active, opens a candidate-decision picker for status, keep, discard, or rewind planning
- decorates direct and currently recommended choices when runtime receipts make that possible
- replaces the editor text with the exact
autoresearch_candidate_decision({ ... })call selected by the operator - also has a deterministic input fallback so non-slash
$$ autoresearch ...is not captured by PTX's$$ /templatenamespace - remains read-only/plan-only; no worktree command or durable promotion is applied by the picker/fallback
Tools
autoresearch_campaign_start- is the supervised campaign front door from one bounded optimization objective
- composes existing autoplan/setup/loop surfaces instead of inventing a second runtime
- supports
runMode: "plan_only" | "baseline" | "bounded_loop" - supports
setupMode: "autoplan" | "prompt_vault_setup"; governed setup uses the package-owned Prompt Vault decision runner and typed parser - reports campaign name, metric contract, scope, candidate lifecycle policy, warnings/gates, current machine state, and the next exact tool call
- supports a policy-only
candidatePolicyfor worktree-based keep/discard/rewind choices; default keep preserves the branch, default discard suggests cleanup after receipt review, and default rewind resets the candidate worktree to base - keeps Replay Fabric as observer/history/recovery-clue projection and ASC rewind as live Pi/session recovery; neither becomes the candidate accept/discard executor
- does not auto-spawn peers, commit, merge/delete worktrees, write AK/KES/evidence, or perform durable promotion
autoresearch_candidate_bind- is the read-only / plan-only candidate intake planner
- inspects a controller-verified candidate worktree/path, detects git worktree status, same-repository posture, branch/ref, HEAD, optional or inferred base-ref resolution, changed files, and a diff summary
- infers a conservative base ref from
merge-base(HEAD, upstream|main|master)whencandidateBaseRefis omitted, while warning the operator to verify before destructive rewind planning - prepares the exact
autoresearch_runtime_run({ ... candidateWorktree, candidateBranch, candidateBaseRef, candidateDiffSummary, candidateFilesChanged ... })call needed to bind and measure the candidate - reports intake readiness as
ready,needs_review, orblocked, with reasons when the candidate is on trunk, shares the controller cwd, lacks a resolved base, has no detected files, is broad, or is not a usable worktree - defaults
candidateWorktreetocwdso/autoresearch bind currentsupports the common current-worktree handoff - slash and dollar bind shortcuts omit placeholder base refs so the planner can infer a reviewable base instead of treating
"<base-ref>"as literal input - surfaces read-only git preflight commands and warnings when the worktree or base ref is missing
- does not run benchmarks, merge, delete/reset worktrees, spawn peers, write AK/KES/evidence, or promote
autoresearch_candidate_decision- is the read-only / plan-only candidate lifecycle decision workbench
- supports
action: "status" | "plan_keep" | "plan_discard" | "plan_rewind" - consumes current runtime status, segment closeout, and candidate-result evidence to summarize candidate source, worktree, branch/ref/base, changed files, and diff summary when bound
- when
autoresearch_runtime_runreceives a real existingcandidateWorktree, benchmark and checks commands execute from that candidate worktree while receipts remain in the controller cwd - reports empirical posture, promotion readiness, confidence/noise interpretation, checks status, baseline-drift risk, and live candidate artifact posture before suggesting a lifecycle decision
- recommends keep, discard, rewind, rebaseline, collect more samples, re-bind/re-measure a stale visible candidate artifact, finalize, or no candidate bound yet
- returns exact next tool calls and plan-only git commands such as
git -C <worktree> reset --hard <baseRef>without applying them - keeps worktree lifecycle as the candidate primitive; Replay Fabric remains observer/history/recovery-clue only, ASC rewind remains live Pi/session recovery only, and durable promotion remains external
- refuses to turn receipt-only visible candidate-peer evidence into keep/finalize guidance when the referenced candidate worktree and branch are gone; it surfaces
rebind_candidateinstead so stale packets are not mistaken for live promotion material - does not merge, delete worktrees, reset worktrees, spawn peers, write AK/KES/evidence, or promote
autoresearch_runtime_status- returns the current bounded-runtime status
- supports
action: "dashboard"for a compact read-only operator dashboard that is easier to scan than the full diagnostic status and now includes the same candidate decision summary/next legal surface plus a unified Authority handoff section for closeout,ak_evidence/suggestedevidence_record(...),learning_export-> owner-routed KES adapter, andoracle_evidence_export-> DSPx owner preflight calls - can build a package-local segment closeout packet (
action: "closeout", packet kindautoresearch.closeout.v1) summarizing runs, hypotheses, candidate bindings, empirical decision, timing interpretation, recommended action, Oracle-ready evidence readiness, and the adapter/evidence boundary before external promotion - can build a non-mutating Oracle-ready evidence packet (
action: "oracle_evidence", packet kindautoresearch.oracle_evidence.v1) and locally export it for DSPx owner preflight (action: "oracle_evidence_export", default.autoresearch/oracle_evidence.json) with run-level empirical records; export is an explicit local write unavailable in read profile, constrained undercwd/.autoresearch/, and overwrite-gated; it does not write Oracle Postgres, migrate localcoordinates.db, write AK/KES, choose winners, or promote - can build a non-mutating exact-task AK evidence packet (
action: "ak_evidence",akTaskId, packet kindautoresearch.ak_evidence.v1) with a suggested explicitevidence_record(...)controller call; it does not mutate AK itself - can build an adapter-ready learning/KMS packet (
action: "learning", packet kindautoresearch.learning.v1) and locally export that packet for owner-routed KES/notes handoff (action: "learning_export", default.autoresearch/learning.json); export is an explicit local write unavailable in read profile, constrained undercwd/.autoresearch/, and overwrite-gated; it does not write AK/KES, external authority, or promotion state - can build a candidate-result packet (
action: "candidate_result", packet kindautoresearch.candidate_result.v1) and locally export it for owner-visible candidate-wave review (action: "candidate_result_export", default.autoresearch/candidate-result.json); exports under.autoresearch/candidate-wave/include a default-discovery aggregatereview_candidate_wavecall seed, while explicit packet paths remain available when planned-but-missing lanes should appear asmissing_packet; export is an explicit local write unavailable in read profile, constrained undercwd/.autoresearch/, and overwrite-gated, and it does not mutate candidate lifecycle, worktrees, AK/KES/evidence, or promotion state. Matrix dashboard/export discovery now surfaces an explicit open candidate-review posture so packet counts are visible as review inventory rather than live keep/finalize authority. The runtime also has a production cleanup surface (action: "candidate_inventory_cleanup_plan"thenaction: "candidate_inventory_cleanup_apply"withoperatorConfirmation: "ARCHIVE STALE AUTORESEARCH CANDIDATES") that archives both root runtime receipts and matrix/candidate packet projections under a fresh safe-slug.autoresearch/closed-candidates/<label>/archive so status widgets do not keep advertising closed candidates; plan mode shows the exact would-archive and missing paths, apply refuses unsafe labels or existing archive labels, writes a preflight manifest before moves, archives local projections only, and does not merge, promote, delete external worktrees, remove branches, or write AK/KES/evidence. In orchestrator-supervised matrix campaigns,pi-society-orchestratormay hand the controller a post-checkpointautoresearch.matrix_cell_controller_command_packet.v1that spells out the exact bind -> metric run -> candidate-result export -> wave review -> matrix review sequence and anautoresearch.matrix_campaign_cockpit.v1dashboard summary withmatrix_cockpit_blockerstarget0;pi-autoresearchstill owns the run/export calls, receipts, dashboards, and candidate-result packets, and neither packet is hidden execution or promotion authority. - can list the current adapter contract catalog (
action: "adapter_contracts", packet kindautoresearch.adapter_contracts.v1) so downstream extensions can discover supported packet kinds without scraping docs - can structurally validate adapter packets (
action: "validate_packet", packet kindautoresearch.adapter_validation.v1) before a target adapter plans or applies an external write - documents the adapter contract in
docs/project/adapter-contracts.mdso AK, Beads, KES, notes, issue trackers, or custom KMS integrations can be implemented as separate Pi extensions consuming stable packet shapes - surfaces receipt summaries, machine projection, event-ledger state, current one-shot Prompt Vault alignment, the current llama.cpp manifest-campaign projection state when one has been projected locally, a top-level empirical posture sentence with promotion readiness and recommended next action, and visible peer-lane recommendations for optional
scout_peer_spawn/candidate_peer_spawnuse without auto-spawning peers
autoresearch_runtime_autoplan- explores the local repo/problem space from a bounded objective and proposes campaign setup: name, metric, optional explicit
metricThreshold, direction, benchmark command, checks command, scope, risks, and exact next tool call - surfaces an explicit measurement contract for metric freshness, causal linkage, and optimization authority before any proposed setup call
- avoids inferred duplicate benchmark/check execution when package scripts or generated
autoresearch.shwrappers resolve to the same command, while warning if an operator explicitly asks to run equivalent gates twice - reports noise-aware timing interpretation for duration metrics so one-off lower timings are not mistaken for meaningful improvements
- reports an explicit empirical decision class (
baseline,insufficient_samples,possible_noise,calibration_signal,candidate_improvement,candidate_regression, and related invalid/check states) plus an operator-facing empirical posture classification (calibration_only,baseline_drift_suspected,candidate_review_ready, and related states) so run status is not mistaken for result meaning or promotion readiness - supports calibration runs that update timing/noise interpretation without competing as candidate improvements; calibration-only faster samples are surfaced as
calibration_signal, not candidate wins - when a generic benchmark command such as
npm testwould not emitMETRIC <name>=<value>, proposes a conservative localautoresearch.shscript only when its measurement contract is fresh, causal to the current run, and allowed to drive optimization - supports
planner: "dspx_program"to return or materialize a local DSPx-generated DSPy planner assembly for anAutoresearchSetupPlannercandidate while keeping Pi as the outer controller - when DSPx
behavior_results.jsonexists, reads it as setup input; static behavior evidence remains advisory unless a bounded campaign-start path explicitly runs DSPx program-gen in the current call and validates the generated DSPy planner output
- explores the local repo/problem space from a bounded objective and proposes campaign setup: name, metric, optional explicit
autoresearch_campaign_start- can run bounded local DSPx
program-genwithplanner: "dspx_program",runDspxProgramGen: true, and optionaldspxProgramGenTimeoutSeconds, then use the generated DSPy planner output inbehavior_results.jsonas the campaign setup plan before baseline/bounded-loop execution - still keeps Pi / pi-autoresearch as the outer controller: DSPx materializes and runs the DSPy planner, while pi-autoresearch validates the generated campaign-plan output and owns setup application, receipts, bounded runs, peer gates, and stop conditions
- can run bounded local DSPx
autoresearch_runtime_setup- plans, applies, or baselines a campaign/segment config, including optional explicit
metricThresholdtargets for threshold-style success, without requiring a human slash-command wizard - can append a config receipt without running, or bootstrap a baseline run through the same bounded run machinery
- can write explicit
autoresearch.sh/autoresearch.checks.shcontent when requested and refuses to overwrite existing scripts unless allowed
- plans, applies, or baselines a campaign/segment config, including optional explicit
autoresearch_runtime_run- executes one bounded local benchmark/check run
- can bind optional hypothesis/result lineage (
hypothesisId,hypothesis,interventionSummary,expectedPrimaryEffect,hypothesisTargetFiles,experimentRisk) into the run receipt so later evidence export can say what was tested and why - can bind controller-verified visible candidate lane metadata (
candidateSource,candidateWorktree,candidateBranch,candidateBaseRef,candidateDiffSummary,candidateFilesChanged) without spawning, merging, or promoting the candidate - records an empirical decision class on new run receipts so downstream closeout/evidence steps can distinguish operational status from measured meaning
- bootstraps config receipts when needed
- appends config/run receipts to
autoresearch.jsonl - appends machine/event entries to
autoresearch.events.jsonl - can enforce an optional posture command before benchmark execution and fails closed when the posture requires reconciliation
- reports optional peer-lane recommendations after the run: scout peers for failed or ambiguous results, candidate peers for isolated patch exploration, and fork peers only when inherited context is intentional
autoresearch_runtime_peer_assist- plans one canonical visible peer lane without launching it
- emits exact
scout_peer_spawn,candidate_peer_spawn, orfork_peer_spawncalls using the cleaned visible-peer tool surface - preserves the evidence boundary: peer/intercom output remains communication until controller verification
autoresearch_runtime_loop- executes a bounded in-call loop over
autoresearch_runtime_runsemantics - requires
maxIterationsand can also enforce a wall-clock budget - can request governed Prompt Vault next-hypothesis decisions between runs
- keeps a persistent above-editor status widget current while the session is active unless
PI_AUTORESEARCH_WIDGET=0is set or/autoresearch widget offis used - streams in-call live progress cards for loop start, iteration start/complete, stop, and completion phases; each update also carries the current dashboard snapshot in tool-update details
- returns the final read-only dashboard after the run summary, so an operator can start a bounded run, step away, and come back to the final posture without scraping receipts
- supports explicit
peerModevalues:off,plan,launch_scout,launch_candidate,launch_fork;launch_*modes return an exact canonical peer-tool handoff rather than duplicating or hiding peer-spawn machinery - stops on explicit budget, control, machine, posture, or governed-decision gates rather than becoming a hidden daemon
- executes a bounded in-call loop over
autoresearch_self_hosting_run- is the bounded public supervised self-hosting seam for
packages/pi-autoresearchitself - can inspect controller/candidate/evaluator state, plan or apply the candidate worktree, run one bounded controller/candidate/evaluator wave, use
action=start_and_watchfor in-call progress updates while that bounded wave runs, and optionally plan/apply explicit promotion or rollback records - stays below hidden daemonized autonomy, direct AK mutation, package-local self-promotion, and automatic controller rotation
- is the bounded public supervised self-hosting seam for
autoresearch_vllm_campaign- is the read-only campaign cockpit for workstation vLLM speed-optimization autoresearch
- defaults to
/home/tryinget/ai-society/softwareco/infra/workstation, the kasimat Qwen3.6 27B AEON FP8 MTP model path under/data/vllm/hf-cache, the RTX 6000 PRO WS hardware label, and../../contrib/blackwell-gpu-wiki - inspects workstation GPU/status probes when the repo-owned scripts are present, reads the m14 LongCoT target catalog posture, plans bounded matrix axes, emits exact
autoresearch_campaign_start(...)next calls, and can render a fresh-session handoff prompt - remains plan/read-only: it does not start/stop services, mutate lane profiles, run benchmarks, spawn peers, write AK/KES/Oracle/evidence, promote candidates, or become a hidden daemon
autoresearch_llamacpp_campaign_control- is the dedicated public consumer/control seam for one manifest-driven llama.cpp campaign
- returns current public control status for one exact checked manifest from one canonical derived snapshot
- may compose one exact-task AK-ready binding snapshot when the caller already knows the task id
- plans or applies exactly one truthful next campaign-local step without requiring raw
stage/buildIdinputs - fails closed on blocked public advance paths instead of advertising a usable next action when prerequisites are missing
- stays below direct AK mutation, whole-campaign execution, and workstation-owned stage semantics
autoresearch_llamacpp_campaign- loads a typed llama.cpp benchmark campaign manifest
- expands the exact brownfield
phasee/41-43branch/lane matrix without re-deriving it from chat prose - plans or applies fork workspace preparation for later patch transplant work under
../../fork/ - plans or applies one exact stage-scoped
41 | 42 | 43invocation against the existing workstation scripts - writes or refreshes one checked
autoresearch.llamacpp-campaign.jsonprojection artifact for bounded runtime/help use - derives one exact-task AK-ready binding snapshot through
action=build_ak_bindingwithout mutating AK directly - derives or applies exactly one truthful next campaign-local stage step through
action=advance_campaign - remains the lower-level technical manifest-helper surface below
autoresearch_llamacpp_campaign_control - does not become a whole-campaign runner or a replacement for workstation execution ownership
Runtime helpers
src/core/runtime.ts- local receipt-entry types for config and run events
- structured
METRIC name=valueparsing - bounded benchmark/check execution helpers
- runtime status/help rendering that now integrates receipt summaries with machine/ledger projection plus the current llama.cpp campaign projection state
src/core/selfHosting.ts- validated controller-owned self-hosting contract, evaluator lock, and promotion/rollback record helpers
- candidate worktree preparation, scope fencing, snapshot-owned evaluator-suite execution, typed applicability classification, and explicit promotion/rollback planning helpers
- the core package implementation behind the public
autoresearch_self_hosting_runseam
src/core/llamacppCampaign.ts- typed llama.cpp benchmark campaign manifest model
- explicit
phasee/41-43stage matrix expansion - fork workspace planning/apply helpers with fail-closed git checks
- stage-scoped execution binding for one exact
41 | 42 | 43invocation with prerequisite fencing - projection artifact derivation, persistence, and refresh logic for
autoresearch.llamacpp-campaign.json - non-mutating AK-binding snapshot + compact details derivation for exact manifest/task anchors
- campaign-local autonomy snapshot + one-step advance helper for truthful next-step selection without widening into whole-campaign execution
- dedicated public campaign-control composition helpers above the autonomy + AK-binding seams
src/core/ledger.ts- append-only event-ledger entry types and JSONL helpers
- ledger replay/projector helpers for the campaign machine
- replay validation plus receipt-history backfill support for the bounded runtime surface
src/machine/events.ts- typed campaign event model for configuration, run execution, receipt recording, decision points, blocking, and completion
src/machine/campaign.ts- minimal package-local XState campaign machine for the bounded experiment runtime
- runtime-status hydration helper for mapping the current bounded status into machine input
src/runtime.ts- compatibility re-export for the core runtime surface plus the campaign machine/event model
Local artifact contract
The bounded runtime kernel now uses the same local artifact plan the shell originally named:
autoresearch.jsonlautoresearch.llamacpp-campaign.jsonautoresearch.mdautoresearch.shautoresearch.checks.shautoresearch.ideas.md
These stay local receipts/projections, not sole campaign truth.
Prompt Vault alignment
Prompt Vault now already owns three durable one-shot control-plane templates for the capability:
pi-autoresearch-setuppi-autoresearch-next-hypothesispi-autoresearch-finalize
The earlier pi-autoresearch-state-router draft still exists as a possible later surface.
But after the architecture correction, it is no longer the main near-term blocker for truthful runtime evolution.
The package now includes a minimal internal XState campaign machine, typed event model, append-only event ledger, one bounded post-target widening surface for manifest-driven llama.cpp benchmark planning/fork preparation, one bounded follow-on surface for stage-scoped 41 | 42 | 43 execution binding, one projection-only autoresearch.llamacpp-campaign.json layer for bounded manifest campaign status/help truth, one non-mutating AK-ready manifest-campaign binding helper layer for exact manifest/task anchors, one bounded campaign-local autonomy helper layer for truthful one-step stage advancement, and one bounded public campaign-control seam above those landed helper layers.
The AK-binding slice is now landed and closed in:
- docs/project/llamacpp-campaign-ak-binding-contract.md
- docs/project/llamacpp-campaign-ak-binding-status.md
The campaign-local autonomy slice is now landed and closed in:
- docs/project/llamacpp-campaign-autonomy-contract.md
- docs/project/llamacpp-campaign-autonomy-status.md
The bounded public campaign-control slice is now landed and closed in:
- docs/project/llamacpp-campaign-control-surface-contract.md
- docs/project/llamacpp-campaign-control-surface-status.md
Interpretation rule:
- Prompt Vault owns durable decision procedures
- the package owns executable runtime state and may derive compact AK-ready snapshots, one bounded next-step autonomy view, and one bounded public campaign-control view for explicit callers
- AK still owns durable campaign truth, evidence writes, and any later task completion decision
autoresearch_llamacpp_campaign_controlis now the public consumer/control seam, whileautoresearch_llamacpp_campaignremains the lower-level technical helper surface
Bounded public campaign-control surface
The public/consumer seam for this concern is now:
- tool:
autoresearch_llamacpp_campaign_control - contract: docs/project/llamacpp-campaign-control-surface-contract.md
- status: docs/project/llamacpp-campaign-control-surface-status.md
- bounded role: current control status + one-step public advance + optional exact-task AK context, all derived from one canonical public-control snapshot per call
- current task posture: the original public seam landed through
#1699, and later hardening underdecision:17/ task#1709now makes public task context explicit and verified/unverified rather than caller-asserted by default - current task-context semantics: optional best-effort live AK verification with surfaced status; public
akBinding,taskBound, andcompletionCandidatenow appear only for verified live task context whilestatus/advancestill work package-locally when verification is unavailable - decision-attending RFC: docs/project/2026-04-18-public-ak-task-verification-rfc.md
- accepted ADR: docs/adr/2026-04-18-public-ak-task-verification-semantics.md
Current non-goals
This package does not yet implement:
- direct AK writes, fuzzy task lookup, or automatic task completion for the new llama.cpp campaign manifests
- direct execution of manifest-driven 41/42/43 campaigns end to end
- semantic interpretation of manifest-stage payloads into benchmark winners, recommendations, or completion truth
- a broader public/autonomous whole-campaign control plane beyond the bounded one-step manifest campaign-control surface
- shared higher-order session-control orchestration
- a second control plane that duplicates workstation
lane-opor the brownfield 41/42/43 scripts
The package now includes the bounded runtime's machine/event-ledger integration and peer-lane recommendation text for optional visible peer help. It still does not own peer launch: pi-little-helpers owns visible peer tools, pi-peer-messaging owns communication, peer/intercom messages are not evidence without controller verification, and autoresearch only recommends exact calls such as scout_peer_spawn(...), candidate_peer_spawn(...), or fork_peer_spawn(...). The broader control-plane and autonomy integrations still belong to later bounded slices after the bounded runtime kernel.
Use docs/project/product-posture.md as the package-level alignment anchor for product promise, maturity, trust gates, boundaries, and next product bets.
Use docs/project/dogfood-playbook.md for the canonical supervised operator flow from setup through baseline/calibration, candidate binding, empirical closeout, and explicit external evidence/learning promotion.
Use docs/project/benchmark-matrix-runbook.md when an optimization target is a surface or scenario/hypothesis sweep rather than one bounded candidate patch.
Example manifest
examples/llamacpp-wave-001.json— scaffold for the typed llama.cpp benchmark campaign surface including build-bin / receipt-root execution-binding fields
Validation
Run from this package directory:
npm install
npm run check
npm run release:check:quicknpm install materializes package-local file: dependency links. Do not hand-create node_modules symlinks; if root or package validation reports a missing local link, rerun npm install in the owning package and verify the manifest and lockfile remain unchanged.
Package boundary reminder
This package owns the local experiment runtime seam and the future executable experiment-loop machine. It does not own:
- Prompt Vault control-plane truth
- AK campaign truth
- ontology semantics
- shared higher-order session-control lifecycle
