Skip to content

Roadmap: Friction Log (adapt jilog session review) #1908

Open

Description

@salmonumbrella

The situation

AgentsView keeps every agent session, but finding the ones that went sideways still means reading them one at a time. A user correcting the agent, the same command failing across sessions, a "TODO for now" workaround: they pile up, and nobody sees the pattern.

jilog's session review (MIT, at 9e8e094) already solves this with deterministic detectors, a dated daily digest and recurrence tracking. This roadmap adapts it into AgentsView as the Friction Log. jilog's detectors, thresholds, digest format and tests are the behavioral spec. Where AgentsView already computes the same thing (tool failures, retries, runaway loops, compaction and context pressure in internal/signals), the existing signals are reused. Provenance and the license notice live in docs/internal/jilog-adaptation.md.

The finished feature: per-session findings for corrections, tool errors, workarounds, deferrals, health patterns, frustration and interruptions; P0 alerts when one tool fails across sessions; one Markdown and JSON digest per completed day; recurrence across days; reads from the CLI, API, MCP and a web page. Optionally, the hub (the instance holding the aggregated archive) files each recurring pattern to a Kata instance once, links back to the session, and reopens the issue if a done pattern returns.

What works today, and why it is not enough

Since 0.46.0 you can turn on review and AgentsView records findings:

[friction]
enabled = true

After each sync the daemon reviews changed sessions in the background and stores their findings in SQLite. A PostgreSQL push reviews anything still waiting and sends the findings to the mirror, and hosted raw sync reviews sessions as it projects them. Review is off by default, and sessions over 2,000 rows or 4 MiB of stored text are marked skipped. See Friction Log configuration.

That's all a user gets so far. The findings sit in the archive with nothing to read them: no daily digest, no CLI, API or MCP reads, no page, and no Kata filing. The digest renderer is on main, but no production path calls it yet.

Roadmap-Friction-Log-adapt-jilog-session-review.mp4

Ask

Land the rest of the Friction Log as small reviewable PRs. Rebuild findings reads (#1936) and rebase the independent Kata client (#1925) on main first. Dated digests (#1935) remain maintainer-owned. A separate follow-up, part 6b, will add digest/pattern reads and manual builds after #1935 and #1936, restoring spend and timezone output. Filing, the page, recurrence, summary and personas follow their prerequisites. Keep dependent integrations local until their parents merge, and publish at most two rebuilt PRs ahead of the merge front.

Shipped

Part PR Merged Release
1 [JOI-1/15] feat(friction): port jilog session review detectors #1924 2026-09-26 0.45.0, groundwork with no user-facing change
2 feat(signals): expose friction spans and session input adapter #1932 2026-09-29 0.45.0, groundwork
fix fix(friction): require corrective wording for coding corrections #2126 2026-10-06 0.45.0
3 feat(friction): record opt-in Friction Log findings after sync #1933, first titled "persist friction findings" 2026-10-15 0.46.0
4 feat(friction): render daily review digests #1934, first titled "add digest renderer and goldens" 2026-10-16 0.46.0, renderer not called yet

Nothing friction-related is merged but unreleased.

Parts 3 and 4 changed in review, and the remaining parts have to follow them:

  • Review is opt-in and runs after sync, never during it. Sync costs the same as before with review on or off.
  • The session dimensions table was dropped because nothing produced it.
  • The renderer draws only what main can feed. Spend tables, personas, timezone handling, issue links and recurrence costs were cut; each comes back with the part that supplies its data.
  • The detector rules version stays at friction-v1.

Open

Part PR Depends on State
5 feat(friction): build dated digests and catch up #1935 3 and 4 (merged) In maintainer review and rebuilt on merged 3 and 4, last pushed 2026-10-20. Still has one review-bot finding on a test fixture, a failing sibling-pins check, and a conflict with main.
9 [JOI-9/15] feat(kata): add Kata spoke client and status #1925 main Local port and connection-lifecycle/concurrent-probe fixes passed text-only re-review. Runtime verification held; remote branch unchanged and conflicting.
6 [JOI-6/15] feat(server): add Friction Log API, CLI and MCP #1936 main for findings reads Findings API/CLI/MCP source and signed-reader/MCP assertion fixes passed text-only re-review. Runtime verification held; remote branch unchanged. Digest/pattern/run surfaces move to new part 6b.
7 [JOI-7/15] feat(frontend): add Friction Log page #1937 new 6b Page source and focused kind-filter fix passed text-only review. Screenshots/runtime gates held; remote branch unchanged.
8 [JOI-8/15] feat(insight): add optional Friction Log summary #1938 7 Replacement source for saved-summary selection and progress localization passed focused text-only re-review. All runtime gates held; remote branch unchanged.
10 [JOI-10/15] feat(friction): file patterns to Kata #1940 new 6b and #1925 All four filing source findings, including due-row input isolation, passed focused text-only re-review. Exact corrected parent supplied to dependent source work; runtime gates held and remote branch unchanged.
11 [JOI-11/15] feat(friction): reopen recurring Kata issues and show cost #1941 10 Recurrence and precise frozen-cost replacement, including finalization/render revision and retry-clock corrections, passed focused text-only re-review. Runtime gates held; remote branch unchanged.
10b [JOI-10b] feat(frontend): add Kata actions to Friction Log #1966 7 and 10 Page-action replacement and both source corrections passed focused text-only re-review, including the authoritative linkage reread and browser assertion. Runtime and media gates held; remote branch unchanged.
19 [JOI-19] feat(friction): opt-in NanoClaw personas and seats #1965 new 6b Persona/seat replacement and all four source fixes passed focused text-only re-review. Includes storage, replication and renderer restoration; six added regression drafts and all runtime gates remain unrun.

New part 6b (no PR yet) has a frozen replacement addressing three source-review findings (MCP summary schema, rerender 204 handling and hosted public checksum consistency), with focused text-only re-review clean, with its prerequisite integration of #1935 and #1936 recorded separately from its own read and build changes. It depends on both parents. Generation and runtime verification remain held. It owns digest/pattern reads, rerender, the manual build route and CLI, spend/timezone restoration, and the digest-date filter on findings.

Local source preparation, PR body drafts and text-only reviews are complete across the rebuilt slices. Executable verification, generation, Roborev, commits, publication and monitor startup remain blocked by the host-budget hold. Existing remote branches have not been replaced.

The event ledger lane (parts 12 to 17a: #1942, #1945, #1946, #1959, #1960, #1961, #1964) is tracked in #1909. #1961 records digest activity and needs new part 6b plus #1959. #1964 records filing events and needs #1961 plus #1941; its filing-event source is frozen on their reviewed replacements and root packet integrity is clean. The identity-provenance and startup corrections passed focused text-only review, followed by the first-adoption migration and catalog-query assertion corrections. Filing-event source review is complete with no remaining actionable finding. Runtime gates remain held.

Closed

  • [JOI-7a] docs: add Friction Log screenshots #1939 closed unmerged on 2026-10-23 when its generated-assets target branch was refreshed. The page isn't on main yet, so the screenshots come back with part 7.
  • feat(friction): add daily Friction Log with Kata filing #2103 was the whole series as one 63k-line PR. It closed on 2026-10-18 in favor of the slices above.

Remaining additions

  • Filing a finding to Kata before its day has a digest. Source is frozen on the reviewed filing parent plus latest main, with current-row admission, pinned retry payload and API16 routing drafted. Accepted-request preview and cold corrupt-payload corrections passed focused text-only re-review with no new actionable finding. Runtime and generation gates held. Only the closed feat(friction): add daily Friction Log with Kata filing #2103 had it.
  • Screenshots of the page, summary and Kata actions, once part 7 is on main.

What comes next

Prepare #1936 and #1925 on main while the maintainer handles #1935. Once #1935 and #1936 land, part 6b enables #1940 (also needs #1925), #1937 and #1965. #1941 follows #1940; #1938 follows #1937; #1966 needs #1937 and #1940. Finding-before-digest filing follows #1940. Refresh each dependent branch against main after its parents merge, so the published diff holds only its own part. Verification and publication remain held pending host budget.

Friction Log page with synthetic example sessions, from the part 7 branch

The part 7 page, with synthetic example sessions. It isn't on main yet.

Design constraints

  • Findings are deterministic heuristics computed from stored session data, and are labeled as such. A model never decides a finding, a score or an issue.
  • SQLite and PostgreSQL parity for every read and write. DuckDB and ClickHouse get read-only stubs.
  • Additive migrations only. Derived findings follow the secret_findings pattern. Review state survives resync like insights.
  • A digest is built once per completed day: local time on SQLite, UTC on PostgreSQL unless configured. Nothing depends on time-of-day scheduling.
  • Friction Log is opt-in with [friction] enabled = true. It is deterministic and local, and assumes no particular fleet, worker or pool setup.
  • Each part renders or stores only what main can already feed; a later part brings its data and its section together.
  • Kata filing is off until a Kata hub is configured. Only the AgentsView hub files. Pushing laptops never do.
  • When Kata is unreachable, reviews, digests and the UI are unaffected.

Activity

  1. wesm commented on Oct 27, 2026

    @wesm
    Member

    Status of the remaining Friction Log work

    JOI 1–5 are merged. The read side of the Friction Log is now rebuilt on current main as a five-part stack:

    1. feat(server): read Friction Log digests, findings and patterns over HTTP #2482: read digests, findings, and patterns over HTTP
    2. feat(cli): read and build the Friction Log from the CLI and MCP #2483: CLI commands and MCP tools
    3. feat(frontend): add the Friction Log page #2484: Friction Log page
    4. feat(insight): add an optional model-written Friction Log summary #2485: optional model-written digest summary
    5. feat(kata): add an optional Kata connection and status check #2486: Kata connection and status check

    These replace #1936, #1937, #1938, and #1925, which are now closed.

    Deferred

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions