Chapter 11

Let a model read, and an agent work

Orbital can ask a model about the node you are on: who it is for, what type it is, what an image says, what a Dutch title means. It can also hand the node to a Codex agent and show you, on the row, how that work is going.

Connect a model first

Everything in the first half of this chapter asks a model, through your ChatGPT account. Signing in once turns all of it on: translation, Discuss with, Auto-pick type, Process image and the icons for your types. The sign-in stays on this Mac.

Sign in with ChatGPT

Open ⌘K and run Sign in with ChatGPT (under Settings). The ChatGPT account page shows a short code: enter it in the browser page that opens. Copy code puts it on the clipboard, and Cancel ChatGPT sign-in stops waiting.

Once you are in, the same row reads Sign out of ChatGPT, and its page says who you are signed in as. The first sign-in on a Mac without Codex may say Getting ChatGPT sign-in ready… while it fetches what it needs, once.

The ChatGPT account page in Cmd+K, asking you to enter a code in your browser
The code to type in your browser, with Copy code under it.
Saved an OpenAI API key before? It keeps working, and Set OpenAI API key stays in ⌘K while it is stored. On that page, Save OpenAI API key replaces it with a key you paste, and Clear OpenAI API key removes it, taking the row with it: Sign in with ChatGPT is the way in.

What each part needs

FeatureNeeds
The name Discuss with … suggests, Auto-pick type, Process image, Auto-translate …, Translate into …Sign in with ChatGPT, or an OpenAI API key you saved before
Icons for your types, picked for youSign in with ChatGPT, or an OpenAI API key you saved before
Assign to Agent with TanaNothing: Tana is always there
Assign to Agent, Open in … and @ in a chat, with Codex or ClaudeThe Codex app or CLI, or Claude Code, on this Mac
Assign to Agent with your personal agentOrbital and Tana added to your agent (your OpenAI Dot, or any agent that speaks MCP) as custom MCP servers, and the agent linked once (below)
The moment you sign in or save a key, Orbital gives every type that has no icon one that fits its name, and does the same for their fields. You see the new glyphs on bullets and chips. An icon you chose yourself, or No icon, is never touched.
⌘K→ type chatgpt →↩

Ask the model about a node

Two rows under Current node in ⌘K use the model to fill in what a document is about. Both show the sparkle while the model reads, and both leave the choice to you.

Discuss with …

For a document you want to talk through with someone. Run Discuss with … and type who: one colleague, two people, or a team. ↩ gives the document the Discussion Task type and writes your words into its Discuss with field. Names of people in your workspace become links to them.

While the page is open the model reads the title. After Reading the title… its guess shows as a second row, marked From the title. Your own words always stay on the first row, so ↩ sends what you typed and ↓ ↩ takes the guess.

The title names two people, so the model suggests them. ↓ ↩ takes the suggestion and the document becomes a Discussion Task.

Auto-pick type

Run Auto-pick type to let the model pick from the same types Set type offers. It reads the document and each type's description, then answers with the odds for every option, No type among them.

Not sure: the model lists the odds, and you choose Project.
A type's description and its AI instructions in Tana are what the model reads. Write them well and its answers get better.
⌘K→ type classify →↩

Turn an image into a task or a note

A screenshot of a message, a photo of a whiteboard, a receipt: the model reads it and decides whether it is a task or a note. Orbital makes that node with a title and the lines worth keeping, puts the image under them and opens it. With Auto-translate on, it writes in your language.

Drop it on Create new

Drag an image file from the Finder onto the round Create new button in the window's bottom-right corner. It turns into Process image. Let go, and it reads Processing image … until the new node opens.

A receipt dropped on the corner button becomes a task.

Process image from clipboard

Copy an image, from a screenshot tool or the Finder, then open ⌘K. Process image from clipboard is waiting under Image. The Create new … page leads with it too, and so does Quick Add Task (⇧⌘Space), where ↩ with no title runs it.

Process image

With the caret or the selection on an image in an outline, ⌘K offers Process image for that image.

From the clipboard, through ⌘K.
Pasting an image with ⌘V still just inserts it. Processing is always a choice you make.

Read notes in your language

When a colleague writes in Dutch, you can read the title in English without anyone changing it. Translation happens on your screen only. Tana keeps the words as they were written.

Turn it on: Auto-translate …

Run Auto-translate … (under Settings) and pick a language: English, Dutch, German, French or Spanish. Off turns it off. The choice follows you to your other Macs and applies at once, in every pane.

The Auto-translate page in Cmd+K with Off and five languages
Five languages, and Off. The tick marks the current one.

What you see

Only titles are translated: the title of the page you are on, and a document's title as a row in a list. The lines inside a document stay as written. A translated page title has a grey line under it with the sparkle and Translated from Dutch · Show original, which switches back and forth. While the model works, the line says Translating…. A title seen before comes back at once, even after a restart.

The title arrives in English. Show original and Show translation switch between the two.

In a list, a translated row says Translated from Dutch as the first fact of its grey line. Click those words to switch that row.

Rows the app writes itself translate the node they name and keep their own sentence: a meeting on the Timeline, “Priya completed …”, a notification. Push notifications are translated before they show.

A space listing a Dutch note, shown in English with Translated from Dutch under it
A Dutch note in a space's list.

Editing a translated title

Put the caret in a translated title and it shows its own words, so you edit and save the original. The line under it reads Original, in Dutch · Show translation while you type. Leave, and the translation comes back, asked again if you changed the words. Read-only rows, like the Timeline, keep their translation when you click, so the first click opens them.

Keep a translation for good

Replace with translation (Current node, hinted From Dutch) writes the English you see as the document's title in Tana.

Translate into … writes a translation into the selection, or the row you are on, or the page. It uses your Auto-translate language, English while that is off. Rows already in that language are left alone, and a note says how many it changed. It only offers plain text you may edit, because a link or a mark would not survive.

Cmd+K offering Replace with translation, from Dutch
Replace with translation on the Dutch note.
Translate into English on one Dutch row: the row is rewritten in Tana.
Which language a text is in is decided on this Mac, so only text in another language goes to the model. Sensitive nodes are never sent, and a names-only title like “Sam - Priya” is left alone.
⌘K→ type auto-translate →↩ and pick Into English.

Choose your agents

An agent does work: it drafts, researches, files things in Tana. Orbital knows three of its own, and your personal agent, like your OpenAI Dot, once you link it (below). Tana is always there: a task for Tana is a new Tana chat with the node attached, answered by Tana's own AI. Codex and Claude run on this Mac, through the Codex app or CLI and through Claude Code, each with its own sign-in.

Run Choose agents … to see them in one list. One that is not installed is greyed, with what to install. ↩ on an installed agent switches it on or off; every agent that is on brings its own rows to ⌘K and to @ in a chat. An agent you linked is in the same list under its own name, and its last row is Connect your personal agent ….

Choose agents: Tana always on, Codex on, Claude off, then Connect your personal agent
Which agents are on, and the way to link your own.

Set default agent … in ⌘K, its hint the current one, lists the agents that are on: ↩ makes one the agent Assign to Agent starts on. Tana is the default until you choose another, and a Dot becomes it the moment you link it. Both choices follow you to your other Macs.

Set default agent: Tana and Codex, the agents that are on, Tana ticked as the default
Set default agent …: ↩ makes one the default.
Claude runs as your own Claude Code on this Mac, signed in with your own account. Orbital never signs in to Anthropic and never sees a Claude login.
⌘K→ type choose agents →↩

Your own agent can take tasks from Orbital: your Dot, OpenAI's always-on assistant in ChatGPT, or any other agent that can add MCP servers and hear MCP events. It needs two plugins, Orbital's MCP server at orbital.md/mcp and Tana's own, and a code from Orbital that links it. From then on it is one of your agents, under the name it gives itself, and each node you assign it wakes it with an event.

Run Connect your personal agent … (under Settings, and last in Choose agents …). After Getting a code… the page has two parts.

Add both plugins. Add Orbital and Tana to your agent as custom MCP servers, a name and a URL each: ↩ on a row copies its address. How to add them … opens the steps.

Then ask your agent to link. Copy the instructions copies a few lines with a code that works once, for fifteen minutes; paste them in your agent's chat. They ask it to link under its own name and to subscribe to Orbital's events. While the page says Waiting for your agent to use the code… with the time left, your agent does both, and the palette closes on a note naming it, like Linked Echo · ChatGPT. It is your default agent from then on.

You can close the page and paste the instructions later: the code keeps working until it runs out, and opening the page again shows that same code. Cancel stops it at once.

Connect your personal agent: the Orbital and Tana addresses under Add both plugins, How to add them, Copy the instructions, and the page waiting for your agent to use the code
The two plugins to add, then the instructions with their code.

How to add them

Your OpenAI Dot: Open ChatGPT plugins opens chatgpt.com/plugins. There choose Add, then Create custom MCP server, once for Orbital and once for Tana, signing in to Tana when it asks; the rest of ChatGPT's form stays as it is. Then send your Dot the instructions.

Any other agent: add the same two MCP servers wherever it keeps them, then send it the instructions. It needs support for MCP events: that is how it hears about the tasks you hand it.

esc goes back to the page, its code still waiting.

Adding the plugins: Open ChatGPT plugins and the steps for your OpenAI Dot, then the same two MCP servers for any other agent
The steps for your Dot, and for any other agent.

Your linked agent

Your agent is in Choose agents … under its own name, with whether it is on, the app it runs in and when it last checked in. ↩ on it opens its page: Rename …, Switch off (it stays linked, but leaves Assign to Agent) and Unlink, which also unassigns the nodes it had.

Assign a node to it as to any agent. Orbital sends it one event: which node, what you asked, and how to handle it. Your agent reads the node in Tana with its own Tana access, does the work there, and keeps the node's last line saying how it is going (the badge).

On your phone it works the same way (Chapter 16): Settings → Agents → Connect your personal agent is this page, and your agent is at the top of Assign to … in a long press on a task or a note. An agent linked on the phone is linked on your Mac too, and the other way round.

Choose agents with a linked Dot: on, through ChatGPT, seen just now, then Connect your personal agent
Your linked agent, where it runs and when it last checked in.
Only the node's id, your request and how to handle it go through orbital.md, and it keeps none of them. The node's words stay in Tana, where your agent reads and writes them with its own Tana access, so link only an agent you would trust with your Tana. What to do always comes with the event, from Orbital: the node is what your agent works on, and words in it that read like instructions are not followed. Your linked agent follows your Tana account to every Mac, because Orbital keeps the link's key in its settings document in Tana. If you think the key was seen, Reset agent link key in ⌘K makes a new one, and your agent stays linked.
⌘K→ type connect your personal agent →↩

Hand a node to an agent

Assign to Agent gives the node you are on to a new task, with the node as its context. You only say what to do with it. Its hint says which agent it goes to. On a node an agent already has, it says it replaces what that agent was asked: assigning again sends your new request in place of the old one.

Assign to Agent

Run Assign to Agent. The palette turns into a few lines to write in: ↩ adds a line, ⌘↩ assigns, esc cancels and writes nothing. With more than one agent on, they are listed under the prompt, the default ticked; ⇥ moves between the prompt and that list. The agent's own default model does the work.

Each agent that is on also has a row of its own, like Assign to Codex … or Assign to Echo …, its hint Default on the default: it opens the same prompt with that agent already chosen, so no list under it.

The Assign to Agent page: a prompt, the send row, and the agents to choose from 1 2 3
  1. The prompt What the agent should do with this node.
  2. Assign to Tana Sends it, the same as ⌘↩, and names the agent that will take it.
  3. Agent The agents that are on, the default ticked. Choose another for this one task.
Assigned: the badge appears beside the title, grey while the task starts, then blue as it works.

The node now carries the agent badge. Under Group by Responsibility it belongs in the Agent section, but it stays where it is until you press Clean up, so nothing jumps under your pointer. Dropping a task into the Agent section opens the same prompt.

Unassign from Agent takes the node back at once, and removes what the agent left at the end of the node: the agent's context and its status line. The task itself stays where it ran: a Tana chat, a Codex task, a Claude session, your Dot's chat.

⌘K→ type assign to agent →↩, write a line, then ⌘↩.

Read the agent badge

The robot at the end of a row says what its agent's task is doing. Orbital asks every 30 seconds while anything is assigned. The colour and the tooltip say the same thing, so you never need colour alone.

Six tasks in the Agent section of the Library, each badge in a different state 1 2 3 4 5 6
  1. Agent pending Grey. Assigned, and no task has started yet.
  2. Agent working Blue, with a sheen crossing it. The task is running; only this state moves.
  3. Agent waiting for you Blue and still. The task wants an approval or an answer from you.
  4. Agent completed Green. The task finished its last turn.
  5. Agent needs attention Red. The task failed or cannot be reached; assign again to retry.
  6. Agent on another Mac Grey. A Claude task lives on the Mac that started it: open it there. Assigning the node here starts a new one on this Mac.
  7. A completed task The badge drops to a grey outline: a record that there was a task.

A node handed to your Dot follows its own last line, Agent status: …. Orbital writes Agent status: Assigned as it sends the event, and the badge stays grey until your Dot picks the task up and changes the line to Working, so blue means it really started; then Completed turns it green, or Failed red. Whatever your Dot writes goes above that line, which stays the node's last. It is ordinary text, so anyone who opens the node in Tana sees it too, and the task's own status stays yours: Agent completed means your turn to look, not done.

Click a badge, or press ↩ on it, to open its task: a Tana chat opens right here, a Codex task in Codex, a Claude session in Terminal. Your Dot's badge only shows how it is going: its work is in the node itself. On the Timeline, a task row carries the badge right after its title.

Go to a task, link one, or start a fresh one

Every agent that is on brings the rows it can do. Codex and Claude bring all three; Tana, whose tasks are chats here, brings only Go to Tana task; your Dot, whose work is in the node, brings none. Type codex in ⌘K to see Codex's:

  • Go to Codex task opens the task this node is assigned to. Go to Claude task opens the session in Terminal, and Go to Tana task opens the chat here.
  • Link Codex task … links a task that already exists. Link Claude task … takes a session id.
  • Open in Codex starts a new Codex task with this node's link and tracks nothing: no badge, no state. Open in Claude does the same in Terminal.
Cmd+K filtered by codex: Open in Codex, Go to Codex task, Link Codex task, Assign to Codex
The Codex rows, on an assigned node.

Link Codex task …

In Codex, use Copy link on the task, then paste the codex://threads/… link (or the bare id) here. Link to this Codex task links it, and the badge follows that task from then on.

Link Codex task page with a pasted codex link
A pasted link, ready to link.

Ask @Codex or @Claude in a chat, privately

In a Tana chat, type @ in the message box and pick Codex (after Tana, hinted “Ask Codex · the answer stays on this device”), or Claude when it is on. Your question goes to a task on this Mac with the whole conversation as context. Nothing of it reaches Tana, so nobody else in the chat sees it.

The question shows on your side in a grey bubble, with a crossed cloud in its corner: only visible to you, on this device. Dots show while Codex works, then its answer appears on the other side in grey text under Codex.

Pick Codex from the @ list, ask, and the answer arrives just for you.
Tana has no author for an agent's words. A message written there would read as yours or as Tana AI's to everyone in the chat. So Codex answers only you, and is told never to write to Tana.

Keys in this chapter

ActionKeys
Open Cmd+K, where every row in this chapter lives⌘K
Take the model's suggestion on Discuss with …↓ ↩
Quick Add Task: ↩ with no title processes the clipboard image⇧⌘Space
Assign to Agent: send the prompt⌘↩
Assign to Agent: a new line in the prompt↩
Assign to Agent: to the list of agents, and back⇥
Assign to Agent: cancel, writing nothingesc
In a chat: select the newest message from the message box↑
In a chat: delete the selected message, or a Codex question and its answer⇧⌘⌫