Commit Graph

392 Commits

Author SHA1 Message Date
Levi Neely db7a1aa42d sessions: require workdir on new session creation
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>
2026-04-11 16:43:18 +02:00
Levi Neely 088c43e4aa tools: remove discover_skill.sh and load_skill.sh helper scripts
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>
2026-04-11 16:23:53 +02:00
Levi Neely 5176c0595c tools: remove file server registration
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>
2026-04-11 16:11:54 +02:00
Levi Neely 7ce8e6ad1f docs: remove Credits section (moved to monorepo) 2026-04-11 15:36:26 +02:00
Levi Neely 3bbf3d4240 Update go.mod replace path for monorepo structure 2026-04-11 14:37:03 +02:00
Levi Neely 5b68e0311a p9: remove dead sess.workdir field
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>
2026-04-11 14:25:08 +02:00
Levi Neely 3f873f0c55 p9: read workdir from core instead of cached session field
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>
2026-04-11 14:24:23 +02:00
Levi Neely 071add996c p9: wire SetWorkDir into workdir write handler
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>
2026-04-11 14:21:37 +02:00
Levi Neely cf777b9420 docs: add Credits section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 13:08:53 +02:00
Levi Neely 68d6d284f4 p9: add mcp endpoint to session directory
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>
2026-04-11 11:31:46 +02:00
Levi Neely 75fc1566c0 p9: split prompt.fifo into enqueue (write) and dequeue (read)
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>
2026-04-11 10:03:46 +02:00
Levi Neely f22c00c276 p9: add usage and models endpoints to session directory 2026-04-10 20:37:30 +02:00
Levi Neely 0e434750d0 p9: prompt interrupts if busy; add prompt.fifo for queue 2026-04-10 20:11:26 +02:00
Levi Neely 6cec2de2d9 README: update filesystem layout with p/, sk/, t/ directories 2026-04-10 19:17:51 +02:00
Levi Neely 1d5ad91bf0 p9: rename prompts/ to p/ in filesystem 2026-04-10 19:17:00 +02:00
Levi Neely 8bc8977fbf p9: expose tools as /t/ directory (r/w from ToolsPath)
Same pattern as prompts — reads and writes go directly to disk.
Files are 0755 on write since they're executable scripts.
2026-04-10 19:16:36 +02:00
Levi Neely d674f4b6c2 p9: rename skills/ to sk/ in filesystem and tool scripts 2026-04-10 19:14:59 +02:00
Levi Neely 9122f7477e p9: expose skills/ directory and add skill tool scripts
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.
2026-04-10 19:10:53 +02:00
Levi Neely 944445fd4d p9: expose prompts/ directory for runtime prompt editing
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.
2026-04-10 18:45:06 +02:00
Levi Neely 6d79ec978a README: make workdir required in all session creation examples
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 09:28:56 +02:00
Levi Neely 9e817d3914 README: document workdir option and filesystem entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 09:06:46 +02:00
Levi Neely f100e5d689 p9: add workdir support to sessions
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>
2026-04-10 09:04:32 +02:00
Levi Neely e392531986 README: cd into session dir in example shell session
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:52:59 +02:00
Levi Neely d9a4ec3255 p9: introduce s/ session directory; use nanosecond session IDs
Sessions are now nested under s/ instead of the root, making it
straightforward to count active sessions and find newly created ones
by offset:

  n=$(ls s/ | wc -l)
  echo "new agent=foo" > ctl
  sid=$(ls s/ | sort | sed -n "$((n+1))p")

Session IDs are now Unix nanosecond timestamps (from ollie's updated
NewSessionID), so ls s/ | sort gives strict creation order. The s/
directory is a stable listing surface; ctl remains at the root for
control operations.

All path parsing updated throughout: pathType, readDir, makeStat,
handleWrite, readChat, readReply, readFile. README updated to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:51:07 +02:00
Levi Neely f97b9d355c Use ollie agent helpers and tool Decls; drop local duplicates
Replace local agentConfigPath, newSessionID, home paths with
agent.AgentConfigPath, agent.NewSessionID, agent.DefaultAgentsDir,
agent.DefaultSessionsDir. Replace dispatcher wiring with
tools.NewDispatcherFunc using execute.Decl and file.Decl.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:28:07 +02:00
Levi Neely 1158efffe3 update readme 2026-04-10 03:16:45 +02:00
Levi Neely c00129a488 Add spawn_subagents.py tool example to README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 03:12:59 +02:00
Levi Neely 5eb93f181b Add concurrent Go sub-agent example to README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 03:07:37 +02:00
Levi Neely 272e095bc5 Add Sub-Agents section to Multi-Agent Workflows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:59:45 +02:00
Levi Neely a42a7b7624 Add Persistent Memory section referencing 9beads
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:40:58 +02:00
Levi Neely 6db891bbb1 Rename to Ideas; add self-generating workflows section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:34:13 +02:00
Levi Neely a713760f27 Drop "orchestrator" — it's just a shell script
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:31:18 +02:00
Levi Neely 714975c4b2 Add design philosophy to README opening
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:28:56 +02:00
Levi Neely 87201b01b3 Reorganize Possible Applications into subheadings
Groups: Automation & Scripting, Tooling & Integration,
Network & Remote Access, Multi-Agent Workflows.
Folds Inter-Agent Communication into Multi-Agent Workflows.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:18:13 +02:00
Levi Neely 2c41e68696 Add reply file for agent chaining
reply holds only the clean assistant text from the most recently
completed turn. It is written atomically when Submit returns and cleared
(as a documented side-effect) when a new prompt is submitted. Stat
reports the real byte length and bumps Qid.Vers on each change, so
polling via stat size > 0 is the intended signal that a reply is ready.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:10:36 +02:00
Levi Neely c3bddf5942 Tighten Possible Applications wording
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 02:02:10 +02:00
Levi Neely 68f32d1e53 Fix inotify claim in README
inotifywait doesn't work through 9pfuse; replace with polling approach.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:56:34 +02:00
Levi Neely 67b67b040c Add Possible Applications section to README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:56:05 +02:00
Levi Neely 34e3119533 Switch new command to key=value options; add model option
"new" in root ctl now accepts optional key=value pairs in any order:
backend=<name>, model=<name>, agent=<name>. All are optional; omitting
any uses the default. Replaces the old positional backend/agent args.
Unknown keys and malformed entries are rejected with a clear error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:52:15 +02:00
Levi Neely 2d120f9bdf Update README with model endpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:50:04 +02:00
Levi Neely 19fac99a3d Add model r/w endpoint to session
Exposes the active model name as a readable/writable file. Initialized
from be.Model() at session creation. Writes submit "/model <name>" via
the agent core and update modelName optimistically, rolling back on an
error event.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:49:20 +02:00
Levi Neely 194957daa2 Initial commit: olliesrv 9P server for ollie agent sessions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:46:48 +02:00