ollie/doc/USAGE.md

5.3 KiB

Usage

Server

Start and stop

olliesrv start          # start in background (daemonizes)
olliesrv fgstart        # start in foreground
olliesrv stop           # stop the daemon
olliesrv status         # check if running

By default the server mounts at $HOME/mnt/ollie. Override with -mount:

olliesrv start -mount /tmp/ollie

TCP listener

To also accept connections over TCP (e.g. for remote access):

olliesrv start -tcp :9564

Debug logging

Log level is controlled by OLLIE_LOG (default: warn). Set to debug for verbose output:

OLLIE_LOG=debug olliesrv fgstart

Valid levels: debug, info, warn, error. Per-subsystem overrides follow the pattern OLLIE_<TAG>_LOG=debug where <TAG> matches the logger's tag (e.g. OLLIE_SESSION_LOG).


Examples below assume $OLLIE is set to the ollie mount point (default: $HOME/mnt/ollie). Scripts under s/, b/, and u/ are available directly via the mounted filesystem after running mk && mk scripts.

Interactive shell

s/sh is an interactive shell for prompting a session. It resumes the most recent session for the current working directory by default, or creates a new one if none exists.

exec $OLLIE/s/sh                                       # resume or create session for pwd
exec $OLLIE/s/sh -new                                  # always start a fresh session
exec $OLLIE/s/sh -new -model qwen3:8b                  # fresh session with model override
exec $OLLIE/s/sh -session 1744276689123456789-2b986c   # attach to a specific session

At the > prompt:

Input Action
<text> Submit prompt; response streams to terminal
/q <text> Queue prompt for later execution (writes to fifo.in)
/<cmd> Send to session ctl (e.g. /compact, /clear, /model qwen3:8b)
/kill Kill the session and exit
Ctrl-C Interrupt a running turn (or exit if idle)

s/sh tracks the last session per working directory in ~/.config/ollie/last-session, so switching directories and re-running s/sh resumes the right context automatically.

Batch jobs

b/ provides ephemeral one-shot agent runs — a single prompt, a single result, no persistent session state.

b/job

Submit a prompt, wait for completion, print the result:

$OLLIE/b/job "Summarize this repo"
cat main.go | $OLLIE/b/job "explain this file"
$OLLIE/b/job -parallel 4 -keep "Write a haiku"
$OLLIE/b/job -backend ollama -model qwen3:8b "Explain this" < main.go

With -parallel N, N jobs run concurrently and results are separated by === {id} === headers.

b/q

Foreground one-shot query; thin wrapper around b/job:

$OLLIE/b/q "what is 2+2?"
echo "what is causing this?" | $OLLIE/b/q

b/sched

Submit a background job and return immediately; prints the b/{id} path:

$OLLIE/b/sched "summarize the recent git log"
# /home/lkn/mnt/ollie/b/1744276689123456789-0

Poll for completion:

path=$($OLLIE/b/sched "write a limerick about Go")
until [ "$(cat $path/state)" = "done" ]; do sleep 0.1; done
cat $path/result

Fan out with -parallel N and collect results:

paths=$($OLLIE/b/sched -parallel 4 "draft a blog intro" < brief.txt)
for p in $paths; do
    until [ "$(cat $p/state 2>/dev/null)" = "done" ]; do sleep 0.1; done
    cat $p/result
    rm -r $p
done

b/cleanup

Remove all completed jobs:

$OLLIE/b/cleanup

Schedule regular cleanup with a cron job:

*/15 * * * * /path/to/mnt/ollie/b/cleanup

Raw b/ access

cat $OLLIE/b/new                           # show the spec template
printf 'cwd=%s\n---\nSummarize this.\n' "$PWD" > $OLLIE/b/new
cat $OLLIE/b/<job-id>/state                # running | done | failed: <reason>
cat $OLLIE/b/<job-id>/result
rm -r $OLLIE/b/<job-id>                    # cancel and remove

Valid spec keys: name (auto-generated if omitted), cwd (required), agent, backend, model, output, parallel.

AI pipelines

b/q and b/job write to stdout and compose naturally with Unix pipes. When both args and stdin are present, args are treated as the instruction and stdin as the content:

echo "write a haiku about filesystems" | $OLLIE/b/q | wc -w
cat error.log | $OLLIE/b/q "what is causing this?" | $OLLIE/b/q "suggest a fix"
$OLLIE/b/q "list 5 blog post ideas" | grep -v "^$" | head -3 | $OLLIE/b/q "expand the best one"

u/optimize is a worked example — it generates N candidate prompts in parallel via b/q -parallel N, then judges them with a second b/q call to return the best:

$OLLIE/u/optimize -n 3 -cm qwen/qwen3-8b -jm anthropic/claude-opus-4-6 "explain recursion"

Progress goes to stderr; pipe the optimized prompt with content into a subsequent call:

prompt=$($OLLIE/u/optimize "translate this to Spanish" 2>/dev/null)
cat document.txt | $OLLIE/b/q "$prompt"

Alternative front-ends

The 9P filesystem is the lowest level interface to ollie. All interfaces are simply wrappers around filesystem operations, and s/sh is the standard chat interface. A couple of other front-ends are also provided:

  • ollie-tui — a fancier terminal UI for the less curmudgeonly
  • ellie — ellie.el is the Emacs front-end, just wire it into your init.el and M-x ellie

See each repo's README for installation and usage.