docs: update tool registry references to reflect dynamic discovery
This commit is contained in:
parent
e8d3ff92cb
commit
fdd39b7499
10
README.md
10
README.md
|
|
@ -123,7 +123,7 @@ Monorepo with Git submodules. Each submodule has its own Go module (except `el`
|
|||
|
||||
- **Sandboxed execution** — every tool call and every `shell` command runs inside a Landlock sandbox with per-profile filesystem access rules. Promoted tools are not exempt — they execute through the same sandbox path as inline shell commands.
|
||||
- **Extensible tools** — tools are executable scripts with header metadata; add one by dropping a file in a directory
|
||||
- **Lazy-loading tool registry** — all tools are discoverable; only loaded tools are callable. Write a tool name to `s/{sid}/tools` to promote it to a native callable function — no MCP server, no SDK, no protocol boilerplate
|
||||
- **Dynamic tool registry** — tools are discoverable and hot-reloadable; add, modify, or remove tool scripts at any time without restarting the server. Only loaded tools are callable. Write a tool name to `s/{sid}/tools` to promote it to a native callable function — no MCP server, no SDK, no protocol boilerplate
|
||||
- **Elevation** — commands that need to escape the sandbox can request elevation through a streaming protocol (frame-based, over unix socket)
|
||||
|
||||
### Agents
|
||||
|
|
@ -200,7 +200,7 @@ graph TB
|
|||
SM[Session Manager]
|
||||
CORE[Core Library<br>agent loop · compaction<br>prompt templates]
|
||||
ROUTE[Router<br>complete · generate · route]
|
||||
TOOLS[Tool Registry<br>lazy-load · dispatch]
|
||||
TOOLS[Tool Registry<br>dynamic · lazy-load · dispatch]
|
||||
SB[Landlock Sandbox]
|
||||
end
|
||||
|
||||
|
|
@ -390,12 +390,12 @@ The D-Bus interface is what makes native desktop integration possible:
|
|||
|
||||
All of these talk to `org.ollie.SessionManager` over D-Bus using Qt's native bindings — no IPC glue code, no subprocess management.
|
||||
|
||||
### Tool registry: lazy-loading native tools
|
||||
### Tool registry: dynamic native tools
|
||||
|
||||
Tools are scripts in `~/.config/ollie/tools/`. Write one, add a JSON schema header, and it's **discoverable** immediately. But it's only **callable** when you promote it into your session.
|
||||
Tools are scripts in `~/.config/ollie/tools/`. Write one, add a JSON schema header, and it's **discoverable** immediately — no server restart needed. Add, modify, or remove tools at any time; the registry re-reads from disk on every `tool_list` and `tool_load`. A tool is only **callable** when you promote it into your session.
|
||||
|
||||
```bash
|
||||
# Discover all available tools
|
||||
# Discover all available tools (always reflects current directory contents)
|
||||
cat s/{sid}/tools
|
||||
|
||||
# Load one into your session — it becomes a native callable function
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ Tools evolved through several incarnations:
|
|||
2. **Shell/Python scripts** in `~/.config/ollie/tools/` — lightweight, sandboxed
|
||||
3. **execute_code** as the single built-in tool — all scripts invoked through it
|
||||
4. **call_tool/pipe** — named tool dispatch and cross-tool pipelines
|
||||
5. **Tool registry** (final form) — lazy-loading via `tool_list`/`tool_load`/`tool_active`; `execute_code` renamed to `shell`
|
||||
5. **Tool registry** (final form) — dynamic lazy-loading via `tool_list`/`tool_load`/`tool_active`; `execute_code` renamed to `shell`; tools hot-reloadable without server restart
|
||||
|
||||
The file tools (`file_read`, `file_write`, `file_edit`, `file_grep`, `file_glob`)
|
||||
were extracted into standalone Python scripts. Memory (`memory_remember`,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
**Crash resiliency** — Memory (`m/`) is written to persistent storage outside the session. If a session crashes or is killed mid-task, it is not lost — a fresh session picks up where the previous one left off.
|
||||
|
||||
**Lazy tool loading** — After transitioning from `execute_code`/`call_tool`/`pipe` to a unified `shell` primitive, ollie adopted a lazy loading architecture. The system has 7 primitives: `shell` (sandboxed), `tool_load`/`tool_list`/`tool_active`, `skill_load`/`skill_list`/`skill_active`, plus associated 9P filesystem endpoints. Tools are executable scripts discovered from `OLLIE_TOOLS_PATH`; skills are `SKILL.md` directories discovered from `OLLIE_SKILLS_PATH`. Both use session-scoped registries with per-session load tracking. The agent autonomously loads tools and skills as needed — no explicit user permission required.
|
||||
**Dynamic tool loading** — After transitioning from `execute_code`/`call_tool`/`pipe` to a unified `shell` primitive, ollie adopted a dynamic lazy-loading architecture. The system has 7 primitives: `shell` (sandboxed), `tool_load`/`tool_list`/`tool_active`, `skill_load`/`skill_list`/`skill_active`, plus associated 9P filesystem endpoints. Tools are executable scripts discovered from `OLLIE_TOOLS_PATH`; skills are `SKILL.md` directories discovered from `OLLIE_SKILLS_PATH`. Both use session-scoped registries with per-session load tracking and dynamic discovery — tools and skills can be added, modified, or removed at any time without restarting the server. The agent autonomously loads tools and skills as needed — no explicit user permission required.
|
||||
|
||||
**Both shell and tools are sandboxed** — Promoted tools are not exempt from sandboxing. They execute through the same `executeWithStdin` path as inline `shell` commands, running inside a Landlock sandbox with the same per-profile filesystem access rules. The sandbox applies to every code path that touches user data — there is no bypass by loading a tool.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue