<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nika · Notes from the source</title>
    <link>https://nika.sh/blog</link>
    <atom:link href="https://nika.sh/rss.xml" rel="self" type="application/rss+xml" />
    <description>Long-form pedagogy on Intent as Code: why useful AI work belongs in a file, why the language locks at four verbs, and what local-first actually buys you.</description>
    <language>en</language>
    <item>
      <title>Clean is not ready to spend</title>
      <link>https://nika.sh/blog/clean-is-not-ready-to-spend</link>
      <guid isPermaLink="true">https://nika.sh/blog/clean-is-not-ready-to-spend</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Engine|Security</category>
      <description>A valid AI workflow can still waste money. Nika now separates legal files from workflows that are ready for a paid run.</description>
    </item>
    <item>
      <title>AI workflows on ARM64 Linux servers, without the missing safety step</title>
      <link>https://nika.sh/blog/arm64-ai-workflows-on-linux-servers</link>
      <guid isPermaLink="true">https://nika.sh/blog/arm64-ai-workflows-on-linux-servers</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Engine|Sovereignty</category>
      <description>A practical path from a native ARM64 Nika binary to checked, sandboxed and traceable AI workflows on a headless Linux host.</description>
    </item>
    <item>
      <title>The access layer is an operating contract</title>
      <link>https://nika.sh/blog/the-access-layer-is-an-operating-contract</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-access-layer-is-an-operating-contract</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>From v0.108.0 to v0.111.0, Nika separated the model you choose from the path that reaches it, cut the workflow language to its durable core, added an explicit scheduler and turned check into an authoring loop.</description>
    </item>
    <item>
      <title>A field guide to the Nika workflow ecosystem</title>
      <link>https://nika.sh/blog/workflow-ecosystem-field-guide</link>
      <guid isPermaLink="true">https://nika.sh/blog/workflow-ecosystem-field-guide</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Choose deliberately among model providers, local runtimes, builtins, MCP servers and coding-agent surfaces without turning the workflow into vendor glue.</description>
    </item>
    <item>
      <title>Let coding agents write plans, not policy</title>
      <link>https://nika.sh/blog/coding-agents-write-plans</link>
      <guid isPermaLink="true">https://nika.sh/blog/coding-agents-write-plans</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Agents</category>
      <description>Codex, Claude Code, Cursor and other coding agents can author Nika workflows while the checker, the human review and the runner keep separate authority.</description>
    </item>
    <item>
      <title>The CI job should know its boundary</title>
      <link>https://nika.sh/blog/ci-without-ambient-authority</link>
      <guid isPermaLink="true">https://nika.sh/blog/ci-without-ambient-authority</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>Run Nika in CI and on headless servers with the same checked workflow bytes, explicit authority, deterministic rehearsals and a hard launch budget.</description>
    </item>
    <item>
      <title>Retire the prompt glue</title>
      <link>https://nika.sh/blog/retire-the-prompt-glue</link>
      <guid isPermaLink="true">https://nika.sh/blog/retire-the-prompt-glue</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>A practical migration from brittle shell and Python prompt chains to a checked workflow whose graph, authority, cost and outputs are visible before it runs.</description>
    </item>
    <item>
      <title>Intent as Code is an engineering discipline</title>
      <link>https://nika.sh/blog/intent-as-code-engineering-discipline</link>
      <guid isPermaLink="true">https://nika.sh/blog/intent-as-code-engineering-discipline</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Manifesto</category>
      <description>The useful part of AI work is not the chat. It is the intent, boundary, plan and evidence that a team can review before and after a run.</description>
    </item>
    <item>
      <title>The run keeps its receipt</title>
      <link>https://nika.sh/blog/the-run-keeps-its-receipt</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-run-keeps-its-receipt</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>A trace is more than a log: it can replay without effects, resume verified work, expose one task, export to OpenTelemetry and assemble a redacted evidence pack.</description>
    </item>
    <item>
      <title>The two clocks behind a model string</title>
      <link>https://nika.sh/blog/the-two-clocks-behind-a-model-string</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-two-clocks-behind-a-model-string</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>A provider name can be part of the stable language while its models, prices and access paths keep changing. Nika resolves those truths on separate clocks and records the result.</description>
    </item>
    <item>
      <title>One workflow, three local model lanes</title>
      <link>https://nika.sh/blog/one-workflow-three-local-model-lanes</link>
      <guid isPermaLink="true">https://nika.sh/blog/one-workflow-three-local-model-lanes</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Sovereignty</category>
      <description>Ollama, LM Studio and vLLM expose different operating experiences, but Nika keeps the workflow contract unchanged: one model string selects the local seat.</description>
    </item>
    <item>
      <title>MCP with a blast radius</title>
      <link>https://nika.sh/blog/mcp-with-a-blast-radius</link>
      <guid isPermaLink="true">https://nika.sh/blog/mcp-with-a-blast-radius</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>An MCP tool is executable foreign capability. Put its server, network, environment, tool ids and schema pin under separate review, then let the trace record the call.</description>
    </item>
    <item>
      <title>The registry re-proves everything</title>
      <link>https://nika.sh/blog/the-registry-reproves-everything</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-registry-reproves-everything</guid>
      <pubDate>Tue, 14 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>A workflow registry where nothing is taken on faith: every entry is content-pinned to an exact source revision and re-proven by CI (hash, certificate, advisories). The npm-of-workflows, minus the trust-me.</description>
    </item>
    <item>
      <title>Written by agents, reviewed by you</title>
      <link>https://nika.sh/blog/written-by-agents</link>
      <guid isPermaLink="true">https://nika.sh/blog/written-by-agents</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Agents</category>
      <description>nika init teaches the language to whatever agent you already run. Then two real agents write the same workflow: one invents a schema the audit refuses, one goes green first shot. The human review is a two-line diff.</description>
    </item>
    <item>
      <title>The pipeline is a file</title>
      <link>https://nika.sh/blog/the-pipeline-is-a-file</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-pipeline-is-a-file</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>An llm pipeline is a graph of model calls, tools and processes. A graph is declared, not programmed: forty lines of YAML replace the orchestration framework. Diffable, auditable, replayable.</description>
    </item>
    <item>
      <title>The MCP server you didn't have to build</title>
      <link>https://nika.sh/blog/the-mcp-server-you-didnt-build</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-mcp-server-you-didnt-build</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Everyone is learning how to build an MCP server. For your workflows, skip the tutorial: the nika binary already is one. Read-only tools let any agent audit a plan and learn the language from the thing that enforces it.</description>
    </item>
    <item>
      <title>The forecast is local</title>
      <link>https://nika.sh/blog/the-local-forecast</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-local-forecast</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>explain --forecast computes duration and cost priors from your own recorded runs: stats over .nika/traces/, honest ranges at two runs, percentiles at five. Never a model call, never the network.</description>
    </item>
    <item>
      <title>The generative ai workflow, minus the mystery</title>
      <link>https://nika.sh/blog/the-generative-workflow</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-generative-workflow</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>Strip the buzzword and a generative ai workflow is three things: inputs you name, a model step, and effects you can point to. Declare all three in one file and the mystery evaporates. Rehearsed offline, every asset with provenance.</description>
    </item>
    <item>
      <title>The chain of custody</title>
      <link>https://nika.sh/blog/the-chain-of-custody</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-chain-of-custody</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>A recorded run is a text file, and text files can be edited. nika trace verify recomputes the hash chain: one changed word in history breaks every line after it, and the run's printed head closes the loop.</description>
    </item>
    <item>
      <title>The agent workflow spectrum</title>
      <link>https://nika.sh/blog/the-agent-workflow-spectrum</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-agent-workflow-spectrum</guid>
      <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>An ai agent workflow is any pipeline where a model chooses some of the steps. Every design sits between a declared graph and a free loop. Where yours lands decides which safety you can even ask for.</description>
    </item>
    <item>
      <title>The run that waits for you</title>
      <link>https://nika.sh/blog/the-run-that-waits</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-run-that-waits</guid>
      <pubDate>Fri, 10 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>The approval gate is a task in the file, not a Slack thread: a plan fails closed on nika:prompt, and the human's answer rides the resume.</description>
    </item>
    <item>
      <title>The resume story</title>
      <link>https://nika.sh/blog/the-resume-story</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-resume-story</guid>
      <pubDate>Fri, 10 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>kill -9 a run mid-flight, then resume it: finished work never runs twice. Durability as a file property, shown from the real journal.</description>
    </item>
    <item>
      <title>The one-task re-run</title>
      <link>https://nika.sh/blog/the-one-task-rerun</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-one-task-rerun</guid>
      <pubDate>Fri, 10 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Regenerate one block without re-running the world: --task scopes a fresh run to a task and its upstream, --from re-rolls what the hashes cannot see.</description>
    </item>
    <item>
      <title>Prompts are code now</title>
      <link>https://nika.sh/blog/prompts-are-code</link>
      <guid isPermaLink="true">https://nika.sh/blog/prompts-are-code</guid>
      <pubDate>Wed, 08 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>Prompt versioning without a platform: the prompt lives in the workflow file, so git diffs it, a PR reviews it, git reverts it. The engine itself names an edited prompt when two runs diverge.</description>
    </item>
    <item>
      <title>The prompt injection that goes nowhere</title>
      <link>https://nika.sh/blog/injection-goes-nowhere</link>
      <guid isPermaLink="true">https://nika.sh/blog/injection-goes-nowhere</guid>
      <pubDate>Wed, 08 Jul 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>Prompt injection examples usually end with the agent taking a new action. Here the plan is authored before the model runs: the hostile note becomes data, never an action, and the boundary is checked before a token is spent.</description>
    </item>
    <item>
      <title>The run becomes evidence</title>
      <link>https://nika.sh/blog/the-run-becomes-evidence</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-run-becomes-evidence</guid>
      <pubDate>Tue, 07 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Every journal line now carries a hash chain: verify names the first broken link, reproduce classifies every task, and the journal attests which engine wrote it. Trust, but verify. Then verify.</description>
    </item>
    <item>
      <title>Time travel, for real</title>
      <link>https://nika.sh/blog/time-travel-for-real</link>
      <guid isPermaLink="true">https://nika.sh/blog/time-travel-for-real</guid>
      <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Every debugger replays the past by re-running it. Nika's past is a file, so stepping backward is free, breakpoints live in your YAML, and F5 debugs a run that already happened.</description>
    </item>
    <item>
      <title>The editor tells the truth</title>
      <link>https://nika.sh/blog/the-editor-tells-the-truth</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-editor-tells-the-truth</guid>
      <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>A green badge is a claim. We audited the editor extension against the engine the way you'd audit a client against a server, and found the badge lying. Here is the contract that keeps it honest now.</description>
    </item>
    <item>
      <title>The credentials your pipeline was breaking</title>
      <link>https://nika.sh/blog/the-credentials-your-pipeline-breaks</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-credentials-your-pipeline-breaks</guid>
      <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>OpenAI and Google sign the images their APIs return. Almost every pipeline that touches those files silently converts the signature into evidence of tampering. That included ours, until this week.</description>
    </item>
    <item>
      <title>One wire, five servers</title>
      <link>https://nika.sh/blog/one-wire-five-servers</link>
      <guid isPermaLink="true">https://nika.sh/blog/one-wire-five-servers</guid>
      <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
      <category>Sovereignty</category>
      <description>The self-hosted media world quietly standardized on OpenAI's wire shapes. That accident of history is the best sovereignty news in years, and Nika's media builtins are built on it.</description>
    </item>
    <item>
      <title>Media are workflow citizens</title>
      <link>https://nika.sh/blog/media-are-workflow-citizens</link>
      <guid isPermaLink="true">https://nika.sh/blog/media-are-workflow-citizens</guid>
      <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Images and speech now render inside workflows under the same discipline as everything else: permit-gated saves, sha256 provenance, honest warnings, real cost on the ledger, and the sovereign path first.</description>
    </item>
    <item>
      <title>The trace you can replay</title>
      <link>https://nika.sh/blog/the-trace-you-can-replay</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-trace-you-can-replay</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>Every run leaves a flight recorder: a deterministic AI audit trail you can replay like a film, never re-execute by accident.</description>
    </item>
    <item>
      <title>The secrets line</title>
      <link>https://nika.sh/blog/the-secrets-line</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-secrets-line</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>Information-flow, audited before it flows: how the checker proves a secret cannot leak into a prompt, a file, or a host.</description>
    </item>
    <item>
      <title>The cost line</title>
      <link>https://nika.sh/blog/the-cost-line</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-cost-line</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>The audit prices every token before it is spent: ceilings on generations, budgets on loops, and a $0.00 that means it.</description>
    </item>
    <item>
      <title>Anatomy of a verb</title>
      <link>https://nika.sh/blog/anatomy-of-a-verb</link>
      <guid isPermaLink="true">https://nika.sh/blog/anatomy-of-a-verb</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>infer, exec, invoke, agent: what makes the four verbs genuinely different execution models, in the engine's own verdicts.</description>
    </item>
    <item>
      <title>No cloud needed</title>
      <link>https://nika.sh/blog/own-your-stack</link>
      <guid isPermaLink="true">https://nika.sh/blog/own-your-stack</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Sovereignty</category>
      <description>One Rust binary, your models, your files. Run LLMs locally and see what local-first actually buys you.</description>
    </item>
    <item>
      <title>Intent as Code: why your AI work should be a file</title>
      <link>https://nika.sh/blog/intent-as-code</link>
      <guid isPermaLink="true">https://nika.sh/blog/intent-as-code</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Manifesto</category>
      <description>Chats evaporate, files compound. The case for writing AI work down as source you own: your best prompts, versioned like code.</description>
    </item>
    <item>
      <title>The plan you get for free</title>
      <link>https://nika.sh/blog/dag-for-free</link>
      <guid isPermaLink="true">https://nika.sh/blog/dag-for-free</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Engine</category>
      <description>The wiring is all you write: with: for data, after: for order. The plan falls out of the file: parallel waves, drawn before anything runs.</description>
    </item>
    <item>
      <title>The blast radius is part of the file</title>
      <link>https://nika.sh/blog/blast-radius-in-the-file</link>
      <guid isPermaLink="true">https://nika.sh/blog/blast-radius-in-the-file</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Security</category>
      <description>The workflow declares its effect boundary before execution. Static checks explain the fit; runtime sinks enforce what the host can prove.</description>
    </item>
    <item>
      <title>A standard library, not a plugin store</title>
      <link>https://nika.sh/blog/standard-library-not-plugin-store</link>
      <guid isPermaLink="true">https://nika.sh/blog/standard-library-not-plugin-store</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>Builtins ship with the engine and stay separate from the four verbs. External tools remain explicit dependencies, not new grammar.</description>
    </item>
    <item>
      <title>An open spec, a copyleft engine</title>
      <link>https://nika.sh/blog/open-spec-copyleft-engine</link>
      <guid isPermaLink="true">https://nika.sh/blog/open-spec-copyleft-engine</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Sovereignty</category>
      <description>The language contract is Apache-2.0. The reference engine is AGPL-3.0-or-later. The split keeps adoption and implementation custody separate.</description>
    </item>
    <item>
      <title>Four verbs are enough</title>
      <link>https://nika.sh/blog/four-verbs</link>
      <guid isPermaLink="true">https://nika.sh/blog/four-verbs</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Language</category>
      <description>A verb is a distinct execution model, not a feature. Why the language locks at four, forever.</description>
    </item>
    <item>
      <title>Starting over, on purpose</title>
      <link>https://nika.sh/blog/starting-over-on-purpose</link>
      <guid isPermaLink="true">https://nika.sh/blog/starting-over-on-purpose</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Origins</category>
      <description>We had a working prototype. We rebuilt from scratch anyway: craft, not extraction, one gate at a time.</description>
    </item>
    <item>
      <title>Naming the drum</title>
      <link>https://nika.sh/blog/naming-the-drum</link>
      <guid isPermaLink="true">https://nika.sh/blog/naming-the-drum</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Origins</category>
      <description>Why a local workflow engine carries the name of a liberation figure, and why a butterfly signs the work.</description>
    </item>
    <item>
      <title>The part Git cannot prove</title>
      <link>https://nika.sh/blog/the-part-git-cannot-prove</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-part-git-cannot-prove</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Origins</category>
      <description>Then the public record goes quiet. An honest origin story keeps the missing months visible instead of inventing a montage.</description>
    </item>
    <item>
      <title>What survived the first version</title>
      <link>https://nika.sh/blog/what-survived-the-first-version</link>
      <guid isPermaLink="true">https://nika.sh/blog/what-survived-the-first-version</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Origins|Engine</category>
      <description>Strip away the early claims and four technical bets remain: file, graph, model choice and a local engine.</description>
    </item>
    <item>
      <title>The first page was too sure</title>
      <link>https://nika.sh/blog/the-first-page-was-too-sure</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-first-page-was-too-sure</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Origins</category>
      <description>On December 30, Nika became public and immediately overclaimed. The first page preserves both the idea and the correction.</description>
    </item>
    <item>
      <title>The file came before the language</title>
      <link>https://nika.sh/blog/the-file-came-before-the-language</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-file-came-before-the-language</guid>
      <pubDate>Fri, 21 Aug 2026 09:00:00 GMT</pubDate>
      <category>Origins|Language</category>
      <description>The first durable Nika decision fit in two words: a file. Syntax, graphs and providers came later.</description>
    </item>
    <item>
      <title>The note that started it</title>
      <link>https://nika.sh/blog/the-note-that-started-it</link>
      <guid isPermaLink="true">https://nika.sh/blog/the-note-that-started-it</guid>
      <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
      <category>Origins</category>
      <description>Nika did not begin with a parser. It began with an objection: useful AI work should not disappear when a chat closes.</description>
    </item>
  </channel>
</rss>
