ollie/data/scripts/README.md

111 lines
2.8 KiB
Markdown

# scripts
Shell scripts for interacting with the ollie 9P filesystem.
All scripts read `OLLIE` (default: `$HOME/mnt/ollie`) for the mount path.
`mk scripts` installs them and exposes them via the mounted filesystem,
so they are available without any `$PATH` changes:
```sh
$OLLIE/s/ls # list sessions
$OLLIE/s/kill <id> # kill a session
$OLLIE/s/cleanup # remove all idle sessions
```
For one-shot generation, code completion, and routing, use `ollie-9p rdwr` with
the corresponding file:
```sh
echo 'summarize this repo' | ollie-9p rdwr generate
echo '{"file":"main.go","prefix":"func ","suffix":""}' | ollie-9p rdwr complete
echo 'implement login page' | ollie-9p rdwr route
```
Scripts are organized by the filesystem namespace they are hosted under:
- `s/` — session management
---
## s/ls
List all active sessions.
```
s/ls
```
---
## s/kill
Kill a session by ID and remove it.
```
s/kill <id>
```
---
## s/cleanup
Remove all idle sessions.
```
s/cleanup
```
---
## x/elevate
Sandbox escape hatch invoked by `shell` when a command is marked `elevated: true`.
The Landlock sandbox is enforced at the kernel level — restrictions apply regardless of
user privileges within the sandboxed process. `x/elevate` is a generic client that
forwards the command to an adapter running outside the sandbox, which executes it and
returns the result.
`x/elevate` knows nothing about the backend. It connects to the socket at
`OLLIE_ELEVATE_SOCKET`, sends `{cmd, cwd}`, and reads back `{stdout, stderr,
exit_code}`. The adapter on the other end is backend-specific. Multiple adapters can
coexist at different socket paths; switching backends is a single env var change.
Set `OLLIE_ELEVATE_SOCKET` in `~/.config/ollie/env`. The default is
`$XDG_RUNTIME_DIR/ollie/elevate.sock` (falling back to
`/run/user/<uid>/ollie/elevate.sock`), so this only needs to be set when using
a non-default path:
```
OLLIE_ELEVATE_SOCKET=${XDG_RUNTIME_DIR}/ollie/elevate.sock
```
### Protocol
`x/elevate` sends a newline-terminated JSON object and reads a JSON response:
```
→ {"cmd": "<shell command>", "cwd": "<working directory>"}\n
← {"stdout": "...", "stderr": "...", "exit_code": 0}
```
Any process that listens on a Unix stream socket and speaks this protocol is a valid
adapter.
### Integrated elevation broker
As of 2026-07, elevation is handled by olliesrv's integrated broker (`core/pkg/elevate`).
The broker listens on `$OLLIE_ELEVATE_SOCKET` and handles command execution with
human-in-the-loop approval via desktop notifications. No external adapter or daemon
is required.
### Disabling elevation
Replace `x/elevate` with a script that exits non-zero. Steps marked `elevated: true`
will fail rather than escape the sandbox:
```sh
#!/bin/sh
echo "elevation disabled" >&2
exit 1
```