fix(server/addie): verify object + tool before offering mutations#4285
Draft
fix(server/addie): verify object + tool before offering mutations#4285
Conversation
…uting (#4281) Adds two rules and a URL registry entry to prevent Addie from offering to mutate objects that don't exist, then escalating when she can't act. https://claude.ai/code/session_01N7nwk7MBtiepzAtcV2s3M4
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.
Closes #4281
Third documented instance of Addie offering to mutate a named object that doesn't exist ("update the prospect record for Spreaker"), then escalating when she discovers she can't act. The root pattern: Addie misclassifies a neutral declarative fact ("X is part of Y") as a mutation intent, invents a phantom object, offers to update it, the user agrees, and Addie escalates when no tool can execute. This PR operationalizes the feedback already in memory (
feedback_addie_no_phantom_tools,feedback_addie_tools_just_work) as concrete rules.Non-breaking justification: adds new sections to existing Markdown rule files (
behaviors.md,constraints.md) and one entry tourls.md. No TypeScript changes, no protocol schema changes, no public API surface touched. Changeset is--empty(server-only).Changes
constraints.md— "Verify Object + Tool Before Offering a Mutation"Hard prohibition triggered by any message containing mutation-signaling verbs applied to a named entity. Decision procedure:
add_prospectto non-admins).Also adds: "neutral declarative facts are not mutation requests" — when a user asserts a world-state rather than requesting an action, acknowledge and ask, don't paraphrase as an offer.
behaviors.md— "Brand-Ownership Intent: Route to Brand Builder"When a user states domain/company ownership ("X is part of Y"): never invent a prospect record. Look up the parent domain. If the caller's org owns it, offer
parse_brand_properties→ confirm →import_brand_properties; if a runtime auth error fires, fall through to step 4. If the org doesn't own it, route toagenticadvertising.org/brand-builder?domain=<owner>. Do not escalate.urls.md— addagenticadvertising.org/brand-builderBrand builder (
server/public/brand-builder.html) is a real page that accepts?domain=to pre-load a domain. Added to the canonical URL registry so the brand-ownership routing rule can reference it without violating the "do not emit unregistered URLs" constraint. CI link checker will validate on merge.Pre-PR review:
"account search tool"→query_prospects/get_account;Apex Radionot on approved fictional-names list →Apex Athletic(or you lack the import tools)dead-code clause replaced with runtime auth-error handling; "neutral declarative facts" detector changed from syntactic (no imperative verb) to semantic (user asserting world-state vs. requesting action)Session: https://claude.ai/code/session_01N7nwk7MBtiepzAtcV2s3M4
Generated by Claude Code