Part 53: Matrix
Sentinel needed a self-hosted messaging channel — something fully under our control, with no dependency on third-party services. Matrix fits.
Part 52: The Refactor
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.
Part 51: Did It Actually Work?
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.
Part 50: Pictures, Videos, Documents
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?
Part 49: Real-World Data
Sentinel could browse the web. It could read files and write code. But it couldn’t answer ‘what’s the weather?’ without fabricating something. Time to give it real data backends.
Part 48: Named Anchors
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?
Part 47: Wrong Language, Wrong File
LLMs don’t always respect file boundaries. Raw CSS lands in HTML files, JavaScript appears without script tags. Building a detector to catch it.
Part 46: Seventy-Eight Findings
A systematic audit of every API endpoint, middleware layer, and frontend component. Seventy-eight findings. Some embarrassing. All fixable.
Part 45: More Than One User
Sentinel was built for one person. Making it work for multiple users meant rethinking auth, isolation, and how the system tracks who’s who.
Part 44: Did It Actually Work?
Tasks were reporting success based on whether steps completed, not whether the goal was achieved. Building a verification system to tell the difference.
Part 43: Learning From Plans
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.
Part 42: Building Websites
New planner, new classifier, new patching tool. Putting it all together to iteratively build and modify websites through conversation.
Part 41: file_patch
Full-file regeneration breaks at scale. The new tool generates only the changed fragments and splices them deterministically.
Part 40: The Model Upgrade
Tested three planner models on identical tasks. The surprise: upgrading the planner fixed the worker’s bugs.
Part 39: Real-World Testing
Programmatic benchmarks said the system worked. Typing real prompts told a different story.
Part 38: The Classifier Swap
The LLM classifier was slow, expensive, and occasionally wrong. A deterministic keyword matcher replaced it in microseconds with zero GPU.
Part 37: Trust Laundering
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.
Part 36: The Injection Benchmark
A custom-built injection benchmark with real email, real calendars, real web pages. No simulated backends. 130 tests designed to break the trust architecture.
Part 35: The Stress Test
38 hours, 1,588 probes, zero human intervention. The first comprehensive validation with everything deployed.
Part 34: Tightening the Screws
The features were built. Now came the hardening — FP reduction, credential scanner expansion, metadata enrichment, and 600 new tests before the big run.
Part 33: The Invisible Bottleneck
Qwen was silently spilling VRAM to CPU. Fixing the KV cache quantisation unlocked more context and faster inference.
Part 32: Keeping the Lights On
Reboot resilience, health watchdogs, compose locking, and the infrastructure that keeps an autonomous system running unsupervised.
Part 31: Thinking on Its Feet
Dynamic replanning and failure recovery — the planner adapts when reality doesn’t match the plan.
Part 30: Multi-User
JWT authentication, per-user trust levels, encrypted credentials, and proof that two users can’t see each other’s data.
Part 29: Learning From Experience
Cross-session episodic memory — the system remembers what worked, what failed, and applies that knowledge to future tasks.
Part 28: Bug Hunt Three
The third full security audit. 13 batches of fixes, from API hardening to dead code removal.
Part 27: Hardening the Database
Row-level security, role separation, and a red team that tried SQL injection, LISTEN/NOTIFY attacks, and privilege escalation through PL/pgSQL.
Part 26: Knowing Who You Are
A contact registry, a user model, and a confirmation gate — the groundwork for multi-user and the end of ‘user 1 does everything.’
Part 25: The Code Fixer
LLMs generate broken code. The code fixer catches it before it hits the filesystem — 7 auto-fixers across 10+ languages.
Part 24: Breaking Up the Monolith
The orchestrator was doing too much. Six phases to extract it into focused modules without breaking a single security invariant.
Part 23: The Database Migration
SQLite to PostgreSQL. Store protocols, async rewrite, data migration, and then ripping out every line of SQLite code.
Part 22: The Router
Not every request needs a frontier model to plan it. The router classifies incoming messages and takes the fast path when it can.
Part 21: The Second Audit
199 findings across 7 units. 19 fix batches. 7 systemic improvements. The most thorough review the codebase has ever had.
Part 20: The Interface
Giving Sentinel a proper UI — dashboard health cards, chat, memory browser, routine management, and a GSP mascot.
Part 19: Where It Stands
TL4 is live. The system is autonomous. It’s not finished — not even close.
Part 18: The False Positive Problem
Without a human to override scanners, false positives become functional failures. Risk decay was the fix.
Part 17: Flipping the Switch
TL4 activation. One environment variable, one container rebuild. Sentinel starts making its own decisions.
Part 16: The Sandbox Wasn't Real
Every sandbox field was snake_case. Podman’s API requires PascalCase. HTTP 201 Created. Zero containment.
Part 15: The Red Team
Four attack scenarios, including a simulated compromised planner. Six clean runs before trusting it.
Part 14: The Benchmark That Broke Everything
1,136 adversarial prompts. A 62% false positive rate on multi-step plans. The ascii gate was the culprit.
Part 13: Reaching the Outside World
Signal, Telegram, email, calendar, web search — wiring Sentinel into the channels I already use.
Part 12: The Trust Ladder
Five trust levels, from full human approval to autonomous execution. Each one its own project.
Part 11: Teaching the System to Remember
The hardest design problem wasn’t security — it was giving the planner context without breaking the privacy boundary.
Part 10: The Sandbox
Every shell command runs in a disposable container. No state leaks, no network, no capabilities. Or so I thought.
Part 9: Working in Parallel
Git worktrees unlocked parallel development — four feature branches merging simultaneously. Then the integration bugs arrived.
Part 8: The Night I Almost Changed Everything
After finding 99 bugs, I wrote 230KB of analysis on whether to scrap the whole project and build something else instead.
Part 7: The Bug Hunt
99 findings from a systematic security audit of my own code. Zero critical — but 16 high-severity.
Part 6: Burning It Down
826 passing tests. A functional pipeline. I deleted all of it and rebuilt the package structure from scratch.
Part 5: Three Out of Five
A security system that scores 3/5 on security is failing. The score became a to-do list.
Part 4: The First Real Test
741 attack prompts, run overnight. The results changed the entire direction of the project.
Part 3: Why Sentinel Exists
From a custom PC build to containers, local LLMs, and the paper that started it all — CaMeL.
Part 2: The Tinkering Years
Raspberry Pis, broken Bitcoin nodes, and the moment AI stopped being a search engine and started being a development partner.
Part 1: The Privacy Panic
How a Google Maps feature turned a close protection worker into a privacy obsessive — and laid the foundation for everything that came after.
Hello World — Introducing the Sentinel Blog
Introducing the Sentinel project blog — what it is, why it exists, and what to expect.