Get started
Autonomous mode
oluso goal and /goal keep working until the goal is met, a budget stops the run, or you press Ctrl+C.
A normal message in oluso is one agent run. Autonomous mode is the outer loop around that run. The agent plans, calls tools, reads the result, and continues on its own. Each model turn still spends the wallet. oluso scan is not part of this loop.
oluso goal
bash
oluso goal "Add a health check and run the tests"
oluso goal "Rename the pay helper" --max-iterations 8 --max-spend 20
oluso goal "Review the auth change" --model sentinel --mode reviewThe argument is the goal. The command prints goal · Oluso Swift on stderr (the model name follows --model and --mode), then a progress line for every iteration. It exits when the run stops. It does not open the prompt afterwards.
oluso goal
goalstringrequiredWhat the agent should finish.
--modelstringoptionalDefault
swift. Alsosentinelorsentinel-offensive. Any other value is treated asswift.--modestringoptionalDefault
code. Alsoreview,scan,compliance,pentest, oroffensive. The tools are the tools for that mode.--thinkingbooleanoptionalLonger reasoning. Accepted only when the session model is
sentinel-offensive. Otherwise the command printsLonger reasoning is part of Sentinel offensive mode. Pass --mode offensive.--targetstringoptionalHost for authorised testing or offensive mode.
--scopestringoptionalScope you are allowed to test.
--bystringoptionalPerson confirming authorisation.
--statementstringoptionalMust match the authorisation statement exactly. See Authorised testing.
--yesbooleanoptionalApprove workspace-local destructive commands without a prompt. Publish, force-push, sudo, and machine-level commands are still refused.
--max-iterationsintegeroptionalStop after this many iterations. Default
24.0printsIteration budget must be a positive integer.--max-tokensintegeroptionalStop after the model turn that reaches this many tokens. The count is input plus output plus cached tokens for this autonomous run. Omitted means no token cap.
0printsToken budget must be a positive integer.--max-spendnairaoptionalStop when this session has spent this much.
20.50is 2050 kobo. A value that is not naira printsSpend budget is not a naira amount.
/goal
Inside oluso, /goal <text> starts the same loop and then returns to the prompt. It uses 24 iterations and does not set a token cap or a spend cap. The wallet can still stop it. /goal with no text prints Usage: /goal <text>.
Progress
Each iteration prints one line. The step starts as Planning and changes when the agent calls report_step. Spent is the wallet charged in this session. Tokens are the autonomous run so far.
iteration 2/24 · Write the route · spent ₦1.20 · 340 tokensAn iteration is one agent run. Inside it the model may call tools and continue, up to 6 model turns. A normal message in the prompt, outside this loop, allows 12 model turns. Every one of those turns spends the wallet.
How it stops
| What happened | What it prints | Exit |
|---|---|---|
The agent calls finish | Goal met on iteration N. <summary> | 0 |
| Ctrl+C | Paused. Resume with oluso resume <id>. | 130 |
| Iteration cap | Stopped at the iteration budget (N). Resume with oluso resume <id> --max-iterations 24. | 2 |
| Token cap | Stopped at the token budget (N). Resume with oluso resume <id>. | 2 |
| Spend cap | Stopped at the spend budget. Resume with oluso resume <id>. | 2 |
| Empty wallet | Your Oluso wallet is empty. Top up to continue. Resume with oluso resume <id>. | 2 |
blocked, or two iterations with no tools | Blocked. <reason> | 2 |
| The model fails | Stopped because the model failed. <detail> | 1 |
A second Ctrl+C force-exits. The stalled-model reason is The model stopped using tools before the goal was met. A single chat message that stops because the wallet is empty still exits 0. Only the autonomous run uses exit 2 for the wallet.
Pause and resume
Ctrl+C aborts the current model turn, saves the session, and prints the resume command. oluso resume with no id loads the latest session for this directory. oluso resume <id> loads that session. A goal that is not met continues. A finished goal, or a chat with no goal, opens the prompt when stdin is a terminal.
bash
oluso sessions
oluso resume
oluso resume a1b2c3d4
oluso resume a1b2c3d4 --max-iterations 24- Resume without
--max-iterationscontinues until the stored cap. If the run already stopped on the iteration budget, resume adds 24 iterations. --max-iterations Non resume allows N more iterations.--max-tokensand--max-spendreplace the stored caps only when you pass them.No saved sessions.means this machine has none.No session <id>.means that id is missing.That session is for <cwd>. Run oluso resume <id> from that directory.means you are in a different folder.- A terminal-less resume of a chat prints
Session <id> has no paused goal. Open a terminal to continue.
Sessions are JSON files in $OLUSO_HOME/sessions, or ~/.oluso/sessions. The directory is mode 0700 and each file is mode 0600. oluso sessions lists them and does not need a sign-in. oluso resume does.
Destructive commands
The sandbox shell still refuses offensive tooling, absolute paths, and command substitution. On top of that, the session gates workspace-local destructive commands: rm -rf, git reset --hard, git clean, git checkout --, and kill. At a terminal it prints the command and Run this destructive command? [y/N]. y or yes runs it. Anything else returns The user did not approve that destructive command.
With no terminal, the same command is not run. The tool replies Destructive command refused without a person at the terminal. Pass --yes to allow workspace deletes and hard resets. This one was not run: <command>. --yes approves those workspace-local commands. It does not approve publish, force-push, sudo, chmod -R, dropping a table, or shutting the machine down. Those return Oluso refused that command. It can destroy the machine, publish a package, or force-push.
Loop tools
During oluso goal, /goal, oluso build, and oluso debug the agent also has report_step, finish, and blocked. /tools lists them under the mode's own tools. finish is refused for a build or a debug until the command rule on those pages is met. A line that is exactly GOAL_MET is accepted only when finish would have been accepted.