ctl is no longer in the async bucket. stop is always instant.
Slash commands forwarded via Submit are synchronous for recognized
commands. Unrecognized input is rejected with Rerror when the
agent is running to prevent accidentally starting an agent turn.
prompt, enqueue, ctl writes run async — they may block for an
entire agent turn and don't benefit from Rerror. Everything else
(disk I/O, state mutations, s/new) runs synchronously so errors
surface as Rerror without holding the connection.
handleWrite returns error; clunk runs it synchronously and
returns Rerror on failure. Writes to backend, agent, model
reject with Rerror when the agent is running. Prompt writes
remain async (they block for the full agent turn). Disk I/O
errors now surface as Rerror instead of stderr logging.
stop is the only out-of-band signal. Everything else is forwarded
as a slash command (/ prepended automatically), so 'echo compact > ctl'
works directly.
Allows rm on files under the prompts, skills, and tools directories.
Skills remove the entire skill directory (including SKILL.md).
Other paths still return 'remove not supported'.
- Replace {sid} with YYYYMMDDThhmmss_{uid8} in plan filenames for
uniqueness independent of session identity
- Initial status is __todo (was __wip)
- Instruct bot to transition __todo → __wip → __done
- Remove sid field from filePlanBackend
- Route Tcreate to new create handler for /t and /sk
- Add skill file write support (write to SKILL.md in skill dir)
- Make /sk files writable (0666), /t files/dir 0777
- Update default tools path to ~/.config/ollie/tools
State, reply, backendName, agentName, and modelName are now read
directly through Core. The optimistic lock/rollback dance around
backend/agent/model writes is removed — Core owns that truth.
replyVers is kept in session as a 9p transport concern (Qid.Vers
for polling clients).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The 9p prompt handler no longer directly appends "user: ..." to the chat
log — that now arrives via the "user" event emitted by core's Submit,
which also fires for FIFO-drained queued prompts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- queuePlanBackend now holds agent.Core and calls Queue() directly
instead of writing to a filesystem path (enqueue is a virtual file)
- fallback.core wired after NewAgentCore in createSession
- Returns yield message so agent stops after planning and lets the
queue drive execution step by step
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tool behavior with a hard 9P filesystem dependency belongs here, not in
core. The extension point (tools.PlanBackend + WithFallbackPlanBackend)
remains in core for other consumers to implement against.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When no task_create MCP tool is registered, reasoning_plan steps are
enqueued to the session's enqueue file in topological order. Placeholder
IDs (q1, q2, …) are returned so the agent can reference steps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
No sensible default exists server-side. Clients must pass workdir=<path>
explicitly. The TUI uses $PWD of the ollie process; shell users should
pass workdir=$PWD or use a wrapper.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Plain file operations on $OLLIE_9MOUNT/sk/ replace these. Remove the
tools/ directory and the mkfile step that installed them.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
file_read and file_write removed from core; drop the file.Decl entry
from the dispatcher and the import.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Now that reads go through sess.core.WorkDir(), the cached workdir field
on the session struct serves no purpose. Remove it and the write that
kept it in sync.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sess.workdir is only updated via the 9P write handler, so changes made
through the agent core (e.g. /cwd via ctl or prompt) were invisible to
readers. Use sess.core.WorkDir() to always reflect the live value.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Validate the path and propagate the change to the agent core (which
updates the execute server and rebuilds the system prompt) before
updating the session's cached workdir field. Return early on error.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Exposes ollie/s/{sid}/mcp as a read-only file that returns all registered
tool servers and their tools, grouped by server name. Backed by the new
Core.ListServers() method.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the r/w prompt.fifo with two separate endpoints: enqueue
(write-only, queues a prompt) and dequeue (read-only, pops the next
queued prompt). Also fixes a bug where cat's trailing EOF read at
non-zero offset would silently consume and discard the next queued item.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Serve /skills/<name>.md via pkg/skills (read-only, refreshes from disk
on each read). Add discover_skill.sh and load_skill.sh tool scripts
that read from the 9P mount.
Add /prompts/ to the 9P filesystem, backed by DefaultPromptsDir().
Reads serve file contents from disk; writes persist back to disk.
Edits take effect on the next agent session without restart.
Sessions now accept workdir= at creation time:
echo "new workdir=/home/lkn/src/myproject" > ctl
workdir is exposed as a r/w file in each session directory. Writing
to it updates the stored value (takes effect on next /agent switch,
since the execute server is constructed with the workdir at creation).
execute.Decl(workdir) and BuildAgentEnv(..., workdir) are wired
through so the sandbox and system prompt both use the correct path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>