godo is a guarded macOS CLI for natural-language automation over SSH.
It shows a simplified command preview and only runs after explicit approval.
- macOS (tested for SSH use on Mac mini)
- Python 3.11+
- Ollama running locally on
http://localhost:11434 - A local model pulled in Ollama (default in code:
ministral-3:8b)
cd /Users/server/Documents/projects/godo_macmini
chmod +x godo.py
ln -sf "$(pwd)/godo.py" /usr/local/bin/godoIf /usr/local/bin is not writable, use another PATH directory.
godo "natural language request"
godo --dry-run "natural language request"
godo --json "natural language request"Output flow:
- Restated intent
- Risk level (
LOW,MEDIUM,HIGH) - Simplified script command (
Script: ...) - Approval prompt (
Run this now? (y/N))
Only y or yes executes.
godo "pause spotify"
godo "set spotify volume to 30"
godo "what is using ram"
godo "open obsidian"
godo "git status in this folder"
godo "list all files in /Users/server/Documents"
godo "say deployment completed"
godo "read out loud \"meeting starts in 5 minutes\""- Built-in categories:
spotify,app,sysinfo,files,speech - Speech supports
say/read/speak/speck <text>and compiles to macOSsay - Generic category:
shell(run_shell) for broad command support with structured args - Shell plans compile from JSON fields (
executable,arguments, optionalworking_directory) - Dangerous/unsupported requests still become non-executing manual plans
- The model returns JSON only and is schema-validated.
godocompiles deterministic scripts from templates.sudooperations are never executed bygodo.- Banned tokens cause hard refusal (
sudo,rm,chmod,chown,diskutil,shutdown,reboot,launchctl system,curl,wget,python -c,node -e). osascriptplans containingdo shell scriptare refused.- Approved plans are logged to
/Users/server/.godo/logs.
The CONFIG dictionary controls:
allowed_roots: default file-listing rootsollama_base_url: local Ollama endpointollama_model: model namebanned_tokens: hard safety deny-listlog_dir: audit log location
To add additional file roots, edit CONFIG["allowed_roots"] directly.
- AppleScript actions target a live GUI session;
godoprefers the currentlaunchctl gui/$UIDsession and otherwise falls back tolaunchctl asuserfor the console user. - For requests with
requires_gui_session,godorefuses execution if no active desktop user is logged in and shows manual recovery steps. - If Ollama is unreachable or returns invalid JSON twice,
godoexits with an error. - For local non-Ollama testing, you can inject a plan with
GODO_PLAN_JSON.