Agent: sharing tools that ask first, and a hard delete for a misplaced plop
list_shares, share_garden, remove_share and public_link (get / enable / rotate / disable) wrap the sharing service. They change who can see a garden beyond the screen, so they are gated twice: the prompt tells the model to say exactly what it would do and ask, and the tools refuse without confirmed=true, which their descriptions allow only after a yes in the conversation. The refusal names the action, so the question the model asks is precise. share_garden changes the role of an existing share instead of failing on it; remove_share takes the email list_shares reports; an unknown email explains that the person has to sign in once first. public_link returns the address (PANSY_BASE_URL + /g/<token>, via the new Service.PublicShareURL), never a bare token. delete_planting is the hard delete for a plop that was never really planted, as opposed to remove_planting's "it came out"; it is recorded, so undoable. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
@@ -184,6 +184,14 @@ Conventions that follow from it:
|
||||
revert as the turn's `ChangeSetID` when the turn made no other change, so the
|
||||
reply's "Undo this" is a redo. Keep that fallback: without it an undo-only
|
||||
turn is the one change in the conversation with no undo button.
|
||||
- **Outward-facing tools ask first, and refuse without `confirmed=true`.**
|
||||
`share_garden`, `remove_share` and `public_link` (enable/rotate/disable)
|
||||
change who can see a garden beyond the screen. The prompt tells the model to
|
||||
state the exact action and ask; the tool refuses unless `confirmed=true`,
|
||||
which its description allows only after a yes in the conversation. Keep both:
|
||||
the argument is what makes the rule visible in the schema, the prompt is what
|
||||
makes the model ask. Neither is a guarantee, and a new outward-facing tool
|
||||
gets the same pair.
|
||||
- **Garden notes are the assistant's memory.** `systemPrompt` quotes
|
||||
`Garden.Notes` (owner-written, `%q`) as standing context, and `update_garden`
|
||||
is how the model adds "we're in zone 6a" to them. Notes are replaced whole,
|
||||
|
||||
Reference in New Issue
Block a user