agent utilsPi package

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 across the fleetOn the left, one ag command on a laptop. It reaches every enabled node concurrently over SSH. Each node keeps durable local archives: a speech feed, shared images with checksum sidecars, shared audio, and a Paratenic host with pending questions. ag tails and mutes speech, pulls images and audio incrementally with rsync into a private local cache and gallery, lists and answers questions, and checks each node's health. ag dash serves all of it as one live local web page. ag tts · image · audio choices · doctor · dash node a speech feed · images shared audio · Paratenic node b speech feed · images shared audio · Paratenic node c speech feed · images shared audio · Paratenic SSH, concurrent ag dash one live page on localhost local cache, gallery, player
No server, just archives.Every machine keeps its own durable records; ag reads them all over SSH, concurrently, and caches what it pulls.
ag --helpAgent speech, images, audio, choices and health across your machinesCommands:  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
CommandDoes
ag tts tailFollow every machine's speech feed live, or --no-follow -n 10 for recent history
ag tts mute, unmute, statusThe speech mute policy, fleet-wide or per machine
ag image, ag audioPull shared images or audio incrementally with rsync, then open a private local gallery or player; --offline uses the cache
ag choicesAnswer pending agent questions from every machine in one terminal UI
ag doctorPer machine: SSH and ag, the session host and its pending questions, speech recency, gallery cache
ag dashAll 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.

  1. Check the setup

    app_automation_doctor checks the catalogue, browser tooling and bridges.

  2. See what is stale

    app_automation_refresh_staleness reports per-action freshness.

  3. 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.

  4. Ask

    app_automation_work_briefing builds 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.