]> git.giacomolli.uk - onechat/blobdiff - README.rst
Give the root tools to start and message children
[onechat] / README.rst
index 31123553aa64aed167b6b818276448a291e6538f..556ab46e51bb0e2957c6eb230324cb61ed97c933 100644 (file)
@@ -138,6 +138,40 @@ ends with them, and a change applies at the next call. The agent can
 propose a change to the file, and it makes the change only after the
 user agrees.
 
 propose a change to the file, and it makes the change only after the
 user agrees.
 
+A permanent child agent lives in ``agent/children/NAME/`` with the same
+files as the root. The root's ``agent_create(name, responsibility)``
+tool creates and starts it with the root's model, effort, and working
+directory, and a separate random ID. A name describes the area, such as
+``House`` or ``Calendar``. It is one word of 2 to 32 ASCII letters,
+starts with a capital letter, and cannot name the root, an existing
+child, or a subagent. The daemon opens all children at startup. A
+missing or invalid child config stops startup. Only one level of
+children is supported. Remove a child by hand while the daemon is
+stopped. The root's turn state lists each child and its responsibility.
+The root passes area messages from mixed chats with sender, date, and
+words, and asks the user before it sends a child's draft to WhatsApp.
+
+Each child has its own memory, model client, usage file, subagents,
+schedules, and turn loop. Its prompt limits work to its area, asks for
+only reports that need the parent or the user, and permits an empty
+reply. Children have no WhatsApp tools and draft replies instead of
+sending them. Clients and WhatsApp still address only the root. A
+child's saved schedules and subagents can resume at startup. The ready
+log line lists the child names.
+
+A message from a parent to its own child enters the child's log as
+``user`` and wakes it. A child's final reply reaches the parent as
+``work`` with the prefix ``[NAME] `` and wakes it. An empty reply sends
+nothing. A busy recipient takes the message between tool calls or in its
+next turn. ``agent/messages.json``, with mode 0600, keeps messages until
+their recipient finishes its turn. A daemon stop preserves queued
+messages and reports for the next start without a second log entry. An
+interrupted turn can repeat its model calls and tools after restart.
+Backups lock this queue with the agent files, including children made
+during the daemon run. The root uses ``tell`` for both children and
+subagents. ``zoom("Name")`` gives a child's view or a subagent's whole
+log. ``spawn`` starts short-lived subagents, not permanent children.
+
 **************
  User service
 **************
 **************
  User service
 **************
@@ -236,14 +270,15 @@ command prints its path and size in bytes. With no daemon, it fails.
    ONECHAT_DIR=EMPTY_DATA_DIR onechat restore BACKUP_FILE.tar.gz
 
 The daemon flushes memory and holds its write locks during the agent
    ONECHAT_DIR=EMPTY_DATA_DIR onechat restore BACKUP_FILE.tar.gz
 
 The daemon flushes memory and holds its write locks during the agent
-copy. It also flushes and locks the subagent logs. It copies the
-WhatsApp session with SQLite ``VACUUM INTO``, not as raw database files.
-It then compresses the copy and installs the archive through a temporary
-file and a rename. Use a backup path outside the data directory.
+copy. It also flushes and locks the child agents and all subagent logs.
+It copies the WhatsApp session with SQLite ``VACUUM INTO``, not as raw
+database files. It then compresses the copy and installs the archive
+through a temporary file and a rename. Use a backup path outside the
+data directory.
 
 The archive includes configuration, instructions, the log, tree,
 
 The archive includes configuration, instructions, the log, tree,
-indexes, views, layout, schedules, subagents, Telegram offset, tokens,
-and WhatsApp state and session. It excludes sockets, lock files,
+indexes, views, layout, schedules, subagents, children, Telegram offset,
+tokens, and WhatsApp state and session. It excludes sockets, lock files,
 ``probe/``, and the ``agent-backup-*`` import copies. Links and special
 files fail, rather than enter the archive. **The archive holds
 secrets**, including login tokens, the Telegram bot token, and the
 ``probe/``, and the ``agent-backup-*`` import copies. Links and special
 files fail, rather than enter the archive. **The archive holds
 secrets**, including login tokens, the Telegram bot token, and the
@@ -544,7 +579,8 @@ such as "remind me tomorrow at 9" or "every weekday at 8, tell me what
 my WhatsApp groups talked about". A schedule has a text, the task for
 the agent, and either one time or a cron expression. The agent also
 lists the schedules with their next times, and removes one when the user
 my WhatsApp groups talked about". A schedule has a text, the task for
 the agent, and either one time or a cron expression. The agent also
 lists the schedules with their next times, and removes one when the user
-asks. Only the agent has the schedule tools, not its subagents.
+asks. The root and its children have the schedule tools, not their
+subagents. Each schedule records its owner and wakes only that agent.
 
 A cron expression has five fields: minute, hour, day of month, month,
 and day of week, where 0 and 7 are Sunday. A field is a comma list of
 
 A cron expression has five fields: minute, hour, day of month, month,
 and day of week, where 0 and 7 are Sunday. A field is a comma list of