Skip to content

v0.7.0

Choose a tag to compare

@poggufanz poggufanz released this 20 Aug 08:39
· 74 commits to main since this release
a315bfc

0.7.0 — 20 August 2026

Release: v0.7.0

A minor release: Rocky now remembers why, not just what and how. Two new evidence kinds, rationale and alias, join the schema envelope documented in docs/schema.md. Stated-rationale evidence arrives through four lanes ranked by fidelity — log-thinking from bounded log adapters (Claude Code session transcripts, and DSH session logs where the runtime has zstd), log-response as Claude Code's own fallback when a turn has no thinking block (DSH never emits this lane), notify from any agent that calls the generic hook endpoint with --rationale, and human from rocky why --add. A deterministic concept lexicon and matcher build a derived, never-persisted concept index over existing memory, surfaced through rocky concepts, rocky concept <id>, and rocky concept alias. rocky sessions and rocky repl read that same memory as derived work sessions and a single interactive loop, so recall/what/why/how/concepts stop paying a fresh process start per call. A new PreToolUse gate, dispatched through rocky hook gate-event claude-code and installed by default from rocky setup --agent-hooks, nudges an editing agent to state a rationale once per session per file before an edit, then fails open; it never blocks twice for the same file, and it can be turned off at install with --no-rationale-gate or at runtime with ROCKY_RATIONALE_GATE=off. Codex has no deny hook, so it reaches the notify lane only. Alongside the new capture surfaces, resolution phrasing across run, watch, recall, and brief was corrected: Rocky no longer claims "I remember the fix" or offers a circular "you fix with: <the same command that just failed>" — a resolution line now says only that some later command succeeded and that the fix method itself was not heard.

Added

  • rationale and alias evidence kinds. rationale carries cwd, agent, rationale_fidelity (raw|summary|none), source (log-thinking|log-response|notify|human), excerpt, and optional links back to a triple/fix/failure; alias carries alias, concept, action (add|retract). Both are append-only, bounded, and redact secrets the same way triples do. Reclaim tombstones now unlink and sweep leftovers after a successful write instead of leaving orphaned lock artifacts behind.
  • Deterministic concept lexicon and matcher (rocky concepts, rocky concept <id>, rocky concept alias). A fixed lexicon and bounded phrase matcher fold memory into a derived concept index at read time — counts, active aliases, and newest-first evidence per concept. Nothing here is written back into evidence; the index is a replaceable view, matching the schema's derived-data rule. Alias matching and phrase length are bounded; malformed alias arguments and incomplete memory coverage are disclosed, not silently dropped.
  • Bounded JSONL log scanner with adapter offsets, and a Claude Code transcript adapter. src/agent/logs/scan.ts reads a vendor session log from a stored byte offset, capped per read, and restarts cleanly from zero when a log has been truncated since the last scan. src/agent/logs/claude-code.ts reads Claude Code's own transcript for thinking and reply lanes; a robust discovery probe compares cwd rather than trusting a path a vendor could have moved.
  • DSH session log adapter, feature-detected (src/agent/logs/dsh.ts). Reads ~/.dsh/sessions/<project>/<session>/session.jsonl.zstd when the runtime Node ships built-in zstd (Node 22.15+); on an older Node the adapter reports zero discovered logs instead of failing. Decompression runs under a dedicated budget with a tolerant header and a file-descriptor-stable size cap.
  • Rationale capture pipeline with conservative correlation. New evidence only links to a triple, fix, or failure when the correlation is structurally sound; a merely plausible time-window match is treated as no link rather than a guessed one. Adapter failures are isolated per adapter and never abort the rest of the capture pass.
  • rocky why --add "<text>" and per-record source labels. Lets you teach Rocky your own stated rationale for a file directly, recorded as agent: "human", source: "human", rationale_fidelity: "summary". rocky why now shows each rationale's source (you said / agent said / log-derived) and id alongside its age.
  • Generic agent notify endpoint (rocky hook agent-event generic --rationale "<text>" [--files a.ts,b.ts]). Any agent, without a vendor-specific log adapter, can hand Rocky one line of stated rationale directly; claude-code and codex gained the same --rationale/--files flags on their existing endpoints. The notify write path is decoupled from vendor payload parsing, so a malformed vendor argument never blocks a plain rationale notification.
  • PreToolUse rationale gate (rocky hook gate-event <vendor>). A small, generic check registry reads one hook payload from stdin against bounded per-session state under ~/.rocky/gate-state/, and always exits 0. The one shipped check denies once per session per file when no rationale evidence exists yet for that file, then fails open for later touches of the same file — deny-once, evidence-shaped enforcement, not a hard block. rocky setup --agent-hooks installs it by default; --no-rationale-gate at install and ROCKY_RATIONALE_GATE=off at runtime both opt out. An unrecognized vendor or tool, or a gate-state directory Rocky cannot write to, allows outright rather than blocking.
  • rocky sessions [n] and rocky sessions <index>. Lists work sessions derived from memory at read time, grouped by directory and split on a 30-minute gap, newest-first; interpolated evidence fields shown in the detail view are bounded.
  • rocky repl [--ai]. One deterministic loop over the existing recall/what/why/how/concepts/sessions commands, so an interactive session stops paying a fresh process start per lookup. --ai passes through only to recall/what, matching their own opt-in AI behavior; quote-aware tokenizing keeps multi-word arguments intact.
  • rocky brief gained repeated-concept and rationale lines, and rocky stats gained rationale/alias counts. Brief now surfaces concepts that recur across the window and ranks which rationale to show by fidelity. rocky stats reports rationale counts by fidelity (raw/summary/none) and a remembered-alias count; both stay CLI-only — the MCP stats tool's projection deliberately omits rationaleByFidelity and byKind for now.

Changed

  • Resolution phrasing across run, watch, recall, and brief no longer overclaims. Rocky confirms only that some later command succeeded for the same reliable identity; he no longer says he remembers the fix, and no longer echoes the failed command back as if it were the fix itself. The mechanism behind a fix stays the agent's own unread history unless a rationale record says otherwise.

Not in this release

  • Codex and Gemini log adapters remain deferred. Codex's local session-log format has drifted to a SQLite hybrid since this project last checked it, and Gemini persists no thoughts to read — neither has a log-thinking lane; both still reach Rocky only through the universal notify lane.
  • BYOK annotation, attest, and the memory circuit breaker remain deferred, unchanged from 0.6.0.