v0.107.0 #813
v0.107.0
#813
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
What
The trust release. An outside audit measured the experience instead of
the feature list — five waves, seventy-two receipts, twenty-two P0s — and
the arc closed every one: welcome gates its run CTA on the exact file's
verdict, a non-affirmative consent fires zero effects (NIKA-SEC-014, minted
spec-first with its conformance fixtures), the hooks' judge moved into the
binary (
nika guard, fail-visible, bypass matrix in test), autonomy isgraded before it is colored (the risk rung never renders green past
Supervised),
the data journey names sources, destinations and secrets before the run,
and redaction works by provenance — a one-byte secret dies the same death
as a long one. Around the core the doors multiplied honestly: one client
matrix asserts the coverage of thirty-one hosts,
nika wirepreviews andnever rewrites unasked, and every probed host gets a capability receipt
that separates oracle-only from integrated. The discipline held on the
inside too: the host plane descended to
nika-cli-hostat the 15k wall(ADR-110 — one unit, two members, zero call-site churn), and the wall
itself grew a descent window, the crate-size vector warning at eighty
percent instead of ambushing the push.
The night train (Jul 31 → Aug 1). The teaching grammar collapsed to
three doors and the whole surface followed:
nika tryis the showroom(bare lists · a slug runs the mock rehearsal offline by default — no
--model mock/echoincantation left to teach ·--model selfkeepsthe example's own seat),
nika newtakes ONE positional gesture(an example slug lands verbatim WITH its ingredients · plain words
BM25-route across the whole catalog · a lone
<name>.nika.yamlnamesa destination and gets the wizard),
nika initfounds. Theexamplesverb tree died;
evidenceandreceiptmoved under the run's dossieras
nika trace evidence/nika trace receipt explain. The samenight, four replayable persona waves judged the result end-to-end and
the last taught-line breaks fell before morning.
The three doors (V5)
nika try [slug]— see it work, own nothing (feat(cli): the three doors — try · new positional · examples dies (V5) #796). Offline bydefault: the rehearsal seat law lives in one place and is pinned;
the shelf, the take and the founding read as one grammar. Every
teaching surface (welcome START block · lazy door · rescue tips ·
recipes · briefs/AGENTS scaffold · kit skills · README · funnel e2e)
speaks the new forms in the same release.
nika newroutes the WHOLE catalog (feat(onboard): the intent router sees the whole catalog · the ingredients follow every taking door #778): the 26 human-wordedjobs are visible to the one surface that takes human words — a routed
example lands verbatim with its fixtures beside it (one shared
materializer for every taking door), a routed skeleton instantiates,
and below the confidence bar the clarify names facets + each entry's
own description line.
plain-words miss on
nika_examples/nika_templateroutes throughthe CLI's router — the interpretation is SAID in a leading
# routed:comment, single tokens keep the unknown-key contract,and the adversarial-keys pin holds verbatim.
hint is facet-aware (a skeleton carries its
<dest>.nika.yaml, anexample lands bare) and a spaced intent is re-echoed shell-quoted —
the gauntlet's teach-a-command-that-breaks class, closed the night
it was measured.
The honest machine (the tier-B wave)
B-5 liveness gate dials the local endpoint BEFORE any wire call —
silent (nothing listens) and mute (accepts, never speaks) refuse
fast with the exact repair (
ollama serve, or rehearse withmock/echo); a keyed cloud seat, mock, or a failed probe neverblock.
resolves(fix(check): the models rung consults the catalog before saying resolves #784) · the local route stops teaching what this binary cannot
do (fix(model): the local route stops teaching what this binary cannot do #788) · a healthy machine reads calm — doctor's advisory
noise folds (fix(doctor): a healthy machine reads calm — the advisory noise folds #789).
(
38 catalog entries · 15 wired in this build · 10 take a key) froma single projection, pinned end-to-end on the rendered surfaces.
say the same $0.00, and the exec-floor hint drops its phantom route.
for_eachwithrecovered items renders
N/M ok · K recovered— the silent fanclass dies at ITEM level.
explain's canon-row closer is per-class — SEC-004 teaches theliteral/computed split (a green PERMITS is not the RUN's promise) —
and the C-9 lessons (fix(explain): SEC-004 and WRITE-001 teach their contracts · one voice (C-9) #787) speak one voice across CLI and MCP.
nika run | headends with thescreen silent and the honest 141, never a Rust panic dump.
examples run/copyhistory:the pack resyncs landed the fanout-trap fix, the write carve-out and
the measured-truth corpus (chore(pack): resync from spec · the corpus tells measured truth #782 · chore(pack): resync spec ab27e17 · the fanout trap fix and the write carve-out land #790).
Added
nika initwrites the two project MCP doors. The root.mcp.json(the standard
mcpServersstanza FOUR agent surfaces read natively:Claude Code project scope · Grok Build via its Claude compat · GitHub
Copilot CLI · Warp) and
.agents/mcp_config.json(Antigravity CLI'sworkspace file, beside the authoring skill under the cross-vendor
.agents/convention). One shared body, seventeen scaffold targets —a repo equipped by
nika initnow hands the read-only oracle to sixclients with zero machine wiring.
nika wire copilot+nika wire amp— the wave-3 doors, shapes takenfrom the clients' own writers. Copilot CLI gets
~/.copilot/ mcp-config.jsonwith the exact{tools: ["*"], type: "local"}entry itsown
copilot mcp addwrites (a copilot-added entry reads· current,never churns); Amp gets the literal dotted key
"amp.mcpServers"in~/.config/amp/settings.json— JSONC settings get the snippet,byte-identical (the Zed contract).
wire allcovers twenty-one targets.nika wiregrows four client doors: grok · antigravity · kimi · kiro.Grok Build gets the Codex-shaped
[mcp_servers.nika]table in~/.grok/config.toml(comments preserved · idempotent — its Claudecompat already merges the project
.mcp.json, the native table survivesa
[compat.claude]toggle); Antigravity CLI (agy, the gemini-clisuccessor) gets the standalone
mcpServersentry in~/.gemini/config/mcp_config.jsonper Google's migration contract;Kimi Code CLI gets
~/.kimi-code/mcp.jsonper its two-level contract;Kiro CLI (the Amazon Q rebrand) gets
~/.kiro/settings/mcp.json.wire allcovers all four.nika doctorspeaks the kit↔binary handshake. Installed plugin kitsget one row each, probed at the rung their sessions actually load
(Cursor local drop · Claude Code install of record · Codex per-version
cache — marketplace clones as fallback): green on the binary's release
train, ⚠ with the
exact per-client refresh command when a kit lags (Claude Code names BOTH
rungs — the half-climbed ladder is the proven trap), ⚠ with
brew upgrade nikawhen a kit rides ahead. Patch drift is not a finding (kits are cutper train). The session-context hook grows the same two probes client-side:
a missing binary teaches the install line, a train divergence names the
direction-aware align command.
nika welcome's machine mirror namestrain drift in one line and routes to doctor — aligned or absent kits
stay silent (carry information, never a lecture).
A green run names its fruit and stops lying. The run card says
what the run actually produced, and a run whose green hid an untruth
says so out loud — the run-comprehension surface's honesty pass
(A-2 of the first-run-truth arc · the 19-persona gauntlet).
Fixed
The permits stop punishing honesty. The trifecta explains its
dominance rule (the dominating gate named · the bypassing data edge
named · the taught fix provably flips the verdict green), a
workspace-escaping path earns no machine fix but the taught narrow
way, and an exec grant reads "exec outside the fs bounds" — never a
default-deny misread (A-1 · Nina's BLOCKER).
nika examples copybrings the recipe's ingredients. Everyexamples/fixtures/…file the copied body reads now lands beside it atthe exact relative path the yaml names (existing files are kept, never
clobbered) — the copied recipe's own taught offline run used to die
NIKA-BUILTIN-READ-001on the missing fixture (the one rage-quit of the19-persona gauntlet, 2026-07-31).
Bare
nikagreets in a pipe too, exit 0. The pipe used to get clapusage at exit 2 — an agent's first contact read as breakage, and spec §4
reserves 2 for file findings. Both worlds now get the welcome mirror;
--helpstays the reference card.The agent's request order is the author's
tools:order. The toollist used to ride catalog order with loop-owned intrinsics appended last,
so
nika:donecould never come first — and the offline rehearsal(mock M1 invokes the first granted tool) died at turn 1 on any fs-scoped
loop, refused by the boundary it could not satisfy. Listing
nika:donefirst now closes the loop cleanly offline; real models are unaffected (a
whitelist has no ranking semantics).
nika explain NIKA-BUILTIN-READ-001teaches the contract — pathsresolve from the RUN's working directory, with the three exits (look ·
cd-and-run ·
examples copylands the ingredients) — instead of thenamespace boilerplate.
The taught mock rehearsal says its limit on writing workflows. The
mock swaps the model, not the effects: a mock re-run after a real one
overwrites the real artifacts (a gauntlet persona lost a real
CHANGELOG.md that way). The
explain <file>rehearsal line on awriting workflow now says
file writes STILL land — rehearse before the real run, not after.nika modelteaches an ungated starter id. The suggestedQwen/…-GGUFrepo answers 401 without a token; the taught id is now thepublic
unsloth/Qwen3-4B-Instruct-2507-GGUFmirror (verified 200).NIKA-SEC-014 names the real defect. The finding said the route
« never consumes the answer » — a route that binds the answer but never
gates on it read that as false; it now says « never gates on the
answer ».
A human gate can no longer kill a first run. A
nika:promptwith nodefault:used to dieNIKA-BUILTIN-PROMPT-001in milliseconds on everytext-mode run — a pipe, CI, an agent, even a human at a terminal (the
ADR-099 durable pause was armed on the
--jsonoutput flag, and thepromised TTY prompter had never shipped). The rider is now armed on every
lane: unattended runs pause durably (exit 4 ·
workflow_pausedjournaled · never a failure frame), and at a terminal the gate asks you
directly (confirm
[y/N]· choice by value or index · input verbatim),binding the answer through the same attested resume path as a manual
--resume --answer. Walking away (Ctrl-D) leaves the paused trace andits taught resume line.
The paused run teaches its exact next move. Every lane prints a
paste-able
resume: nika run <file> … --resume <trace> --answer <task>=<value>line that now carries the run's own--var/--model(a required-input workflow refused the taught line without them). The
frame renders the pause honestly: the gate row turns
◇amber and thepaused card names the awaiting task.
Fallout counts beside the root cause. One failed gate cancelling 22
downstream tasks used to read
23/23 done · 1 failed— the meter nowsays
1 failed · 22 blocked.nika explain NIKA-BUILTIN-PROMPT-001teaches the contract, not thenamespace boilerplate: the cause and all four exits (
--answeratlaunch · resume ·
default:· the terminal ask). Thenika checkheadless-prompt hint teaches the same working recipes.
✨ Features
🐛 Bug Fixes
🔨 Refactors
📚 Documentation
🧪 Tests
Install
Tarballs below: macOS arm64 / x64 · Linux x64 / arm64, plus
SHA256SUMS.Verify: three independent proofs
Provenance
Built from tag
v0.107.0byrelease.ymlon GitHub-hosted runners. Provenance is published twice: GitHub's native
build attestation (proof 2) and the SLSA generator's
multiple.intoto.jsonlrelease asset (proof 3). The release itself is a claim on the
machine-verified timeline: https://nika.sh/timeline
What's Changed
Full Changelog: v0.106.1...v0.107.0
This discussion was created from the release v0.107.0.
All reactions