<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Christoffer Niska Blog</title><description>Thoughts of a Tech Wizard.</description><link>https://crisu.me/</link><item><title>Coder&apos;s Block</title><link>https://crisu.me/blog/coders-block/</link><guid isPermaLink="true">https://crisu.me/blog/coders-block/</guid><description>No posts since April, no code since early May. I didn&apos;t lose interest in Acolyte. I burned myself out building it. Cascading bugs, a renderer I couldn&apos;t get right, and a project that started feeling too big to finish.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Harden Everything</title><link>https://crisu.me/blog/harden-everything/</link><guid isPermaLink="true">https://crisu.me/blog/harden-everything/</guid><description>AI can now find decades-old vulnerabilities autonomously. If it can do that, it can find bugs in your coding agent. I hardened Acolyte&apos;s daemon lifecycle, update pipeline, session locks, auth, and memory. None were catastrophic. All were waiting to be found.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>The Distillation Gap</title><link>https://crisu.me/blog/the-distillation-gap/</link><guid isPermaLink="true">https://crisu.me/blog/the-distillation-gap/</guid><description>I had no idea how well Acolyte&apos;s memory retrieval actually worked. No number. So I built a benchmark that runs academic datasets through the real search pipeline. Distilled facts outperform raw turns by a wider margin than any retrieval technique.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Ship the Knowledge</title><link>https://crisu.me/blog/ship-the-knowledge/</link><guid isPermaLink="true">https://crisu.me/blog/ship-the-knowledge/</guid><description>Most coding agents support skills now. The harder question is what they should contain. Most community skills are project-specific opinions. The real value is methodology: how to debug, how to review, how to build. That should ship with the agent.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Stop Guessing</title><link>https://crisu.me/blog/stop-guessing/</link><guid isPermaLink="true">https://crisu.me/blog/stop-guessing/</guid><description>Injecting context into every prompt is guessing. Most of it is irrelevant and the model pays the attention cost anyway. Acolyte stopped injecting and gave the model a search tool instead. The system prompt shrank and the model focuses on what matters.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Draw the Line</title><link>https://crisu.me/blog/draw-the-line/</link><guid isPermaLink="true">https://crisu.me/blog/draw-the-line/</guid><description>Some agents sandbox with Docker. Others have no boundary at all. Acolyte takes a middle path: argv-only execution, realpath checks, and a restricted environment. No containers, no kernel features. The workspace root is the boundary.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Agent Skills</title><link>https://crisu.me/blog/agent-skills/</link><guid isPermaLink="true">https://crisu.me/blog/agent-skills/</guid><description>I built a set of agent skills that encode my engineering workflow into a format any AI coding agent can use. They cover exploration, planning, implementation, review, and shipping without relying on giant prompts.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Know the Ground</title><link>https://crisu.me/blog/know-the-ground/</link><guid isPermaLink="true">https://crisu.me/blog/know-the-ground/</guid><description>The model guesses what tools a project uses. The answer is already in the config files. Acolyte reads them at startup and runs format and lint deterministically. It also detects the test command so the model can run targeted tests on the files it changed.</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Unsupervised Work</title><link>https://crisu.me/blog/unsupervised-work/</link><guid isPermaLink="true">https://crisu.me/blog/unsupervised-work/</guid><description>Every AI coding agent makes silent decisions that shape your architecture. Plan mode does not fix this. It moves the same invisible choices into a document you skim and approve. The plan emerges from conversation, not from a wall of markdown.</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Nothing Forgotten</title><link>https://crisu.me/blog/nothing-forgotten/</link><guid isPermaLink="true">https://crisu.me/blog/nothing-forgotten/</guid><description>Context compaction is the wrong solution to AI memory. Conversations are mostly noise. Acolyte extracts the facts that matter, stores them in scoped tiers, and retrieves them by semantic relevance. The conversation is disposable. The knowledge stays.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Follow the Thread</title><link>https://crisu.me/blog/follow-the-thread/</link><guid isPermaLink="true">https://crisu.me/blog/follow-the-thread/</guid><description>The trace tool started as a script so the AI could read its own runtime behavior. It became a first-class CLI command because the same observability that helps the model debug itself helps the developer understand what happened and why.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Edit the Tree</title><link>https://crisu.me/blog/edit-the-tree/</link><guid isPermaLink="true">https://crisu.me/blog/edit-the-tree/</guid><description>Structural editing got reliable once ast-grep stopped being the interface and became the engine. Operation-first contracts, scoping, and structured recovery changed the model&apos;s job from guessing patterns to expressing intent.</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Beyond the Prompt</title><link>https://crisu.me/blog/beyond-the-prompt/</link><guid isPermaLink="true">https://crisu.me/blog/beyond-the-prompt/</guid><description>The biggest behavior breakthrough in Acolyte did not come from adding more prompt rules. It came from giving the model an explicit way to tell the host when it was done. A tiny lifecycle signal removed a whole class of self-inflicted degradation.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>No More Ink</title><link>https://crisu.me/blog/no-more-ink/</link><guid isPermaLink="true">https://crisu.me/blog/no-more-ink/</guid><description>Acolyte replaced Ink with a custom React reconciler for terminal rendering. The real reason was not fixing layout bugs. It was owning the input model, because every keybinding and cursor movement is product behavior in a tool people live in.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Meet Acolyte</title><link>https://crisu.me/blog/meet-acolyte/</link><guid isPermaLink="true">https://crisu.me/blog/meet-acolyte/</guid><description>Acolyte is an open-source AI coding assistant that runs as a headless daemon in your terminal. Multi-provider, self-hosted, and built around lifecycle control, behavioral guards, and persistent memory. The host provides structure. The model does the work.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>How It Started</title><link>https://crisu.me/blog/how-it-started/</link><guid isPermaLink="true">https://crisu.me/blog/how-it-started/</guid><description>No planning phase, no architecture deck. I started with the smallest workable core and tested it in real conditions from day one. The hardest part was not generating code. It was making behavior dependable across chained tool calls.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>How It Works</title><link>https://crisu.me/blog/how-it-works/</link><guid isPermaLink="true">https://crisu.me/blog/how-it-works/</guid><description>Think of the assistant as a careful helper with a stack of sticky notes. One task at a time, clear checkpoints, and visible progress. The goal is reliable help you can understand and trust, not black-box magic.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>How I Build It</title><link>https://crisu.me/blog/how-i-build-it/</link><guid isPermaLink="true">https://crisu.me/blog/how-i-build-it/</guid><description>I use AI to generate code and challenge decisions, then verify everything with logs and traces. Zero intentional technical debt, strict sequencing, and evidence-driven validation. The goal is measurable progress, not clever output.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>My Own AI Assistant</title><link>https://crisu.me/blog/my-own-ai-assistant/</link><guid isPermaLink="true">https://crisu.me/blog/my-own-ai-assistant/</guid><description>I am building my own AI assistant to take over execution work while keeping reliability, safety, and usability high. Not a suggestion tool. A delegate that handles bounded tasks, runs checks, and returns results I can trust. Built for myself first.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>I and AI</title><link>https://crisu.me/blog/i-and-ai/</link><guid isPermaLink="true">https://crisu.me/blog/i-and-ai/</guid><description>I use AI as a fast engineering partner with clear scope, fast implementation loops, and structured review. AI removes execution overhead, but technical judgment stays with me. Higher delivery speed without giving up code quality or ownership.</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>What, a Blog?</title><link>https://crisu.me/blog/what-a-blog/</link><guid isPermaLink="true">https://crisu.me/blog/what-a-blog/</guid><description>I finally started writing publicly to capture real engineering decisions while they are still fresh. Not polished thought leadership. Real decisions, real tradeoffs, and things that actually work in day-to-day software work. Each post connects to the next.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item><item><title>Launching Resume v2</title><link>https://crisu.me/blog/resume-v2/</link><guid isPermaLink="true">https://crisu.me/blog/resume-v2/</guid><description>I rebuilt my resume site with Astro, TypeScript, and Tailwind to better reflect how I build software. Shipped in a single Sunday because AI-assisted workflows removed execution drag without lowering quality.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><author>Christoffer Niska</author></item></channel></rss>