chore: allowlist MCP tools + add Learning #68 (rename → stale keystore)#19
Merged
Conversation
…t settings Add explicit allow rules for the conversational, read-only, and content-creation tools so Claude Code's auto-mode classifier stops flagging legitimate reply-to-DM sends as "unprompted external publishing." Destructive / cross-tenant tools (add_teams_member, delete_teams_message, share_file) remain absent from allow so the harness keeps gating them as a second check on top of the body's audit_log + sponsor-instruction requirements. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…store service name After the entraclaw → entrabot rename, Teams/email tools failed because the macOS Keychain cert was still under service "entraclaw" — invisible to git grep on the source tree. First migration attempt via security(1) -w silently hex-encoded the PEM, producing a "present but unparseable" cert. Round-trip via Python keyring was the correct fix. Captures four prevention rules: enumerate non-repo surfaces (keystore, state dirs, MCP configs, installed scripts) on every rename; never use security(1) -w as a transport for binary-ish data; argv leakage of secrets passed inline; validate the round-trip in the same process that wrote. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two unrelated small changes bundled — both surfaced during today's session.
.claude/settings.json— allowlist the conversational, read-only, and content-creation MCP tools (persona-sati + entraclaw) so Claude Code's auto-mode classifier stops flagging legitimate reply-to-DMsend_teams_messagecalls as "unprompted external publishing." Destructive / cross-tenant tools (add_teams_member,delete_teams_message,share_file) deliberately remain absent — the harness keeps gating them as a second check on top of the body's audit_log + sponsor-instruction requirements.docs/runbooks/hard-won-learnings.md— add Learning #68: theentraclaw → entrabotrename left the macOS Keychain entry under the old service name (entraclaw), invisible togit grepon the source tree, breaking every Teams/email tool with "Blueprint private key not found." First migration attempt viasecurity(1) -wsilently hex-encoded the PEM, producing a "present but unparseable" cert. Round-trip via Pythonkeyringwas the correct fix. Four prevention rules captured: enumerate non-repo surfaces (keystore, state dirs, MCP configs, installed scripts) on every rename; never usesecurity(1) -was a binary-ish data transport; the-w "$SECRET"argv-leakage concern; validate the round-trip in the same process that wrote.Test plan
.claude/settings.jsonparses as valid JSON (python -m json.tool < .claude/settings.json)mcp__entrabot__send_teams_messageto a fresh DM chat doesn't get blocked by auto-moderequire_body_prompt.pyPreToolUse hook) still fires for the gated tools — the allow list shouldn't bypass the body's own checksdocs/runbooks/hard-won-learnings.mdrenders cleanly in mkdocs preview if the doc site is the target audienceNotes for reviewer
bdb28bc("chore(claude): allowlist persona-sati MCP tools to prevent non-interactive REJECT (chore(claude): allowlist persona-sati MCP tools to prevent non-interactive REJECT #11)") — same shape, broader surface.🤖 Generated with Claude Code