| name | Envelope |
| description | Classify any incoming directive as Ship / Ask one focused question / Propose first. Forces a sharp decision instead of a multi-option survey to the principal. The default failure mode for agents is treating ship-work as ask-work (over-surveying) or treating propose-work as ship-work (rushing irreversible changes). This skill prevents both. |
Envelope
Sort an incoming request into one of three envelopes โ A: Ship, B: Ask one focused question, C: Propose first โ and act accordingly.
When to use
- The principal gives a directive and you're tempted to respond with multiple clarifying questions
- The work involves a fork in the road and you're tempted to present multiple options
- Before posting any "should Iโฆ?" question
- Triggered by Caddy on prompts like: "should I", "before I start", "is this clear", "is this OK", "couple options", "two paths", "ambiguous", "not sure if you want", "want me to", "ship vs ask", "decision tree", "fork in the road"
The decision tree (run top-to-bottom)
1. Is the request unambiguous?
YES โ step 2
NO โ can I resolve the ambiguity by reading code/data/docs?
YES โ resolve, then step 2
NO โ ENVELOPE B: ask exactly one focused question with options spelled out
2. Is the change reversible?
YES โ step 3
NO โ is the irreversibility expensive? (data loss, schema migration, deploy, broken contract)
YES โ ENVELOPE C: propose first, wait for sign-off
NO โ step 3
3. Is the change bounded to a known surface area?
YES โ step 4
NO โ can I re-scope to a bounded version?
YES โ propose the bounded version + ship that
NO โ ENVELOPE C: propose first
4. Do I have full context to make the change correctly?
YES โ ENVELOPE A: SHIP
NO โ load missing context (search/read/query); re-evaluate
5. After shipping: did verification pass?
YES โ declare done with summary
NO โ loop back to step 4 (more context, different approach)
Envelope rules
Envelope A โ Ship it
- Clear request, known surface, reversible, low rollback cost
- Action: just do it. Do not ask "should I proceed?" after permission was already given. Asking permission for things you've been authorized to do wastes the principal's attention.
Envelope B โ Ask exactly one focused question
- 2+ reasonable interpretations that produce meaningfully different outcomes
- Cannot resolve by reading code/data
- Action: one surgical question with options spelled out. Not "what do you want?" โ "do you want X or Y? Consequences are A vs B."
- Never ask a question you can answer yourself by reading the code.
Envelope C โ Propose, don't act
- Irreversible OR expensive: data deletion, schema migration, dependency swap, broad refactor, deploy
- Implications across many files/systems
- Genuinely a product decision dressed up as technical
- Action: describe what you'd do, what it costs, what it breaks, what you'd recommend. Wait for the call.
Escalation triggers (auto-bump from A โ C)
- Change spans more than ~5 files โ consider proposing first
- Touches a public API or shared type โ consider proposing first
- Schema migration required โ propose first by default
- Deleting/modifying user data โ propose first, always
- Production-only code paths โ propose first
- New paid dependency โ mention it, ship if small
The bias
- Cheap and reversible โ ship.
- Cheap and ambiguous โ one focused question.
- Expensive or irreversible โ propose first.
Output format
When triggered, output a one-line classification before acting:
[ENVELOPE A โ SHIPPING] {1-line description}
or
[ENVELOPE B โ ONE QUESTION] {the question, with X-or-Y options + consequences}
or
[ENVELOPE C โ PROPOSAL] {what I'd do, cost, blast radius, recommendation}
Then execute. No second-line "is this OK?" โ that defeats the entire purpose.
Anti-patterns this prevents
- Multi-section essays asking 5 alignment questions when the spec is the answer
- "Two paths, A or B?" surveys when you can pick one and defend it
- Asking permission for an obvious, reversible edit
- Shipping irreversible work without proposing first
- Posting status updates as deliverables ("I'm reading the docs nowโฆ" โ silence until state change)