integrations without capability boundaries in Groundwork leak privileges when tools inherit admin scopes.
an unisolated tool exposes inherited admin capabilities to the agent at the execution boundary.
enforcing per-tool capability boundaries at the runtime sandbox isolates privileges.
Show more
local patches diverging from upstream break agent runners when a minor version tags.
git merges overwrite execution hooks when pinned dependencies change signatures at the runner boundary.
maintaining a fork is always cheaper on day one than on day thirty.
Show more
three Claude Code sub-agents clobber context when writes hit an unpartitioned memory table.
worker two overwrites worker one's fix, and worker three validates against torn state with zero alerts.
scoping tool writes into isolated SQLite lanes stops collisions before retrieval.
Show more
unpartitioned MCP memory clobbers context when tools share a single table.
Cursor overwrites Claude Code writes, and test output bleeds into doc generation at the query boundary.
partitioning per-tool scopes in SQLite with sqlite-vec isolates write lanes across tools.
Show more
refresh token rotation in CareCompanion requires reuse detection at /v1/auth/refresh.
concurrent tabs or retries present spent tokens at the auth boundary past JWT_REFRESH_REUSE_GRACE_SECONDS.
deriving next JTI via HMAC and revoking the fam claim writes a refresh_token_reuse audit row.
Show more
aggressive context pruning breaks agents when eviction algorithms drop causal execution tokens.
lossy compression strips out earlier tool outputs, so the model hallucinates past parameters and passes garbage into subsequent calls.
deterministic indexing in local SQLite beats heuristic context truncation every time.
Show more
sandboxing tool outputs is useless if concurrent tools write to the same persistence layer without isolation.
one tool silently overwrites another's intermediate state, and the agent continues executing against corrupted records without missing a beat.
per-tool write lanes in SQLite prevent concurrent tools from stomping on shared state.
Show more
watching an $8M ARR founder break down what actually worked cuts out months of unforced errors.
@tibo_maker went through failed startups before winning Maker of the Year, and he publishes the full teardown every week for free.
Show more
giving tools broad runtime access creates silent permission leaks.
an unisolated tool inherits root capabilities from the host agent, and a runaway loop calls endpoints nobody meant to expose.
isolating tool-level capabilities and scoping writes per-tool keeps multi-step agent execution safe.
Show more
sponsored AI agents turn prompt injection into the product spec.
the moment an assistant gets paid to steer recommendations, hidden instruction overrides are just monetization. commercial steering breaks user alignment at the prompt layer.
Show more
16,246 lines in PR #
87# on nonprofit-os just to bind compliance checklists and tenant boundaries to explicit organization keys.
boring plumbing, but records never leak across org boundaries.
shared memory without isolation drops agent context when tools write to unpartitioned tables.
Cursor clobbers what Claude Code stored at the shared persistence layer.
enforcing per-tool scopes in SQLite with sqlite-vec guarantees isolated write lanes.
Show more
ditched hosted cloud vector APIs for local SQLite with sqlite-vec.
lookups dropped to 4ms with zero remote network calls and no monthly cloud bill. There are no connection timeouts or silent context drops.
Show more
agent memory accumulates garbage when concurrent Claude Code sub-agents share unpartitioned tables.
one worker overwrites active state mid-run, so downstream agents validate against the wrong spec.
isolated SQLite tables per tool and explicit merge passes stop context clobber.
Show more
swapping python-jose for PyJWT in CareCompanion cleared Trivy CVEs, but 30s leeway for future IAT silently stretched EXP.
at the auth boundary, global leeway lets logged-out tokens validate for an extra 30s.
dropping leeway and disabling verify_iat keeps strict EXP checks.
Show more
Rotating refresh tokens without reuse detection leaves downstream API keys exposed when a compromised token keeps minting sessions.
refresh tokens are marked spent with a short grace period for network retries, but presenting a spent token after grace revokes the entire token family and logs a refresh_token_reuse audit row. deriving replacement JTIs directly from parent tokens blocks concurrent token tree forks.
deriving child JTIs directly from the parent and revoking the entire token family on replay locks down downstream API keys at the auth boundary.
Show more
outpost fails silently on its first live deploy when unvalidated environment variables let production boot with dev fallbacks.
unset or identical JWT_SECRET and ENCRYPTION_KEY left cookies insecure, disabled DB TLS, and allowed session forgery. Railway defaulted the SIGTERM to SIGKILL window to 0s, killing in-flight jobs and stranding posts in a 'may already be live' state. at the routing layer, posts.update enforced approval checks, but the status write layer had no validation, causing publish race conditions.
preventing silent corruption required strict boot-time schema checks with an encryption canary, setting RAILWAY_DEPLOYMENT_DRAINING_SECONDS for graceful draining, and making the approval gate authoritative at the status write layer.
Show more
debugging inherited code is mostly hunting bugs that never threw an error.
the 6th audit on nht-webapp caught a pile of subtle bugs. the worst was an inherited 1:1 schema assumption that quietly overwrote historical records backwards onto old cases.
zero crashes, zero error logs.
Show more
running headless agents in the background gets dangerous without execution boundaries.
a worker inherits ambient admin capabilities, mutates state mid-run without an audit trail, and leaves downstream jobs running against corrupted records.
scoping permissions per-task and forcing atomic write leases is the only way to let background agents run unattended.
Show more
resuming an agent after a crash is useless if you restart from dirty state.
if a worker dies mid-tool execution and boots back up reading uncommitted memory, it acts on half-baked context and spirals immediately.
persisting atomic state checkpoints in sqlite before and after each tool call is the only clean way to recover without corrupting downstream tasks.
Show more