<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Sentinel</title><link>https://sentinel-blog.cherrypod.org/</link><description>Recent content on Sentinel</description><image><title>Sentinel</title><url>https://sentinel-blog.cherrypod.org/images/social-preview.png</url><link>https://sentinel-blog.cherrypod.org/images/social-preview.png</link></image><generator>Hugo -- 0.147.0</generator><language>en-gb</language><lastBuildDate>Sun, 22 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://sentinel-blog.cherrypod.org/index.xml" rel="self" type="application/rss+xml"/><item><title>Part 53: Matrix</title><link>https://sentinel-blog.cherrypod.org/posts/53-matrix/</link><pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/53-matrix/</guid><description>Sentinel needed a self-hosted messaging channel — something fully under our control, with no dependency on third-party services. Matrix fits.</description></item><item><title>Part 52: The Refactor</title><link>https://sentinel-blog.cherrypod.org/posts/52-the-refactor/</link><pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/52-the-refactor/</guid><description>The codebase had grown fast. Features landed, bugs got fixed, new capabilities kept shipping. Then a structural audit revealed what that pace had cost: god files, god functions, and a growing maintenance burden.</description></item><item><title>Part 51: Did It Actually Work?</title><link>https://sentinel-blog.cherrypod.org/posts/51-goal-verification/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/51-goal-verification/</guid><description>The planner could execute multi-step tasks. But it had no way to verify its own work. If a step failed silently, it carried on regardless. Time to close the loop.</description></item><item><title>Part 50: Pictures, Videos, Documents</title><link>https://sentinel-blog.cherrypod.org/posts/50-attachment-pipeline/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/50-attachment-pipeline/</guid><description>Sentinel could generate code, build websites, write files. But every piece of content was synthetic — generated from scratch by an LLM. What if it could use real photos, real videos, real documents?</description></item><item><title>Part 49: Real-World Data</title><link>https://sentinel-blog.cherrypod.org/posts/49-weather-crypto-tools/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/49-weather-crypto-tools/</guid><description>Sentinel could browse the web. It could read files and write code. But it couldn&amp;rsquo;t answer &amp;lsquo;what&amp;rsquo;s the weather?&amp;rsquo; without fabricating something. Time to give it real data backends.</description></item><item><title>Part 48: Named Anchors</title><link>https://sentinel-blog.cherrypod.org/posts/48-anchor-allocator/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/48-anchor-allocator/</guid><description>file_patch needs the planner to find a unique anchor string in existing code. The planner is bad at this. What if the system placed named markers instead?</description></item><item><title>Part 47: Wrong Language, Wrong File</title><link>https://sentinel-blog.cherrypod.org/posts/47-cross-language-fixer/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/47-cross-language-fixer/</guid><description>LLMs don&amp;rsquo;t always respect file boundaries. Raw CSS lands in HTML files, JavaScript appears without script tags. Building a detector to catch it.</description></item><item><title>Part 46: Seventy-Eight Findings</title><link>https://sentinel-blog.cherrypod.org/posts/46-security-audit/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/46-security-audit/</guid><description>A systematic audit of every API endpoint, middleware layer, and frontend component. Seventy-eight findings. Some embarrassing. All fixable.</description></item><item><title>Part 45: More Than One User</title><link>https://sentinel-blog.cherrypod.org/posts/45-multi-user/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/45-multi-user/</guid><description>Sentinel was built for one person. Making it work for multiple users meant rethinking auth, isolation, and how the system tracks who&amp;rsquo;s who.</description></item><item><title>Part 44: Did It Actually Work?</title><link>https://sentinel-blog.cherrypod.org/posts/44-task-verification/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/44-task-verification/</guid><description>Tasks were reporting success based on whether steps completed, not whether the goal was achieved. Building a verification system to tell the difference.</description></item><item><title>Part 43: Learning From Plans</title><link>https://sentinel-blog.cherrypod.org/posts/43-plan-outcome-memory/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/43-plan-outcome-memory/</guid><description>The system could remember what happened during tasks, but not what the plan was or whether it worked. Adding plan-outcome memory to close the loop.</description></item><item><title>Part 42: Building Websites</title><link>https://sentinel-blog.cherrypod.org/posts/42-building-websites/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/42-building-websites/</guid><description>New planner, new classifier, new patching tool. Putting it all together to iteratively build and modify websites through conversation.</description></item><item><title>Part 41: file_patch</title><link>https://sentinel-blog.cherrypod.org/posts/41-file-patch/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/41-file-patch/</guid><description>Full-file regeneration breaks at scale. The new tool generates only the changed fragments and splices them deterministically.</description></item><item><title>Part 40: The Model Upgrade</title><link>https://sentinel-blog.cherrypod.org/posts/40-the-model-upgrade/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/40-the-model-upgrade/</guid><description>Tested three planner models on identical tasks. The surprise: upgrading the planner fixed the worker&amp;rsquo;s bugs.</description></item><item><title>Part 39: Real-World Testing</title><link>https://sentinel-blog.cherrypod.org/posts/39-real-world-testing/</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/39-real-world-testing/</guid><description>Programmatic benchmarks said the system worked. Typing real prompts told a different story.</description></item><item><title>Part 38: The Classifier Swap</title><link>https://sentinel-blog.cherrypod.org/posts/38-the-classifier-swap/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/38-the-classifier-swap/</guid><description>The LLM classifier was slow, expensive, and occasionally wrong. A deterministic keyword matcher replaced it in microseconds with zero GPU.</description></item><item><title>Part 37: Trust Laundering</title><link>https://sentinel-blog.cherrypod.org/posts/37-trust-laundering/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/37-trust-laundering/</guid><description>The injection benchmark found 11 exploits. All shared the same root cause — files in the workspace inherited trusted status regardless of who put them there.</description></item><item><title>Part 36: The Injection Benchmark</title><link>https://sentinel-blog.cherrypod.org/posts/36-the-injection-benchmark/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/36-the-injection-benchmark/</guid><description>A custom-built injection benchmark with real email, real calendars, real web pages. No simulated backends. 130 tests designed to break the trust architecture.</description></item><item><title>Part 35: The Stress Test</title><link>https://sentinel-blog.cherrypod.org/posts/35-the-stress-test/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/35-the-stress-test/</guid><description>38 hours, 1,588 probes, zero human intervention. The first comprehensive validation with everything deployed.</description></item><item><title>Part 34: Tightening the Screws</title><link>https://sentinel-blog.cherrypod.org/posts/34-tightening-the-screws/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/34-tightening-the-screws/</guid><description>The features were built. Now came the hardening — FP reduction, credential scanner expansion, metadata enrichment, and 600 new tests before the big run.</description></item><item><title>Part 33: The Invisible Bottleneck</title><link>https://sentinel-blog.cherrypod.org/posts/33-the-invisible-bottleneck/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/33-the-invisible-bottleneck/</guid><description>Qwen was silently spilling VRAM to CPU. Fixing the KV cache quantisation unlocked more context and faster inference.</description></item><item><title>Part 32: Keeping the Lights On</title><link>https://sentinel-blog.cherrypod.org/posts/32-keeping-the-lights-on/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/32-keeping-the-lights-on/</guid><description>Reboot resilience, health watchdogs, compose locking, and the infrastructure that keeps an autonomous system running unsupervised.</description></item><item><title>Part 31: Thinking on Its Feet</title><link>https://sentinel-blog.cherrypod.org/posts/31-thinking-on-its-feet/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/31-thinking-on-its-feet/</guid><description>Dynamic replanning and failure recovery — the planner adapts when reality doesn&amp;rsquo;t match the plan.</description></item><item><title>Part 30: Multi-User</title><link>https://sentinel-blog.cherrypod.org/posts/30-multi-user/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/30-multi-user/</guid><description>JWT authentication, per-user trust levels, encrypted credentials, and proof that two users can&amp;rsquo;t see each other&amp;rsquo;s data.</description></item><item><title>Part 29: Learning From Experience</title><link>https://sentinel-blog.cherrypod.org/posts/29-learning-from-experience/</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/29-learning-from-experience/</guid><description>Cross-session episodic memory — the system remembers what worked, what failed, and applies that knowledge to future tasks.</description></item><item><title>Part 28: Bug Hunt Three</title><link>https://sentinel-blog.cherrypod.org/posts/28-bug-hunt-three/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/28-bug-hunt-three/</guid><description>The third full security audit. 13 batches of fixes, from API hardening to dead code removal.</description></item><item><title>Part 27: Hardening the Database</title><link>https://sentinel-blog.cherrypod.org/posts/27-hardening-the-database/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/27-hardening-the-database/</guid><description>Row-level security, role separation, and a red team that tried SQL injection, LISTEN/NOTIFY attacks, and privilege escalation through PL/pgSQL.</description></item><item><title>Part 26: Knowing Who You Are</title><link>https://sentinel-blog.cherrypod.org/posts/26-knowing-who-you-are/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/26-knowing-who-you-are/</guid><description>A contact registry, a user model, and a confirmation gate — the groundwork for multi-user and the end of &amp;lsquo;user 1 does everything.&amp;rsquo;</description></item><item><title>Part 25: The Code Fixer</title><link>https://sentinel-blog.cherrypod.org/posts/25-the-code-fixer/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/25-the-code-fixer/</guid><description>LLMs generate broken code. The code fixer catches it before it hits the filesystem — 7 auto-fixers across 10+ languages.</description></item><item><title>Part 24: Breaking Up the Monolith</title><link>https://sentinel-blog.cherrypod.org/posts/24-breaking-up-the-monolith/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/24-breaking-up-the-monolith/</guid><description>The orchestrator was doing too much. Six phases to extract it into focused modules without breaking a single security invariant.</description></item><item><title>Part 23: The Database Migration</title><link>https://sentinel-blog.cherrypod.org/posts/23-the-database-migration/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/23-the-database-migration/</guid><description>SQLite to PostgreSQL. Store protocols, async rewrite, data migration, and then ripping out every line of SQLite code.</description></item><item><title>Part 22: The Router</title><link>https://sentinel-blog.cherrypod.org/posts/22-the-router/</link><pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/22-the-router/</guid><description>Not every request needs a frontier model to plan it. The router classifies incoming messages and takes the fast path when it can.</description></item><item><title>Part 21: The Second Audit</title><link>https://sentinel-blog.cherrypod.org/posts/21-the-second-audit/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/21-the-second-audit/</guid><description>199 findings across 7 units. 19 fix batches. 7 systemic improvements. The most thorough review the codebase has ever had.</description></item><item><title>Part 20: The Interface</title><link>https://sentinel-blog.cherrypod.org/posts/20-the-interface/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/20-the-interface/</guid><description>Giving Sentinel a proper UI — dashboard health cards, chat, memory browser, routine management, and a GSP mascot.</description></item><item><title>Part 19: Where It Stands</title><link>https://sentinel-blog.cherrypod.org/posts/19-where-it-stands/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/19-where-it-stands/</guid><description>TL4 is live. The system is autonomous. It&amp;rsquo;s not finished — not even close.</description></item><item><title>Part 18: The False Positive Problem</title><link>https://sentinel-blog.cherrypod.org/posts/18-the-false-positive-problem/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/18-the-false-positive-problem/</guid><description>Without a human to override scanners, false positives become functional failures. Risk decay was the fix.</description></item><item><title>Part 17: Flipping the Switch</title><link>https://sentinel-blog.cherrypod.org/posts/17-flipping-the-switch/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/17-flipping-the-switch/</guid><description>TL4 activation. One environment variable, one container rebuild. Sentinel starts making its own decisions.</description></item><item><title>Part 16: The Sandbox Wasn't Real</title><link>https://sentinel-blog.cherrypod.org/posts/16-the-sandbox-wasnt-real/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/16-the-sandbox-wasnt-real/</guid><description>Every sandbox field was snake_case. Podman&amp;rsquo;s API requires PascalCase. HTTP 201 Created. Zero containment.</description></item><item><title>Part 15: The Red Team</title><link>https://sentinel-blog.cherrypod.org/posts/15-the-red-team/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/15-the-red-team/</guid><description>Four attack scenarios, including a simulated compromised planner. Six clean runs before trusting it.</description></item><item><title>Part 14: The Benchmark That Broke Everything</title><link>https://sentinel-blog.cherrypod.org/posts/14-the-benchmark-that-broke-everything/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/14-the-benchmark-that-broke-everything/</guid><description>1,136 adversarial prompts. A 62% false positive rate on multi-step plans. The ascii gate was the culprit.</description></item><item><title>Part 13: Reaching the Outside World</title><link>https://sentinel-blog.cherrypod.org/posts/13-reaching-the-outside-world/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/13-reaching-the-outside-world/</guid><description>Signal, Telegram, email, calendar, web search — wiring Sentinel into the channels I already use.</description></item><item><title>Part 12: The Trust Ladder</title><link>https://sentinel-blog.cherrypod.org/posts/12-the-trust-ladder/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/12-the-trust-ladder/</guid><description>Five trust levels, from full human approval to autonomous execution. Each one its own project.</description></item><item><title>Part 11: Teaching the System to Remember</title><link>https://sentinel-blog.cherrypod.org/posts/11-teaching-the-system-to-remember/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/11-teaching-the-system-to-remember/</guid><description>The hardest design problem wasn&amp;rsquo;t security — it was giving the planner context without breaking the privacy boundary.</description></item><item><title>Part 10: The Sandbox</title><link>https://sentinel-blog.cherrypod.org/posts/10-the-sandbox/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/10-the-sandbox/</guid><description>Every shell command runs in a disposable container. No state leaks, no network, no capabilities. Or so I thought.</description></item><item><title>Part 9: Working in Parallel</title><link>https://sentinel-blog.cherrypod.org/posts/09-working-in-parallel/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/09-working-in-parallel/</guid><description>Git worktrees unlocked parallel development — four feature branches merging simultaneously. Then the integration bugs arrived.</description></item><item><title>Part 8: The Night I Almost Changed Everything</title><link>https://sentinel-blog.cherrypod.org/posts/08-the-night-i-almost-changed-everything/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/08-the-night-i-almost-changed-everything/</guid><description>After finding 99 bugs, I wrote 230KB of analysis on whether to scrap the whole project and build something else instead.</description></item><item><title>Part 7: The Bug Hunt</title><link>https://sentinel-blog.cherrypod.org/posts/07-the-bug-hunt/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/07-the-bug-hunt/</guid><description>99 findings from a systematic security audit of my own code. Zero critical — but 16 high-severity.</description></item><item><title>Part 6: Burning It Down</title><link>https://sentinel-blog.cherrypod.org/posts/06-burning-it-down/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/06-burning-it-down/</guid><description>826 passing tests. A functional pipeline. I deleted all of it and rebuilt the package structure from scratch.</description></item><item><title>Part 5: Three Out of Five</title><link>https://sentinel-blog.cherrypod.org/posts/05-three-out-of-five/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/05-three-out-of-five/</guid><description>A security system that scores 3/5 on security is failing. The score became a to-do list.</description></item><item><title>Part 4: The First Real Test</title><link>https://sentinel-blog.cherrypod.org/posts/04-the-first-real-test/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/04-the-first-real-test/</guid><description>741 attack prompts, run overnight. The results changed the entire direction of the project.</description></item><item><title>Part 3: Why Sentinel Exists</title><link>https://sentinel-blog.cherrypod.org/posts/03-why-sentinel-exists/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/03-why-sentinel-exists/</guid><description>From a custom PC build to containers, local LLMs, and the paper that started it all — CaMeL.</description></item><item><title>Part 2: The Tinkering Years</title><link>https://sentinel-blog.cherrypod.org/posts/02-the-tinkering-years/</link><pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/02-the-tinkering-years/</guid><description>Raspberry Pis, broken Bitcoin nodes, and the moment AI stopped being a search engine and started being a development partner.</description></item><item><title>Part 1: The Privacy Panic</title><link>https://sentinel-blog.cherrypod.org/posts/01-the-privacy-panic/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/01-the-privacy-panic/</guid><description>How a Google Maps feature turned a close protection worker into a privacy obsessive — and laid the foundation for everything that came after.</description></item><item><title>Hello World — Introducing the Sentinel Blog</title><link>https://sentinel-blog.cherrypod.org/posts/2026-03-01-hello-world/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://sentinel-blog.cherrypod.org/posts/2026-03-01-hello-world/</guid><description>Introducing the Sentinel project blog — what it is, why it exists, and what to expect.</description></item></channel></rss>