Help: Intents, what you asked for, signed¶‹ PreviousNext ›
When you ask your AI for something, d2 writes down exactly what you asked, signs it in your name and shows it to you. That record is an intent. Your AI may then do that one thing, even where its permissions alone would stop it, because you asked. Nothing else changes: everything you didn't ask for stays under the permissions as before.
Being built (P-1772, overrides P-1770). The design: DesignDomain.
Watch it¶
You ask, d2 writes down what you asked, and your AI may do exactly that; an unclear ask goes to the override box; a negation gives nothing.
What you see¶
Under each of your chat messages, d2 adds a grey line for every intent it read:
publish the landing pages
⇒ draft.publish(Landing, Landing1)
- The line is drawn by d2 from its own record, never from the message text, so an AI can't fake one or hide one.
- When your AI uses it, the line shows ✓ used by designer-152. An intent that ended is struck through.
- Tap the line to see what it covers, until when and who used it, and End to cancel it.
- Wrong? on the line tells d2 it misread you; you say what it should have been. Misreads are collected to improve the reader.
How d2 reads your message¶
d2 doesn't use an AI for this. It looks for words it knows, and it doesn't guess:
- First, the action on the kind of thing: publish a page, send an item, tag a topic.
- Then which one, if it can: an exact name (
Landing), an item number (1745,P-1745), or the page you point at (it, this, this page, here). - Anything it can't tell for sure is left as
?.
It reads nothing from questions ("did you publish it?"), negations ("don't publish yet"), reports ("I published Spec this morning") or conditions ("if the tests pass, release it").
Examples¶
| You write | Where you are | d2 shows |
|---|---|---|
| publish the landing pages | anywhere | ⇒ draft.publish(Landing, Landing1) |
| publish it | on DesignDomain | ⇒ draft.publish(DesignDomain) |
| send 1745 and 1748 | anywhere | ⇒ item.send(P-1745, P-1748) |
| drop P-12 and pause P-13 | anywhere | ⇒ item.drop(P-12) ⇒ item.pause(P-13) |
| hold P-1749 | anywhere | ⇒ item.hold(P-1749) |
| tell the monitor to stop dispatcher-15 | anywhere | @monitor ⇒ agent.end(dispatcher-15) |
| fix the typo in Help:Chat | anywhere | ⇒ topic.update(Help:Chat) |
| make the button bigger | on a page | ⇒ topic.update(?) |
| make the button on this page bigger | on Page:DocReview | ⇒ topic.update(Page:DocReview) |
| restore Spec from yesterday | anywhere | ⇒ version.restore(Spec, ?) |
| publish Landng (typo) | anywhere | ⇒ draft.publish(?) |
| don't publish it yet | anywhere | nothing |
| did you publish DesignDomain? | anywhere | nothing |
| go | after your AI asks "publish DesignDomain?" | nothing: say what you confirm, "publish DesignDomain" |
topic.updatecovers every way of changing a topic's text (writing it, adding to it, saving a draft), so you see one line, not three.@monitorin front means the intent is handed on: you asked your designer to tell the monitor, so the monitor may stop that one agent, and nothing else.
What an intent lets your AI do¶
- Exactly what it names: that action, on that target. "publish Landing" lets your AI publish Landing, not Pricing.
- Even past its permissions: if your AI's role is set to asks or you only (person) for that action, your intent counts as your word and the call goes through.
- Never: god-only actions, another person's things, or something the item's state forbids (a dropped item stays dropped).
- Details left open (
?on a version, a date) are filled in by your AI. A target left open (?on which topic) lets your AI do nothing on its own: it asks you first (below). - An intent ends when it's used (for one-off actions), when the chat ends, or after a couple of hours.
One-time overrides¶
When your AI is stopped from something you asked for (d2 read no intent, or left the target open), it can ask you in the chat. d2 itself then shows a box:
🔒 **d2 · Authorize override**: *designer-152* wants to **publish Pricing**. Stopped by: *permission topic.publish (you only)*. Why: *"you asked to publish the pricing page"*. **Allow once** · **Allow for this session** (the session is this chat) · **No** not from d2
- Only d2 draws this box. An AI can't write one into a message; anything that only looks like it is marked not from d2 and has no buttons.
- Allow once lets that one call through, within 10 minutes. A second time needs a second answer.
- Allow for this session (the session is this chat) lets your AI do that same thing on that same target as often as it needs until the chat ends (the session is the chat). Handy when it's editing one page over and over.
- No, or no answer, leaves it stopped.
The switches¶
On the Permissions page of each project, the Intents card:
- Intents (on by default). Off: d2 reads nothing in that project and the permissions decide alone, as before.
- One-time overrides (on by default). Off: a stopped AI stays stopped, with no box.
While d2 is still trying intents out, nothing is widened yet: d2 records what intents would have allowed, and you can see each decision in the audit log's Gate tab.