Kin / Maintainers

Internals & Maintainers

A compact map for people changing Kin. Everyday usage belongs in the task guides; this page points to the implementation contracts, verification discipline, and decision record.

Read as Markdown

A compact map for people changing Kin. Everyday usage belongs in the task guides; this page points to the implementation contracts, verification discipline, and decision record.

Start with the owning document

  • STATUS.md — a bounded, actionable view of active proofs, ranked next work, blockers, and recent landings. Git history remains the journal of record.
  • CONSTITUTION.md — the AI-peer engineering contract, governing principles, and deliberate negative space.
  • REFERENCE.md — security invariants, footguns, and postmortems, organized by symbol and topic.
  • PROTOCOL.md — the Outpost v1 wire contract; use the protocol index for navigation.
  • Tier guides: harness, TUI, and Outpost.

Maintainer paths

  • Testing — focused repair loops, the exhaustive local promotion gate, markers, fixtures, and isolation.
  • Extending tools — add a built-in tool, permission kind, event, or profile without breaking the harness seam.
  • Multi-machine setup — matched development machines and build-worktree separation.
  • Outpost operations — deployment, SSO/proxy, lifecycle, machine-door, and dashboard implementation detail.
  • Automation operations — scheduler, governor, reliability, APIs, and verification.
  • Rig operations — persistent-computer deployment, tool, and VM detail.
  • TUI snapshots and browser captures — the ten TUI and five browser guide-capture owners. See the generated-asset discipline in snapshots/README.md.

Decision records

Each row is intentionally limited to the decision title, recorded status, and one-sentence purpose. Open the record for context, rejected alternatives, consequences, and references.

Decision Status Summary
0160 — Qwen / llama.cpp bounded-thinking model route Accepted 2026-08-09 Adds an explicit route-local Qwen profile with token-budget labels, pinned llama.cpp wire mapping, Utility final-answer headroom, and structural absence for every unrelated provider.
0156 — Provider-neutral context admission and exact Responses counting Implemented 2026-08-07 Removes the unused provider-specific surface, generalizes one-shot context/body rejection recovery, and lets advertising Responses endpoints supply exact proactive admission counts.
0151 — The model’s own network-shaped shell/run_code output is framed untrusted Accepted 2026-08-01 DR 0075 framed the human’s !curl but the model’s own curl/wget/urllib output entered history unframed (a zero-approval injection vector in auto mode); shell/run_code now frame output when the command/code is network-shaped, best-effort, keeping local output clean.
0150 — run_code never joins the “always allow this session” tier Accepted 2026-08-01 run_code’s signature is the generic tool:run_code, so one “always” auto-ALLOWed arbitrary Python for the session; approval_reusable → False (the force-push precedent) makes the modal once/deny only, with interpreter head grants recorded as a named non-goal.
0149 — Protected-write footholds are denied at the sandbox, not just the EDIT gate Accepted 2026-08-01 A sandboxed auto-mode shell could silently rewrite .envrc/.mcp.json/.kin config where the EDIT tools ASK; both sandbox backends now write-deny the foothold/harness-config files (keeping reads), deliberately excluding lockfiles (whose sandboxed-shell write is the normal path) and correcting the container-mode REFERENCE claim.
0148 — Secret-path reads never auto-run through shell Accepted 2026-08-01 A shell command that lexically names a credential store (~/.ssh, a project .env, …) is downgraded from any ALLOW to ASK with no “always” tier, and the sandbox now masks kin’s own ~/.kin/settings.toml/mcp.json — the allowlist stops undermining the read tools’ secret deny without being promoted to a boundary.
0147 — Shell-path nested guidance — the tool-authored guidance_paths seam SHIPPED 2026-08-01 Amends DR 0073: the READ/EDIT+path trigger gate becomes the default of a tool-authored guidance_paths seam; shell/run_code override it with a bounded raw-text extractor, and dir-valued paths walk dir-inclusive for every tool.
0146 — Provider keys are collected at the point of need; the hub keeps sole writer authority Accepted 2026-07-30 Amends DR 0142’s surface rule: a no-key /model pick opens a one-field key prompt right there instead of refusing toward the hub; the locked hub transaction stays the sole writer.
0145 — Project MCP config is kin-owned at .kin/mcp.json; a root .mcp.json is adoption material Accepted 2026-07-30 Stop auto-loading (and writing) the cross-tool .mcp.json at the workspace root: kin reads its own file, and a foreign file becomes something you adopt explicitly.
0144 — Type gate for the Textual client Accepted 2026-07-24 Extend the ty gate from the harness to src/kin/tui by declaring each mixin’s self contract with the session-islands idiom; container/ stays out of scope.
0143 — MCP OAuth for pre-registered clients Accepted 2026-07-24 Reach authorization servers that never implement dynamic client registration, without weakening the loopback + PKCE posture or adding a second credential surface.
0142 — Job-first model configuration hub Accepted 2026-07-22 Stage and atomically apply human-owned jobs, connections, credentials, routes, and assignments without changing the TOML schema or model-write boundary.
0139 — Named model routes for role-specific inference Accepted 2026-07-21 Bind the MCA, semantic vision, Rig, tasks, workflows, and agent profiles to operator-owned provider/model routes without coupling orchestration to a wire.
0138 — Bounded documentation operating model Accepted 2026-07-21 Keep root and tier docs as ownership maps, bound the actionable status board, and enforce its exact structural claims in the local promotion gate.
0137 — Kin-native skill discovery Accepted 2026-07-20 Discover only Kin-owned skill roots; adapt explicitly named foreign skills through skill-creator instead of loading them as live configuration.
0136 — Multiple independent Kin sessions per workspace Implemented and verified on dev 2026-07-20 Give every Kin process a unique managed instance while preserving bare unattended recovery, exact live-conversation ownership, explicit mirroring, and /fork as the journal branch.
0135 — Structured Git and GitHub publication boundary Implemented on dev 2026-07-20 Replace recurring Git shell/credential exceptions with bounded daily Git and PR tools, secret-free host-route trust, exact force leases, and an unchanged Beam checkpoint.
0134 — Code is content — conventional syntax semantics in the code band Implemented on dev 2026-07-18 Stop painting code in brand roles: muted-green strings, bone functions, cyan only on keywords, amber only on numbers, and inline code in body bone on the band.
0133 — The shelf — peer-curated jobs per workspace Accepted 2026-07-18 Track rock-sized future work as durable git cards that can run on Outpost and return through a verified card update.
0132 — get.kinra.ai product front door and independent Paddock channel Accepted and deployed 2026-07-18 Present Kin and Paddock as independent products, make Kin’s installer universally useful, and give both release channels disjoint ownership in a durable public docroot.
0131 — Event-driven supervision discourages polling Accepted 2026-07-18 State the DR 0117 event contract everywhere the MCA looks and clamp the wait tools, so a healthy running child is never polled, hurried, or killed out of impatience.
0130 — KinMarkdown — the one markdown identity surface Implemented on dev 2026-07-18 Pin every markdown body element to the Graphite+ palette in one class-scoped widget, deleting the fence wiring’s global mutation and import-order invariant.
0129 — Typed, scoped sandbox access Accepted 2026-07-18 Replace command-pattern sandbox bypasses with capability grants, immutable denial-bound retry, and one human-owned lifetime decision.
0128 — Task-first, screenshot-rich user guide Accepted 2026-07-17 Make the shortest everyday path the guide’s organizing principle, while preserving exhaustive operator and implementation material behind it.
0127 — Targeted plan revision under the planning freeze Accepted 2026-07-17 The adversarial plan-review option deliberately keeps the session in its read-only planning freeze.
0126 — Editable queued input + intentional tool disclosure Accepted 2026-07-17 The TUI protects the harness from overlapping user turns with one latest-wins queued-message slot.
0125 — Documentation screenshot baselines Accepted 2026-07-17 Publish three high-information TUI scenes as their own generated snapshot baselines, with a deterministic ownership graph in the promotion gate and machine-sensitive rendering kept outside it.
0124 — Agent-first local promotion gate Accepted 2026-07-17 Records the rationale, boundary, and consequences for agent-first local promotion gate.
0123 — Subagents run to completion Accepted 2026-07-17 Kin’s bundled agent profiles predated model-owned supervision and carried fixed max-turns values from 15 to 50.
0122 — TUI timeline presentation + interrupt settlement SHIPPED 2026-07-16 The timeline should read as a considered work log: calm at rest, specific while active, and visibly terminal when the user interrupts it.
0121 — Tag-gated update channel + kin update Tag-gated update channel + kin update SHIPPED 2026-07-16 Deployed kin instances had no update story — nothing bumped the version, nothing told a user they were stale, and nothing applied an update.
0120 — Cloud-provider hardening and plan-aware subagent capacity Implemented and live-gated 2026-07-16 Makes the MiniMax and Z.ai presets reflect their current subscription surfaces, carries provider-tier subagent capacity into live sessions, and turns opaque subscription failures into actionable diagnostics.
0119 — Tier-aware Kimi Code provider Superseded by DR 0156 on 2026-08-07 Historical provider-specific integration removed in favor of provider-neutral context admission.
0118 — Full-context fork_agent delegation Accepted 2026-07-16 Kin’s named task agents deliberately start from isolated history.
0117 — Model-owned subagent supervision Accepted 2026-07-15 Background task agents originally reported completion on the next human turn.
0116 — Human-readable agent panel Accepted 2026-07-14 The agent panel exposed the right underlying facts but presented them as three equally sized log boxes.
0115 — Network-capable workspace sandbox Recorded Kin’s original auto-mode sandbox coupled two independent boundaries: workspace-confined writes and total network isolation.
0114 — Session nudges supersede Ultracode Accepted 2026-07-14 Replace one overpromising workflow-mode toggle with a small, stackable vocabulary of session-scoped behavioral preferences.
0113 — Hybrid workspace search and bounded grep Hybrid workspace search SHIPPED 2026-07-14 Give Kin one stable exact-search contract and one ranked discovery contract, with real CPU and secret-content bounds.
0112 — Durable project prompt history Durable project prompt history SHIPPED 2026-07-14 Make the composer’s existing ↑/↓ recall and Ctrl+R search survive restarts without making conversation journals own another lifecycle.
0111 — Transparent terminal-ground default theme Transparent terminal-ground default theme SHIPPED 2026-07-12 Let the user’s terminal own kin’s canvas without giving up Graphite+’s role-based truecolor language or its deterministic opaque fallback.
0110 — Bounded, filterable Outpost supervision accepted 2026-07-12 Keep Activity and Automations calm at a glance without letting filtering hide live work, blur independent truth axes, or pretend a bounded response is complete history.
0109 — Human-friendly Outpost presentation accepted 2026-07-12 Translate stable automation and workspace contracts into an approachable daily surface without hiding, renaming, or weakening the underlying truth.
0108 — Adaptive visual system and causal-motion doctrine accepted 2026-07-12 Let Outpost use hierarchy and motion where they make the product easier to understand, without turning status into theater or weakening accessibility.
0107 — Outpost truth model and five-destination information architecture accepted 2026-07-12 Rebuild the Outpost around the operator’s actual questions, with one authoritative meaning for present-tense attention across every projection.
0106 — Retire Matrix for sovereign Kin Chat accepted and executed 2026-07-12 Matrix was chosen when the Outpost had no dependable way to reach the operator.
0105 — Graphite v2 — the chat-era Outpost design doctrine SHIPPED 2026-07-11 (doctrine and dormant tokens; surface adoption staged) Extend Graphite+ for Kin Chat without weakening the dashboard’s settled motion, accessibility, or identity constraints.
0104 — Durable beam card with hybrid persistence ACCEPTED 2026-07-11 Persist handoff identity locally while leaving lifecycle truth on Outpost.
0103 — Native beam controller and composed confirmation ACCEPTED 2026-07-11 Make a human-started handoff quiet and inspectable without adding a lifecycle-hook policy engine.
0102 — Rig — Kin’s computer Accepted 2026-07-11; W0 contract and critic pass complete; implementation waves W1–W5… Rig is one warm, persistent machine beside Outpost: a semantic-first, headful browser and shell that Kin can turn to during a conversation, with screenshots on demand, its own memory, an append-only journal, and an SSO-gated human…
0102 — Execution profiles by validated reference ACCEPTED 2026-07-11 Run machine-door jobs on an intentional model without moving endpoint or credential material.
0101 — Structured, Codex-style diff rendering Implemented on dev 2026-07-11 The TUI coloured raw unified diff lines, leaving transport chrome (---, +++, and @@) prominent while omitting line numbers and per-file change counts.
0100 — Titlebar spinner and workspace identity Implemented on dev 2026-07-11 DR 0021 made the terminal title a curated, sanitized surface and named title grammar extension as its R4 re-engage point.
0099 — Outpost presence in the TUI Outpost presence in the TUI SHIPPED 2026-07-11 Make remote jobs visible beside local sessions without pretending they are attachable sessions.
0098 — Beam sequential handoff Beam sequential handoff SHIPPED 2026-07-11 Move work from a departing local machine to Outpost without creating two live writers.
0097 — Multi-session kin — switcher, kin ls, reaper, attention, --bg Shipped on dev 2026-07-11; live-driven against real tmux 3.7b (crash forensics +… One terminal, N projects.
0096 — rain — the matrix-rain busy spinner replaces bloom as the default Shipped on dev 2026-07-11 DR 0078 curated the spinner-vibe set and picked bloom — the calm breathing asterisk family (· ✢ ✳ ✶ ✻ ✽ …) — as the default.
0095 — Copy-on-select + code-fence click-to-copy Shipped on dev 2026-07-11 Mouse text selection in the transcript already worked (Textual 8.2.7’s built-in selection is on by default and kin never disabled it), but nothing happened on release — copying required knowing about Screen.action_copy_text, which kin…
0094 — Detach/reattach — the fully-hidden managed tmux wrapper Shipped on dev 2026-07-11; the manual live gate (checklist below) is the dev→main… kin can optionally run inside a managed, invisible tmux session (one per workdir, dedicated -L kin server): /detach returns the terminal to the shell with the session — a live turn included — still running, and kin in the same…
0093 — Provider-real /effort vocabularies for the MiniMax & Z.ai presets Implemented; live-key spike passed 2026-07-16 Narrows the /effort picker to each Anthropic-compat provider’s REAL wire knob: MiniMax gets the thinking.type tri-state, Z.ai gets a two-value reasoning_effort (max/high) shipped via a new attr-gated extra_body seam on…
0092 — get.kinra.ai installer + public docs.kinra.ai + kin doctor Shipped 2026-07-10 (get.kinra.ai installer wave) Bringing up a fresh machine (Blake’s next Fedora/macOS box, or a stranger’s) meant hand-cloning a private repo, knowing about uv, and knowing that uv sync alone never puts kin on PATH.
0091 — Composer paste interception — file drops normalize to @-mentions Shipped 2026-07-10 (drag-and-drop/file-paste wave, Rock 3) Finder drag-drops and terminal pastes of absolute file paths reach the Composer as raw text today (a Finder multi-file drop arrives as a newline-joined absolute-path string; Ghostty backslash-escapes spaced paths; iTerm newline-joins).
0090 — read_file learns Word (.docx) + Excel (.xlsx) Shipped 2026-07-10 (docx/xlsx read_file wave) read_file detected media by extension — image / PDF / SVG / text — and everything unrecognized fell through to _read_text, which opens the file encoding="utf-8", errors="replace".
0089 — TUI two-phase quit with visible memory curation + skip Shipped 2026-07-10 (Workstream B of the workspace-scoped memory + two-phase quit plan;… End-of-quit memory reflection (STRATEGY §7, unified by DR 0019) ran inside KinApp.on_unmount AFTER the UI tore down.
0088 — Workspace-scoped memory — auto-stamped frontmatter + read-seam filtering Shipped 2026-07-10 (Workstream A of the workspace-scoped memory + two-phase quit plan;… kin’s agent memory (DR 0015/0019) is fully global: one root (settings.memory_dir(), default ~/.kin/memory), one FTS index at <root>/.index.db, and the workdir threaded through memory.recall() / index_block() was only…
0087 — Skills catalog — per-profile skill grants (coder + researcher only) Shipped 2026-07-10 (prompt-polish deferred follow-ups wave, Step 6) The bundled defaults/skills/ catalog sits directly after SYSTEM_PROMPT in compose_system as the cache anchor (the stable prefix every child inherits verbatim — DR 0081’s “append-only” cache argument).
0086 — Subagent-result trust framing — third formal re-reject Shipped 2026-07-10 (prompt-polish deferred follow-ups wave, Step 4, doc-only) Records the rationale, boundary, and consequences for subagent-result trust framing — third formal re-reject.
0085 — Schema-up-front dispatch note — top-level field list for agent(schema=…) Shipped 2026-07-10 (prompt-polish deferred follow-ups wave, Step 3) The agent(schema=…) path (run_subagent with schema=) post-hoc structures the child’s prose answer via a Tier-1 forced tool_choice + Tier-2 prompt-JSON fallback (DR 0069; see REFERENCE.md § “Dynamic workflows”).
0084 — Live planning walk-up — root-resolving property + satisfies DR 0081’s revisit trigger Shipped 2026-07-10 (prompt-polish deferred follow-ups wave, Step 1) Revisit trigger: if sess.planning ever becomes a live property that walks to the root, planner fan-out becomes safe to reconsider.
0083 — The liveliness doctrine — motion, freshness honesty, and the settled state (Outpost polish wave) SHIPPED The Outpost dashboard grew its live surfaces piecemeal: the Activity feed got a pulsing dot grammar (green running, amber pulse-wait for needs-human), the header got a pulsing “live” pill, DR 0021 gave the tabs a deliberately…
0082 — Model-facing truth — the context tells the model the truth about its own harness Shipped 2026-07-09 (prompt-polish wave, Rocks 2–4) Records the rationale, boundary, and consequences for model-facing truth — the context tells the model the truth about its own harness.
0081 — Subagent dispatch contract — shared preamble + the non-interactive invariant Shipped 2026-07-09 (prompt-polish wave, Rock 1) Records the rationale, boundary, and consequences for subagent dispatch contract — shared preamble + the non-interactive invariant.
0080 — TUI voice conventions: one hint voice, toast governance, safe defaults SHIPPED (polish wave, Rocks C1–C3) Placement addendum (2026-07-16): DR 0122 keeps this record’s hint grammar but supersedes the identical-full-hint placement.
0079 — Approval modal: native bodies, honest choice architecture, deny-with-note SHIPPED (polish wave, Rocks B1–B5) The ApprovalModal rendered every tool identically: `“?
0078 — Spinner vibes + the “one heartbeat, colour elsewhere” doctrine (POLISH r11) SHIPPED (polish wave, Rocks A1–A4) Partially superseded by 0096: the default is now rain and bloom is removed from the vibe set.
0077 — Deferred: local-model escalation routing (G6.2, Step 8 of the field-gap Wave B) Deferred 2026-07-09 The 2026-07-09 field-gap analysis (research/2026-07-09-kin-vs-field-gap-analysis.md § G6, item 2) named the 2025–26 practitioner consensus: SLM-first with automatic escalation to a stronger model on trouble signals (schema violations,…
0076 — Session handoff — REJECTED (G4c, Step 7 of the field-gap Wave B) Rejected 2026-07-09 The field ships live session handoff: Cursor’s “Cloud Handoff” lets a user pick up a running agent session in the browser/mobile that was started locally (or vice versa), attaching a second live surface to the same running conversation.
0075 — ! shell passthrough — composer-only shell escape (G8e, field-gap Wave B, Step 6) Shipped 2026-07-09 The 2026-07-09 field-gap analysis named the missing ! shell escape as one of the TUI QoL batch’s five items (docs/decisions/0074-tui-qol-batch.md carries the other four: /export, /fork, /editor, Ctrl+R history search).
0074 — TUI QoL batch: /export, /fork, /editor, Ctrl+R history search (G8, field-gap Wave B) Steps 2–5 (/export, /fork, /editor, Ctrl+R history search) SHIPPED Historical privacy boundary: DR 0112 supersedes this section’s in-memory-only storage choice with bounded, project-scoped durable history.
0073 — Nested/lazy AGENTS.md discovery (G7 — Step 1 of the field-gap Wave B) SHIPPED 2026-07-09 agents_md.discover(workdir) reads exactly three fixed paths at session start — workdir AGENTS.md, workdir CLAUDE.md (fallback only), and ~/.config/kin/AGENTS.md — with no nested walk and no @-import expansion (both…
0072 — Mid-run steering — a steer-file channel across the subprocess boundary (G4b, Step 7 of the field-gap Wave A) Proposed 2026-07-09 Records the rationale, boundary, and consequences for mid-run steering — a steer-file channel across the subprocess boundary (g4b, step 7 of the field-gap wave a).
0071 — The kill switch — one cancel-semantics core behind three doors (G4a, Step 6 of the field-gap Wave A) SHIPPED 2026-07-09 A queued or running job’s operator gets a real Stop, not just Pause.
0070 — No user-configurable lifecycle hooks (G3 — Step 5 of the field-gap Wave A) Rejected 2026-07-09 The absence is currently undocumented: src/kin/harness/ has no lifecycle hook mechanism, and no prior DR ever considered adding one.
0069 — Guided-decoding probe + scheduler compact default (G6.1 + G6.3 — Step 4 of the field-gap Wave A) SHIPPED 2026-07-09 The 2026-07-09 field-gap analysis named G6.1 (structured-output fast path) as a candidate build: attach vLLM’s guided-decoding params to force_tool_call so Tier-1 structured output stops relying on the model “just complying” with a…
0068 — Terminal bell / OSC 9 walk-away notification (G5 — Step 3 of the field-gap Wave A) SHIPPED 2026-07-09 The 2026-07-09 field-gap analysis (.kin/2026-07-09-gap-analysis-vs-field.md — moved to research/2026-07-09-kin-vs-field-gap-analysis.md at the wave’s Step 8 close-out) named a real ergonomics gap: kin gives no walk-away signal.
0067 — File snapshots-before-write + /rewind file restore (G2 — Step 2 of the field-gap Wave A) SHIPPED 2026-07-09 The 2026-07-09 field-gap analysis named a real gap: HistoryOps.rewind truncates the CONVERSATION at a user-turn boundary, but it never touches FILE state.
0066 — Diagnostics-after-edit (G1.1 — Step 1 of the field-gap Wave A) SHIPPED 2026-07-09 “LSP servers can get out of sync, use significant memory, and slow down agent workflows.”.
0065 — Deep-link targets for run_report and alert taps (Step 4 of the mobile control-plane wave) Deep-link targets for run_report and alert taps — SHIPPED 2026-07-09 The push lane is a complete control plane now: lock-screen delivery (DR 0063), lock-screen one-tap actions for the low/medium-risk lane (DR 0064), and — with this step — a per-kind deep-link grammar so a run_report tap lands on the…
0064 — One-tap approve/dismiss for medium-risk inbox items (Step 2 of the mobile control-plane wave) One-tap approve/dismiss for medium-risk inbox items — SHIPPED 2026-07-09 The phone stops being an information surface and becomes an action surface — at least for the low/medium-risk lane.
0063 — Push all three event kinds with rich, typed envelopes (Step 1 of the mobile control-plane wave) Push all three event kinds with rich, typed envelopes — SHIPPED 2026-07-09 The phone stops being silent on run_report and alert events.
0062 — Dip-in transcript modal — read-only view of a child agent’s transcript (Step 7 of the subagent-retention wave) Dip-in transcript modal — SHIPPED 2026-07-09 The retention keystone (DR 0058) parks a child idle with its full transcript surviving aclose.
0061 — Headless retry posture — children retry through mid-stream errors (Step 5 of the subagent-retention wave) Headless retry posture — SHIPPED 2026-07-09 Today, a transient wire error mid-stream lands as done("error") + the partial prose for EVERY session — root included.
0060 — agent_message — coordinator-only resume on a parked subagent (Step 6 of the subagent-retention wave) agent_message — SHIPPED 2026-07-09 The retention keystone (DR 0058) parks a finished child instead of destroying it; that parked child is a live Session.
0059 — Subagent failure semantics — kill the silent-partial family (Step 4 of the subagent-retention wave) Subagent failure semantics — SHIPPED 2026-07-09 A worse bug than the brief knew: when a foreground subagent dies on a transient wire error after streaming prose, the loop emits events.error + events.done("error") and returns normally — ForwardingEmit dropped error events,…
0058 — Subagent retention — child journals + park + deliberate close (Step 3 of the subagent-retention wave) Subagent retention — SHIPPED 2026-07-08 Records the rationale, boundary, and consequences for subagent retention — child journals + park + deliberate close (step 3 of the subagent-retention wave).
0057 — Unified agent registry — every child gets a stable id + handle (Step 1 of the subagent-retention wave) Unified agent registry — SHIPPED 2026-07-08 Background subagents already had a registry (BgSubagents / BgAgent) and a stable id; foreground subagents did not.
0056 — Remove the redundant TodoList header pulse (Step 0 of the subagent-retention wave) Remove the redundant TodoList header pulse — SHIPPED 2026-07-08 The TodoList panel’s leading-glyph hex pulse (PRIMARYPRIMARY_DIM driven by app-level harness_busy) was a redundant twin of the StatusBar shimmer_text heartbeat — both answered the same “is kin working?” question on the same…
0055 — The code-audit gate — cite symbols not line numbers + move-tombstone class check The code-audit gate (symbols not line numbers + move-tombstone classes) SHIPPED… A new task ship gate (task code-audit) that forbids file:line citations in non-test code comments/docstrings and flags duplicate module-level class definitions inside a package.
0054 — Move landing composer to templates/landing.py (Step 6 of the 2026-07-08 dashboard mega-templates wave) Move landing composer to templates/landing.py (Step 6 of the 2026-07-08 dashboard… Step 6 of the dashboard mega-templates wave moves the landing-page composer _build_landing_html out of container/dashboard/app.py into templates/landing.py.
0053 — Move run-detail page + _shell to templates/run_page.py (Step 5 of the 2026-07-08 dashboard mega-templates wave) Move run-detail page + _shell to templates/run_page.py (Step 5 of the 2026-07-08… Step 5 of the dashboard mega-templates wave moves the run-detail page composer (_build_run_page_html) plus _shell (the GitHub OAuth status pages) plus two sole-consumer prep helpers (_sanitize_plain, _classify_run_source) out of…
0052 — Move landing <script> block to templates/landing_js.py (Step 4 of the 2026-07-08 dashboard mega-templates wave) Move landing <script> block to templates/landing_js.py (Step 4 of the 2026-07-08… Step 4 of the dashboard mega-templates wave moves the 2955-line landing JS block (_build_landing_html’s <script nonce="…"> body) out of container/dashboard/app.py into templates/landing_js.py as the f-string function landing_js.
0051 — Extract landing body HTML to templates/landing_body.py (Step 3 of the 2026-07-08 dashboard mega-templates wave) Extract landing body HTML to templates/landing_body.py (Step 3 of the 2026-07-08… Step 3 of the dashboard mega-templates wave moves the landing page’s ~554-line body block (five tab sections + the inbox action bar) out of container/dashboard/app.py into templates/landing_body.py as six plain-string constants:…
0050 — Extract landing <style> block to templates/landing_css.py (Step 2 of the 2026-07-08 dashboard mega-templates wave) Extract landing <style> block to templates/landing_css.py (Step 2 of the… Step 2 of the dashboard mega-templates wave moves the 415-line landing CSS block (_build_landing_html’s <style> body) out of container/dashboard/app.py into templates/landing_css.py as the f-string function LANDING_CSS.
0049 — Create templates/ + extract plain-string head fragments to templates/fragments.py (Step 1 of the 2026-07-08 dashboard mega-templates wave) Create templates/ + extract plain-string head fragments (Step 1 of the 2026-07-08… Step 1 of the dashboard mega-templates wave: a container/dashboard/templates/ package is created and the eight plain-string CSS/JS head fragments (_FAVICON_LINK, _THEME_COLOR_META, _MANIFEST_LINK, _APPLE_TOUCH_ICON_LINK,…
0047 — Session collaborators — REJECTED. The mixin shape is the endpoint. Session collaborators REJECTED 2026-07-08 The post-Tier-2 re-premise check (Step 0 of the .kin/plans/2026-07-08-session-facade-plan.md) kills the “convert Session from mixins + all-state-on-core to state-owning collaborator objects” refactor.
0046 — Roundtrip island (C2 rock) Roundtrip island (C2 rock) SHIPPED 2026-07-08 The RoundTripOps mixin (24 methods across 4 groups) and the NeedsHumanError class are peeled out of session/core.py into session/roundtrip.py (Step 7 of the 2026-07-08 Tier-2 session-islands wave).
0045 — Subagents island Subagents island SHIPPED 2026-07-08 The SubagentOps mixin (4 methods + 1 property) and 8 module-level helpers (incl.
0044 — DR 0044 — swap-island (Step 5 of the 2026-07-08 Tier-2 session-islands wave) SHIPPED 2026-07-08 The third of five island extractions: peels BackendSwap (the C4 coupling to persistence.wire_shape / strip_thinking / rebuild_history / to_neutral_turns that backs Session.set_provider’s live cross-provider history…
0043 — DR 0043 — controls-island (Step 4 of the 2026-07-08 Tier-2 session-islands wave) SHIPPED 2026-07-08 Folds the two tiny “controls” concerns (ModeToggle + ReasoningEffort) into one ControlOps mixin in session/controls.py, the second of five island extractions.
0042 — Extract HistoryRewind → session/history.py (Step 3 of the 2026-07-08 Tier-2 session-islands wave) Extract HistoryRewind → session/history.py (Step 3 of the 2026-07-08 Tier-2… Step 3 of the 2026-07-08 Tier-2 session-islands wave.
0041 — Convert session.py into a session/ package (Step 2 of the 2026-07-08 Tier-2 session-islands wave) Convert session.py into a session/ package (Step 2 of the 2026-07-08 Tier-2… Step 2 of the 2026-07-08 Tier-2 session-islands wave.
0040 — Harness settings package Harness settings package SHIPPED 2026-07-08 The 950-line src/kin/harness/settings.py is split into a 5-submodule settings/ package (Step 1 of the 2026-07-08 Tier-1-finish wave); the public import surface stays byte-for-byte stable so no downstream caller touches its `from…
0039 — Harness persistence package Harness persistence package SHIPPED 2026-07-08 The 867-line src/kin/harness/persistence.py is split into a 3-submodule persistence/ package (Step 5 of the 2026-07-07 Tier-1 package-conversion wave); the public import surface stays byte-for-byte stable so no downstream caller…
0038 — Harness MCP package Harness MCP package SHIPPED 2026-07-08 The 1104-line src/kin/harness/mcp.py is split into a 6-submodule mcp/ package (Step 4 of the 2026-07-07 Tier-1 package-conversion wave); the public import surface stays byte-for-byte stable so no downstream caller touches its `from…
0037 — TUI modals package TUI modals package SHIPPED 2026-07-08 The 2307-line src/kin/tui/modals.py is split into a 12-submodule.
0036 — TUI widgets package TUI widgets package SHIPPED 2026-07-08 The 2358-line src/kin/tui/widgets.py is split into a 12-submodule.
0035 — TUI diff module (C1 keystone of Tier-1 wave) Landed on dev 2026-07-07 The four unified-diff helpers move from widgets.py into a new kin.tui.diff module so ToolCall and ProposalModal can render diffs without crossing the widgets/modals package boundary.
0034 — Matrix as the Outpost’s communication fabric historical; Matrix surface retired by… The .kin/plans/2026-07-07-matrix-as-communication-fabric-plan.md close-out record: Matrix = projection + command rail, Outpost = the only mutator, one inbox store, one answer service — and the honest verification state as of landing.
0033 — The kin ↔ Outpost middle way — the Outpost becomes the automation layer accepted 2026-07-06 (docs + constitution only; the ttyd cut is Step 3) Step 0 of .kin/plans/2026-07-06-kin-outpost-middle-way-plan.md.
0032 — Matrix multi-room + the loops unlock Historical; retired by 0106 The messenger becomes multi-operator and makes completion reports first-class; the surface was later retired for sovereign Chat.
0031 — Run inspection — Trace / Files / Diff / Memory panes WP8 shipped on feat/outpost-wp8-inspect (2026-07-06) The run-detail page’s WP8 inspection surfaces: a Trace pane over the harness’s metadata-only spans JSONL, a Files pane for the workspace tree + text file preview, a Diff pane that stacks journal-derived edits + git diff vs HEAD with…
0030 — Workspace snapshots / fork / restore (WP10) Recorded WP10 closes the last Outpost gap that was left open after WP0–WP7: there was no way to safely reverse a destructive operator action on a workspace, and no way to fork a workspace at a known point.
0030 — Agent recipes gallery — bundled Qwen-tested recipe JSONs + the Jobs-tab UI landed 2026-07-06 WP9 of the Outpost stack plan (.kin/plans/2026-07-05-outpost-stack-plan.md).
0029 — Inbound triggers — generic webhook, GitHub, Slack slash-command landed 2026-07-06 WP7: per-service triggers whose per-source signature-auth receiver fires governed one-shot jobs.
0028 — Live transcript — journal tail over SSE WP3 shipped on dev (2026-07-06) The run-detail page’s Transcript pane: a per-pane SSE stream that tails the run’s append-only JSONL journal and renders sanitized render-events in real time.
0027 — Matrix reachability + ntfy retirement Historical; retired by 0106 Records self-hosted Synapse as the former Outpost delivery surface and the retirement of the legacy ntfy path.
0026 — GPU-fairness governor — admission control over background runs WP4 landed on dev (2026-07-05) An in-process admission module (container/dashboard/governor.py) now governs every background run sharing the same vLLM as the live interactive TUI: per-class max_concurrent caps (api 2, scheduled 2; the global…
0025 — Outpost Developers portal — the service-registry front door (WP5) WP5 landed on dev (2026-07-05) Wave 1 / WP5 of the Outpost stack plan (.kin/plans/2026-07-05-outpost-stack-plan.md).
0024 — The resume seam — kin -p --resume + the Inbox answer service WP2 landed on dev (2026-07-05) A halted headless run (needs_human, exit 2) is now resumable by continuation: a second headless run loads the saved journal (which already contains the model’s ask tool call + its structured needs-human tool error) and runs a…
0023 — Outpost Activity tab + Inbox UI — the console spine (WP1) WP1 landed on dev (2026-07-05) Wave 1 / WP1 of the Outpost stack plan (.kin/plans/2026-07-05-outpost-stack-plan.md).
0022 — Outpost foundations — unified run model, inbox store, delivery seam, run pages WP0 landed on dev (2026-07-05) The WP0 foundation for the Outpost stack plan (Wave 0): four new modules + a server-rendered run-detail page that unblock WP1 (Activity tab + Inbox UI), WP2 (resume seam), WP3 (live transcript), and WP8 (run inspection).
0021 — Lively tab titles — TUI (OSC 0/2) + Outpost dashboard tabs Lively tab titles — implemented on dev (2026-07-05) One pure derived_tab_title(...) grammar in kin.harness/, written change-guarded to (a) the host terminal’s tab title from the TUI via OSC 0/2 and (b) the Outpost dashboard’s Run + Jobs tab buttons via the payload refreshRun
0020 — TUI liveliness (hex pulse + reasoning sweep) + collapsible todo panel Liveliness + collapsible todo — SHIPPED to main 2026-07-05 Three additions that signal “kin is working” without breaking the POLISH r1–r10 invariants or the reduced-motion byte-identical guarantee: a breathing hex glyph on the live surfaces (per-surface local liveness, NOT a global busy…
0019 — Memory capture unification — one write path, auto-capture everywhere Memory capture unification — SHIPPED 2026-07-05 kin gets exactly ONE memory-write mechanism — a guarded end-of-run reflection turn over the live memory tool — fired automatically on every client (TUI, kin -p, Outpost scheduled jobs) and on demand via /memory.
0018 — Re-inject task/todo state on compact (don’t nag) Re-inject task/todo state on compact SHIPPED 2026-07-05 After a context compact the model lost awareness of the task list — even though the durable tasks DAG survived structurally.
0017 — Plan routing & no-inline-self-audit rule Plan routing & no-inline-self-audit rule SHIPPED 2026-07-05 Encode Blake’s inline-vs-dispatch routing rule at the prompt surface AND replace structural self-review with a context-aware nudge at the trap moment (the inline initial-draft return).
0016 — Plan thoroughness respec Plan thoroughness respec SHIPPED 2026-07-04 Plans are written to be executed against a CLEARED context by a smaller model — the whole planning flow now states that bar explicitly at every surface, instead of assuming it.
0015 — Agent memory floor Agent memory floor SHIPPED 2026-07-03 Persistent cross-session memory for kin: a markdown file-based store under ~/.kin/memory/, two-channel recall (cached prefix + volatile <system-reminder>), and session-end consolidation — so the model can carry state past the prompt…
0014 — Git network tools Git network tools SHIPPED 2026-06-30 Three dedicated tools (git-push / git-pull / git-fetch) that run git network operations outside the auto-mode OS sandbox with structured-args-only argv assembly, modeled on the SSH egress pattern.
0013 — v3 sections 4-7 batch v3 sections 4-7 batch SHIPPED 2026-06-28 Four tightly-coupled v3 rocks landed together (ssh egress outside the network-off sandbox, bundled exemplar skills/commands, search_workspace Tier 1 FTS5, and the settings tool + /settings) — each behind its own headless gate, with…
0012 — File-extraction refactor File-extraction refactor SHIPPED 2026-06-24 Eleven commits on dev moved every hardcoded agent-config surface to markdown+frontmatter (skills, agents, slash commands, AGENTS.md/CLAUDE.md) and surfaced three real security findings — all fixed.
0011 — Go to Python pivot thesis + scope Go to Python pivot thesis + scope CAPTURED 2026-06-23 The Textual UI in this repo stayed; the harness moved from the Go kin sibling into the same Python repo and dropped the NDJSON wire, so the seam became a function call instead of a subprocess pipe.
0010 — 2026 agent benchmarks + external context 2026 agent benchmarks + external context CAPTURED 2026-07-03 Captures 2026-07-03 sweep findings on Textual ≥8.2.7 capabilities kin underuses, Textual API gotchas to verify against kin, and where kin sits vs 2026 agent-harness UX benchmarks — reference material for future rocks.
0009 — Anti-regression list Anti-regression list CAPTURED 2026-07-03 The settled-good decisions from the 2026-07-03 review — preserved as a single anchor so future refactors do not quietly undo them.
0008 — Effort vocabulary dispatch Effort vocabulary dispatch SHIPPED 2026-07-01. Superseded in part by… Cross-wire reasoning-effort controls (/effort slash command + per-serve picker) that translate a single human-set “effort level” into the right wire knob per active backend (Anthropic thinking.type, OpenAI top-level…
0007 — Planning-freeze design Planning-freeze design SHIPPED 2026-06-27 Planning is a transient gate-enforced freeze overlay (not a mode), paired with an auto-first two-mode collapse, so the model can self-enter read-only deliberation while only a human can ever exit it.
0006 — Headless runs + the needs-human envelope Headless runs + the needs-human envelope SHIPPED 2026-07-02 Headless cron/CI runs need an in-process one-shot path that fails closed on a human-gated event instead of hanging forever or silently auto-allowing — so kin -p carries an explicit needs-human exit code plus the structured…
0005 — v3 permission model CAPTURED 2026-06-27 (direction doc; most sections since shipped) A captured direction document for the v3 permission-model rocks — auto-first two-mode collapse, visible plans, plan lifecycle, SSH egress, bundled exemplars, optional DB-mode search, settings-tool + /settings, and computer use —…
0004 — Strategy: missing lanes the critique surfaced Strategy: missing lanes the critique surfaced CAPTURED 2026-07-03 Atomic decision record for the five future-pass lanes the 2026-07 strategy critic flagged as worth their own pass but which were NOT in the 9-lane research set, captured here so STRATEGY can be relocated/trimmed without losing the…
0003 — Background subagents + Tasks DAG Background subagents + Tasks DAG SHIPPED 2026-06-26 The agents surface grew from “delegate one focused job to a subagent” into “the model can run profiles, fan-out work in parallel in the background, and maintain a session-long work graph” — without breaking the foreground path or the…
0002 — Environment context cache split Environment context cache split SHIPPED 2026-06-24 Prompt-caching fails when per-turn content sits behind the cache anchor, so the environment context is split into a cached stable prefix and a per-turn volatile reminder.
0001 — Strategy build decisions (2026-07) Strategy build decisions (2026-07) SHIPPED 2026-07-03 Canonical record for the 11 rocks of the July-2026 strategy build — this is the home docstring citations (STRATEGY §N and STRATEGY Tier Xy) point to, written so the planned STRATEGY →…