fleet & work
Every machine at once, and the apps you work in
Agents run on many machines. ag gathers what they say, show and ask into one place without a central server, and a set of work tools lets them search the web and read the apps where work actually happens.
ag
ag reads them all over SSH, concurrently, and caches what it pulls.ag --helpAgent speech, images, audio, choices and health across your machines Commands: hosts List configured nodes and effective storage paths tts Read speech requests, independently of playback success image Open a fleet-wide image gallery (or list/pull/get registered images) audio Open a fleet-wide player for explicitly shared audio (or list/pull/get/play clips) sync Sync every media pathway (images and shared audio) and regenerate both viewers choices Answer pending agent questions across the fleet (TUI; list/answer for scripts) doctor Check each node: SSH/ag, Paratenic AHP, speech feed and gallery cache dash Serve a live local web dashboard of choices, health, speech, images and audio config Manage canonical YAML configuration (symlinks preserved) mcp Serve finite read/config and confirmed speech-control tools over MCP stdio tools List typed MCP contracts without network access call Invoke the same typed handler as MCP with JSON arguments completions Generate shell completions without loading configuration
| Command | Does |
|---|---|
ag tts tail | Follow every machine's speech feed live, or --no-follow -n 10 for recent history |
ag tts mute, unmute, status | The speech mute policy, fleet-wide or per machine |
ag image, ag audio | Pull shared images or audio incrementally with rsync, then open a private local gallery or player; --offline uses the cache |
ag choices | Answer pending agent questions from every machine in one terminal UI |
ag doctor | Per machine: SSH and ag, the session host and its pending questions, speech recency, gallery cache |
ag dash | All of the above as one live local web page |
Nodes come from ~/.config/ag/config.yaml (or $AG_CONFIG); --host narrows to some, --local skips SSH entirely. Every command has a --json envelope, and ag mcp exposes 19 typed tools to agents. Read-only tools need nothing more; tools that change state, such as muting speech, answering questions or creating a config, require confirmed=true.
ag_tts_status ag_tts_mute ag_tts_unmute ag_tts_listag_image_pull ag_image_list ag_image_infoag_audio_pull ag_audio_list ag_audio_info ag_syncag_choices_list ag_choices_answer ag_doctor ag_hosts_listconfig_status config_validate config_schema config_init
Web search
search_web answers a question from live web results, with citations, through GitHub Copilot's Responses API, using Pi's own automatically refreshed Copilot token. It can also go through an OpenAI-compatible proxy. A /web-search prompt template wraps it, and a separate MCP server offers the same to other agents.
Work apps
Many work apps have no usable API for an agent. App automation gives agents a catalogue of approved, high-level actions instead of raw browser scripting: open, snapshot and summarise Slack, Outlook mail and calendar, Teams and calendars, each with a deterministic plan that can be dry-run first.
Check the setup
app_automation_doctorchecks the catalogue, browser tooling and bridges.See what is stale
app_automation_refresh_stalenessreports per-action freshness.Refresh
Through Playwright, Tendril, or a Windows devbox's browser over the Chrome DevTools protocol when that is where you are signed in. Snapshots are bounded and redacted; cookies and tokens are never stored.
Ask
app_automation_work_briefingbuilds a compact, staleness-aware index across all of them for questions such as "what needs me today?".
Slack also has native slack_* tools that return compact results, with messages grouped by conversation and user names resolved once, and writes that require explicit confirmation.
Skill and tool discovery
skill-search lets an agent find configured skills and host MCP servers without reloading anything, as one CLI and one MCP meta-tool:
skill-search list --jsonskill-search web query latest Rust MCP crateskill-search mcp stdio
linear-extra wraps a Linear MCP server with draft support.