X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/ddd0a50f7b801112376d7fb27bfd05d2fc26c2fd..cb514b662bcf9d90b2cf02789c989f777d774d3f:/README.rst diff --git a/README.rst b/README.rst index 82a8e13..7712c0e 100644 --- a/README.rst +++ b/README.rst @@ -78,12 +78,16 @@ Start the daemon, and then the client in another terminal: The daemon owns the root agent in ``agent/`` in the data directory and listens on the Unix socket ``onechat.sock`` there. In the client, each line is a message to the agent, the line ``/stop`` interrupts the -running turn, and Ctrl-D ends the client. The client shows the replies, -the tool calls, and the first lines of each tool result as they happen. -It also shows each message that the user sends from another client, with -the client as a mark, such as ``[telegram] text``. The daemon is the -only process that uses the token file while it runs, so ``onechat -login`` and ``onechat probe`` refuse to start until it stops. +running turn, the line ``/stop NAME`` stops the subagent NAME, and +Ctrl-D ends the client. The client shows the replies, the tool calls, +and the first lines of each tool result as they happen. It also shows +each message that the user sends from another client, with the client as +a mark, such as ``[telegram] text``. When a subagent starts, the client +shows ``[NAME] started``, and it shows the whole report of the subagent, +which starts with ``[NAME]``, but not the tool calls of the subagent. +The daemon is the only process that uses the token file while it runs, +so ``onechat login`` and ``onechat probe`` refuse to start until it +stops. The agent runs commands with bash as the user in its working directory, with no sandbox. It has the rights of the user, also on the token file. @@ -95,9 +99,16 @@ the agent and its task, and it runs its tools as the agent does, in ``agent/subagents/NAME/work``. A task in a repository gives the path of the repository. The steps of a subagent go to its own log in ``agent/subagents/NAME``, not to the chat, and its final reply comes -back to the agent as one message that starts with ``[NAME]``. Each model -call of a subagent has the name in the ``agent`` field of -``agent/usage.jsonl``. +back to the agent as one message that starts with ``[NAME]``. The agent +can send a subagent more messages: a running subagent reads them between +its tool calls, and a finished one goes on from its log, and its reply +comes back in the same way. When the user stops a subagent, the chat +gets a note, and the report of the subagent is logged, but it starts no +turn. Each model call of a subagent has the name in the ``agent`` field +of ``agent/usage.jsonl``. ``agent/work.json`` holds the names of the +running subagents. A subagent that runs when the daemon stops goes on at +the next start: the chat gets the note that the daemon restarted, and +the subagent gets the same note and goes on from its log. ``agent/config.json`` holds the settings of the agent. The first start writes it with the defaults and a random ID. Do not change the ID: the @@ -141,15 +152,18 @@ new messages, so it needs no open port. {"token": "123456:ABC-token-from-BotFather", "owner": 123456789} The bot reads only the private chat of the owner and ignores all other -updates. Each text message goes to the agent as a user message, and the -line ``/stop`` interrupts the running turn. The bot sends the replies in -parts of at most 4096 characters, with their Markdown as Telegram -formats: bold, italic, strikethrough, code, code blocks, links, and -headings as bold text. When Telegram refuses the formats of a part, the -bot sends the part again as plain text. Each error goes as a short -message in plain text. It shows the typing action while a turn runs. It -does not send the tool calls. It sends each message that the user types -in the terminal client, with the mark ``[terminal]``. +updates. Each text message goes to the agent as a user message, the line +``/stop`` interrupts the running turn, and the line ``/stop NAME`` stops +the subagent NAME. The bot sends the replies in parts of at most 4096 +characters, with their Markdown as Telegram formats: bold, italic, +strikethrough, code, code blocks, links, and headings as bold text. When +Telegram refuses the formats of a part, the bot sends the part again as +plain text. Each error goes as a short message in plain text. It shows +the typing action while a turn runs. It does not send the tool calls. +For a subagent it sends only ``[NAME] started`` and ``[NAME] finished``, +``[NAME] stopped``, or ``[NAME] failed``, because the reply of the agent +carries the content of the report. It sends each message that the user +types in the terminal client, with the mark ``[terminal]``. ``agent/telegram-offset.json`` holds the ID of the next update. The bot moves it past an update only after the message is durable in the log, so