* fix(graph): handle qualified C++ symbols Signed-off-by: trvon <me@trevon.dev> * refactor(vector)!: remove dead transition APIs Split Simeon vector and retrieval linkage so consumers inherit only the runtime surface they use. BREAKING CHANGE: remove unused async/model/config helpers and the undefined vector-backend factory from public headers. Signed-off-by: trvon <me@trevon.dev> * fix(vector): harden PQ snapshot lifecycle Validate and atomically install persisted generations, revalidate after races, and fall back to exact search when a snapshot is stale. Add the exact-scan reference lane and distinguish observed work counters from unavailable backend metrics. Signed-off-by: trvon <me@trevon.dev> * feat(topology): expose route coordinates Persist chart distortion and local-dimension evidence, retain pre-scalarization route axes, and emit detailed trace rows without treating unavailable vector work as zero. Signed-off-by: trvon <me@trevon.dev> * feat(xplan): add vector decision gates Track binary and corpus identity, preserve missing-work semantics, and add repeated PQ routing, crossover, and rerank plans with quality and cost summaries. Signed-off-by: trvon <me@trevon.dev> * feat(topology): formalize coordinate routing Separate chart geometry from route-risk admission and prove candidate-stage recall and strict-focus boundaries. Record the measured atlas limitations and literature basis for the next construction experiment. Signed-off-by: trvon <me@trevon.dev> * fix(search): serialize SymSpell readers SQLite-backed lookups reuse mutable prepared statements, so shared-reader locking is unsafe. Advance the owned SymSpell revision for batched delete insertion and cover concurrent root lookups under TSAN. Signed-off-by: trvon <me@trevon.dev> * fix(vector): make mutations atomic Preserve stored vectors on replacement and commit failures, reject cross-thread writes during explicit transactions, and restore exact reranking for quantized-primary PQ rows. * fix(search)!: surface SymSpell write errors Propagate persistent dictionary failures through metadata ingestion, roll back failed batches, and make clear remove stored terms. BREAKING CHANGE: SymSpellSearch mutations now return Result values. * feat(topology): formalize candidate expansion * feat(vector): add coordinate-aware embeddings * feat(topology): preserve protected relation cover * feat(search): add graph candidate rescue * feat(daemon): expose retrieval hydration telemetry * feat(xplan): add rescue and hydration gates * refactor(content): dedupe media handlers Reuse shared graph presenter helpers and centralize repeated audio/video/archive buffer processing, validation, lifecycle, and stats helper logic. * feat(lifecycle): prune stale corpus data Keep cleanup preview-first while retention stays opt-in and long prune work no longer holds IPC responses open. * feat(search): add topology candidate rescue Preserve high-value routed candidates across vector backends while keeping exact rerank diagnostics explicit. * feat(search): expose evidence paths * docs: define mobile host contract * formal: model bounded candidate rescue * fix(prune): inspect extensionless signatures * fix(prune): tolerate stale extensions --------- Signed-off-by: trvon <me@trevon.dev>
7.2 KiB
| description | argument-hint |
|---|---|
| Codex engineering/bug-bounty prompt with YAMS-first distributed memory | [TASK=<description>] [MODE=<engineering|bug-bounty>] [PHASE=<start|checkpoint|complete>] |
Codex Prompt (YAMS-First)
Generic operating model for Codex-style engineering and bug-bounty work with
YAMS as persistent, distributed memory. Repo specifics live in AGENTS.md —
this file owns the loop, the retrieval contract, metadata, and handoff.
Priorities
- YAMS is the source of truth for memory (code, notes, decisions, research, evidence).
- Attempt blackboard registration first when available; fall back to YAMS-only.
- Prefer small, reversible changes and durable indexing over long ephemeral reasoning.
- Search before acting, index while working, index before handoff/push.
Modes
engineering(default): implementation, debugging, refactors, tests, reviews.bug-bounty: scoped, non-destructive security research. No exfiltration, persistence, or out-of-scope testing. Redact secrets/tokens/PII before indexing.
Agent identity: opencode-<task-slug> (lowercase ASCII, dashes).
Retrieval Contract (mandatory, token-economy)
YAMS search/list/grep returns scoped snippets and candidate identifiers; those
results are discovery, not recovered memory. Hydrate the selected saved-memory
artifacts before relying on them. Local exploration re-reads whole files the
index already knows. Burning tokens on rg/Read/Glob discovery when yams
can answer is a defect. Pick by question type:
| Question | Tool (first hop) |
|---|---|
| Exact symbol / string / pattern | yams grep "<pat>" --cwd . |
| Callers / callees / includes / blast radius / related tests | yams graph --explore "<symbol-or-file>" --max-files 8 |
| Concept / prior decision / task history | yams search "<query>" --limit 10 |
| Inspect a selected saved-memory artifact | run the emitted yams cat --hash <hash> hint |
| Export a selected artifact | yams get --hash <hash> -o <path> |
| Exact implementation detail in a file yams already named | local Read |
| Unfamiliar subsystem entry point | yams graph --topology-clusters, then --cluster <id> |
| Precise edges | yams graph --name <file> --depth 1 --limit 50, --node-key <key> -r <relation> |
Rules:
- Search, list, and grep only select candidates. Before using a prior note,
decision, research item, or evidence item, hydrate the most relevant one to
three hits with
yams cat --hash <hash>. Do not claim recovered context from snippets alone. - Do not
catevery code hit. Usegraph --exploreto narrow code context, then locally read only the exact implementation detail that remains needed. - One
yams graph --explorereplaces N file reads — prefer it for any "who uses / what touches" question. Followgraph_explore_hintemitted by search/grep results before any broad local search. - Graph relation summaries are navigation signals, not proof: choose files to read next, then verify with local reads/LSP.
- Allowed exceptions (state which one applies): user gave an exact path; file was identified by YAMS retrieval; file was created/modified this turn; YAMS unavailable or insufficient (say so, then fall back).
- Treat
served - usedas weak negative signal (not_used), not rejection.
Execution Loop
- Register (if blackboard available):
bb_register_agent({ id: "opencode-<task-slug>", name: "OpenCode Agent", capabilities: ["yams", "code", "coordination"] }) - Retrieve + hydrate per the contract above before any local exploration.
- Start: check index health and store a concise claim.
Sendyams status # Only if the repo index is missing/stale; do not task-tag a healthy repo. yams add . --recursive --include "*.cpp,*.hpp,*.h,*.py,*.ts,*.js,*.md" \ --label "Repository baseline" \ --metadata "mode=$MODE,task=repo-index,phase=checkpoint,owner=opencode,source=code" yams add - --name "claim-$TASK.md" \ --metadata "mode=$MODE,task=$TASK,phase=start,owner=opencode,source=note,agent_id=opencode-$TASK"TASK,SCOPE,GOAL, andNEXTdirectly on stdin. In restricted shells, invokeyamsdirectly and use the executor's stdin channel; aprintf | yamswrapper can change command-prefix sandbox authorization. - Act: implement/test/verify in scope; keep notes concise and indexable.
For C++/systems work follow the design-first TDD loop in
AGENTS.md. - Checkpoint: index changed files and a concise
source=noterecord of decisions, open questions, and the next action. - Complete: store the completed Handoff Template as a
source=note,phase=completeartifact, then re-index changed files withphase=completemetadata.
Metadata (every yams add)
Required: task, phase (start|checkpoint|complete), owner=opencode,
source (code|note|decision|research|evidence).
Recommended: mode, agent_id, status (open|blocked|done), trace_id.
Bug-bounty: target, scope, severity, repro, impact.
Ask-First Actions
git push; deleting files (index in YAMS first); installing dependencies;
potentially destructive verification steps.
Mobile Host Contract
When the task concerns an app embedding libyams_mobile:
- Preserve the boundary: YAMS owns local corpus lifecycle, storage, and retrieval; the host owns product UI and any model/entitlement experience.
- Prefer a narrow consumer workflow—explicit import, library, search, result inspection, and confirmation-gated deletion—over exposing raw CLI/admin operations as primary UI.
- Keep a native-free lifecycle seam for deterministic tests, and separately document physical smoke steps for each required artifact/architecture.
- Never claim a device round trip without the artifact, ABI version, device/OS, architecture, and observed start/list/search/cleanup result.
- A paid feature may add value, but it must not gate access to an existing local corpus or require cloud identity/sync by default.
Session Recovery
# Select exact task memories, then hydrate the relevant artifacts.
yams list --format json --show-metadata \
--metadata "owner=opencode" --metadata "task=<task>" \
--metadata "source=note" --limit 10
yams cat --hash <selected-note-decision-research-or-evidence-hash>
# Fall back to concept/pattern discovery, then execute the emitted cat/graph hint.
yams search "<task concept or prior decision>" --limit 10
yams grep "<pattern>" --cwd .
Recovery is incomplete until selected saved-memory artifacts have been
hydrated. Record their hashes in USED_CONTEXT so the handoff is reproducible.
Change the source filter to decision, research, or evidence when that
artifact type carries the needed context.
Handoff Template
TASK: $TASK | MODE: $MODE | PHASE: $PHASE | AGENT: opencode-$TASK
CONTEXT FOUND: <blackboard findings or unavailable>; <YAMS artifact paths/hashes>
ACTIONS: <what changed / verified>
INDEXED: <what was indexed or why indexing failed> (metadata: mode,task,phase,owner,agent_id)
NEXT: <next step>
USED_CONTEXT: <chunk_ids/hashes or unknown>
CITATIONS: <artifacts or none>
Notes
- Repo-specific maps, conventions, and safety overrides live in
AGENTS.md. - Keep this file generic and operational; it is reused across repositories.