[{"data":1,"prerenderedAt":45},["ShallowReactive",2],{"$f2gwl0r854v7ic":3},{"href":4,"title":5,"description":6,"kind":7,"mark":7,"planned":8,"contributors":9,"provenance":7,"html":10,"headings":11},"\u002Fdocs\u002Fwork\u002Fchat","Chat and plans","Talk to a member, have it start work, watch the work move, and answer what it asks, in one thread.",null,false,[],"\u003Ch2 id=\"what-a-chat-is\">What a chat is\u003C\u002Fh2>\n\u003Cp>A chat is one conversation with one member. The member knows who it is (its role and persona), which tasks it can\nrun, and which of the OS's own tasks anyone may start, so it knows what it can actually do for you before you ask.\u003C\u002Fp>\n\u003Cp>You can keep several chats with each member: \u003Cstrong>History\u003C\u002Fstrong> in the thread's header lists them, and \u003Cstrong>+\u003C\u002Fstrong> starts a new\none. A chat you have not read since the member replied is counted in the \u003Cstrong>Chat\u003C\u002Fstrong> badge, per member, and per chat\nin History.\u003C\u002Fp>\n\u003Ch2 id=\"when-you-can-send\">When you can send\u003C\u002Fh2>\n\u003Cp>The message box is usable only when sending makes sense, so there is one obvious next step instead of a queue of\nmessages:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>You cannot send while\u003C\u002Fth>\n\u003Cth>Because\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>The member is replying\u003C\u002Ftd>\n\u003Ctd>One message at a time; a second is refused.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Work you asked for is still running\u003C\u002Ftd>\n\u003Ctd>The thread shows it moving instead: how long it has run, and its latest step.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>A decision from that work is waiting on you\u003C\u002Ftd>\n\u003Ctd>The decision is the next thing to do, and what you type becomes the note on it.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>The chat is closed\u003C\u002Ftd>\n\u003Ctd>Open a new one.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"work-in-the-thread\">Work in the thread\u003C\u002Fh2>\n\u003Cp>When a member starts a task for you, the run is linked to the thread, and the thread follows it:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>While it runs, a card shows how long it has been going and what it is doing.\u003C\u002Fli>\n\u003Cli>When it finishes, the links it published (the issue, the pull request, the preview) become the thread's result,\na click away.\u003C\u002Fli>\n\u003Cli>When it stops at a \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">gate\u003C\u002Fa>, the decision appears in the thread as a card, and you decide it\nthere with the card's buttons and its note. It is the same decision you would make on \u003Cstrong>Gates\u003C\u002Fstrong>. A message typed\nin the thread never decides a gate.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Only work started from this chat appears in it. A gate from work someone started elsewhere stays on \u003Cstrong>Gates\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch2 id=\"messages-from-a-members-tasks\">Messages from a member's tasks\u003C\u002Fh2>\n\u003Cp>A task can write to you in chat, so what it has to tell you arrives where you already talk to that member instead\nof in another system. A task that declares \u003Ccode>os.chat_write\u003C\u002Fcode> writes one message, as the member, in the member's open\nchat with you (one is opened if there is none). It is counted as unread until you open it, like any reply.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The message is plain text, shown as written.\u003C\u002Fli>\n\u003Cli>The task does not wait. Nothing you reply goes back to the run that wrote it. A task that needs your answer\nasks through a \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">gate\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>The member does not remember, in chat, what its task wrote there. If you reply to the message, say what you\nmean in full.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A task can also read the member's chats, with \u003Ccode>os.chat_list\u003C\u002Fcode> and \u003Ccode>os.chat_read\u003C\u002Fcode>. It sees only the chats of the\nmember doing the run, never another member's.\u003C\u002Fp>\n\u003Cp>The same tools work from your side, over the \u003Ca href=\"\u002Fdocs\u002Fapi\u002Fendpoints\">API\u003C\u002Fa> and the \u003Ca href=\"\u002Fdocs\u002Fmcp\">MCP server\u003C\u002Fa>: an agent\nholding an API token lists and reads chats, opens one with \u003Ccode>os.chat_open\u003C\u002Fcode>, and writes to a member with\n\u003Ccode>os.chat_write\u003C\u002Fcode>. There it writes as the token, and the member replies. Each tool is described in\n\u003Ca href=\"\u002Fdocs\u002Ftools\u002Fbuilt-in\u002Fos\">Built-in tools\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"what-a-member-can-use-in-chat\">What a member can use in chat\u003C\u002Fh2>\n\u003Cp>Every chat offers the member four of the OS's own tools: the organisation (teams, members, and who does what), the\ntasks it can start, starting one, and reading a run's progress. The member checks a run before telling you how it\nis going, and says so plainly when it has stopped.\u003C\u002Fp>\n\u003Cp>It also offers the member's own connected tools: every \u003Ca href=\"\u002Fdocs\u002Ftools\">binding\u003C\u002Fa> the member reaches through its\nroles, itself, its teams and the enterprise. A member bound to your analytics can answer a question from them in\nthe conversation, with no task needed.\u003C\u002Fp>\n\u003Ch3 id=\"what-a-member-remembers\">What a member remembers\u003C\u002Fh3>\n\u003Cp>A member also reads your enterprise's \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fmemory\">memory\u003C\u002Fa>. With every message you send, the OS looks up\nwhat memory holds on the subject and shows the member those notes alongside your message, so it can answer from\nwhat earlier work established and what you have decided before, not only from the conversation.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The member treats the notes as prior evidence, not as instructions. What you write always comes first.\u003C\u002Fli>\n\u003Cli>Under your message the thread says how many notes were recalled, or that memory was unavailable. Open that\nline to see each note: its first line, whether the member was shown it, and a link to the note on the\n\u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fmemory#the-memory-page\">Memory page\u003C\u002Fa> or to the run it came from.\u003C\u002Fli>\n\u003Cli>How much is read is your choice: \u003Cstrong>Chat memory\u003C\u002Fstrong> on \u003Ca href=\"\u002Fdocs\u002Fcompany\u002Fenterprise\">Enterprise\u003C\u002Fa>. A deeper read finds\nmore and uses more tokens with every message.\u003C\u002Fli>\n\u003Cli>A reply waits up to ten seconds for memory, then carries on without it.\u003C\u002Fli>\n\u003Cli>Chat only reads memory. Nothing you say in a chat is saved to it. What you say when you decide a\n\u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fgates\">gate\u003C\u002Fa> is.\u003C\u002Fli>\n\u003Cli>The lookup is made only if your own access includes reading memory.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"asking-before-a-tool-that-can-change-something\">Asking before a tool that can change something\u003C\u002Fh3>\n\u003Cp>A connected tool runs straight away only when its server marks it read-only. Any other call pauses the reply and\nasks you, showing what it will run with:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Answer\u003C\u002Fth>\n\u003Cth>What happens\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Allow once\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The call runs and the reply carries on.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Always allow\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The same, and the answer is kept for you, this member and this tool, so it does not ask you again.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Deny\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>The call is refused, and the member carries on knowing that.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Cp>Sending a message while a call waits declines it. \u003Cstrong>Allowed tools\u003C\u002Fstrong> in the thread's header lists your &quot;Always\nallow&quot; answers for that member, each with \u003Cstrong>Revoke\u003C\u002Fstrong>. An &quot;Always allow&quot; is yours alone: it never lets anyone else's\nchats skip the question.\u003C\u002Fp>\n\u003Cp>A chat has no task, so no task's gates apply to what the member does in it. Work that should wait for your formal\napproval belongs in a task that declares the gate, which the member can start for you.\u003C\u002Fp>\n\u003Ch2 id=\"when-a-reply-fails\">When a reply fails\u003C\u002Fh2>\n\u003Cp>The member says why, in the thread:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>No model connected.\u003C\u002Fstrong> Neither the member nor the enterprise has a model connection; add one on \u003Cstrong>Agents\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Spend cap reached.\u003C\u002Fstrong> The reply would go past a day cap that applies. See \u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fspend\">Spend and models\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Sign-in refused.\u003C\u002Fstrong> The model provider refused the stored credentials; reconnect them.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Out of credit.\u003C\u002Fstrong> The provider's own message is quoted, since it names which limit was hit.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"when-a-reply-stops-short\">When a reply stops short\u003C\u002Fh2>\n\u003Cp>A reply takes at most 24 tool steps. A member that uses them all stops there and says where it got to and what is\nleft, and the thread marks the reply \u003Cstrong>Stopped at the step limit\u003C\u002Fstrong>. Write to the member and it carries on from\nthere, with a fresh set of steps.\u003C\u002Fp>\n\u003Cp>A reply the model's own length limit cut off is marked \u003Cstrong>Cut off by the model's length limit\u003C\u002Fstrong>. Ask for the rest,\nor for a shorter answer.\u003C\u002Fp>\n\u003Cp>A reply's model cost counts toward your spend like any run's.\u003C\u002Fp>\n\u003Cdiv class=\"prose__planned\">\n\u003Cp class=\"prose__flag\">Planned\u003C\u002Fp>\n\u003Ch2 id=\"plans\">Plans\u003C\u002Fh2>\n\u003Cp>A member will be able to propose a change to the company (a new team, a new member, a changed task) as a plan: a\nlist of changes, each shown in full, that you approve, change or reject. Nothing in a plan takes effect until you\napprove it, and an approved plan is applied as written.\u003C\u002Fp>\n\u003Cp>Today, a change like this is designed by one of the OS's own tasks, which the member starts for you: the same task\nin every enterprise, changed only with a release of the OS. It puts the change to you as a decision to sign off, and\nthe OS makes an approved change as written.\u003C\u002Fp>\n\u003Cp>A member will also be able to make a small change directly when you ask, such as adding someone to a team, instead\nof proposing it. A direct change asks you before every one, and \u003Cstrong>Always allow\u003C\u002Fstrong> never applies to it.\u003C\u002Fp>\n\u003C\u002Fdiv>\n",[12,16,19,22,25,28,32,35,38,41],{"id":13,"text":14,"level":15,"planned":8},"what-a-chat-is","What a chat is",2,{"id":17,"text":18,"level":15,"planned":8},"when-you-can-send","When you can send",{"id":20,"text":21,"level":15,"planned":8},"work-in-the-thread","Work in the thread",{"id":23,"text":24,"level":15,"planned":8},"messages-from-a-members-tasks","Messages from a member's tasks",{"id":26,"text":27,"level":15,"planned":8},"what-a-member-can-use-in-chat","What a member can use in chat",{"id":29,"text":30,"level":31,"planned":8},"what-a-member-remembers","What a member remembers",3,{"id":33,"text":34,"level":31,"planned":8},"asking-before-a-tool-that-can-change-something","Asking before a tool that can change something",{"id":36,"text":37,"level":15,"planned":8},"when-a-reply-fails","When a reply fails",{"id":39,"text":40,"level":15,"planned":8},"when-a-reply-stops-short","When a reply stops short",{"id":42,"text":43,"level":15,"planned":44},"plans","Plans",true,1791124519864]