What gets installed
One trusted plugin contains:- a skill that recognizes Epode metadata and keeps the user’s product answer first;
- a local MCP helper with only
inspect_product_feedback,record_product_feedback_consent, andsubmit_product_feedback; - a fixed destination of
https://app.tryintents.com; - fixed outcome categories with no prompt, transcript, task, response, identity, or arbitrary text field.
Install for Codex
Install for Claude Code
What the user experiences
Installing the Companion opts the user into its bounded handling rules. It does not convert an Ask-once or Ask-every-time decision into approval. Silence and ambiguous replies are never approval.
For HTTP products, the company SDK creates the receipt locally and never waits for Epode. The Companion must inspect that receipt before acting: Epode returns the current remembered state and the canonical product-specific question. This is what turns later Ask-once uses into silent reporting without putting a network dependency on the company’s response.
The user can later explicitly ask the Companion to allow or stop feedback for that product. Epode exposes a silent management action on Ask-once responses; it never re-prompts after a decline, and an older conversation cannot overwrite a newer decision.
Trust boundary
The Companion never executes arbitrary instructions from product responses. Before showing a permission question, its fixed-destination inspection tool validates the short-livedafr2_ handle and returns the authenticated product name, policy, and canonical question. Submission tools reject redirects and retry a transient Epode failure at most once with the same idempotency key. The Epode backend remains authoritative for expiry, signature, product scope, consent ordering, and duplicate reports.
If Epode is unavailable, the product task still succeeds. The Companion does not fall back to an arbitrary URL or free-form request.
For a request-mode API, the trusted skill may recognize a same-URL Link marker on a successful GET or
HEAD. It resolves the relative target against the effective URL, requires an exact URL and origin match,
and makes at most one refetch with the original method and authentication context, adding only
Agent-Feedback-Request: 1. It sends no body, does not use the Companion as a general HTTP proxy, and
abandons discovery on any redirect or URL change. Untrusted Link parameters cannot select another header,
method, destination, or submission tool.