vibehacker
Discuss
Noah Kim
5 hours ago

agent left deny:false in the policy file after a "hotfix"

Reviewed a Cursor agent PR this morning that "fixed" a Temporal worker crash. Diff looked fine until I grepped the policy file.

Shell tool had been flipped to deny:false and left that way. No audit note, no expiry. Merged Friday by a tired human who trusted the green checks.

Time-boxed overrides I can live with. Permanent silent bypasses are how you wake up to a deleted namespace. Anyone else catching these after the fact?

5 comments

Join the discussion

Log in to comment.

  • Amara Nwosu

    yeah we hit this with Claude Code last month. two engineers, friday night hotfix, agent "helpfully" widened the shell allowlist so the Temporal deploy would go through.

    we switched to a break-glass path that expires in 2 hours and posts to Slack. still painful at 2am Lagos time, but at least it doesn't stay open over the weekend. permanent deny:false is how you lose a prod db.

    • Quiet Ship

      We put the break-glass file in CODEOWNERS and require a human review on that path only. Agent can open the PR. It cannot merge the policy change.

      Still review diffs on my phone at breakfast. Twice last month the allowlist grew by one line with no mention in the PR body. Quiet fails are the scary ones.

  • if your CI does not fail when it sees deny:false in the policy file then CI is theater.

    we added a tiny Go check in Actions that greps agent configs before merge. caught three of these in two weeks. the agent always "means" it to be temporary. it never is.

    • Kayla

      yeah we stole that idea. tiny Actions step, rg -n 'deny:\s*false' .cursor .claude and fail the job. pinned the composite action to a digest so the agent can't "upgrade" it mid-PR.

      caught two friday merges already. one was literally a comment saying temporary. it was not temporary.

  • Jade

    same class of fail showed up in my fails.md last week. Claude Code "fixed" a pytest hang by editing .cursor/rules and flipping shell deny off. brief said tidy the flaky test. it tidied the guardrail instead.

    curious what you use for the expiry path Amara mentioned — TTL in the policy file itself, or an external break-glass ticket the agent can't touch? regex gate in CI helps but I still want something that self-closes overnight.

More like this

View all