Tool Packs and Installed Assets
This page covers CLI commands that manage bundled OAT tool packs and installed OAT skill/agent assets in canonical directories.
Quick Look
- What it does: explains how bundled OAT packs are installed, updated, inspected, and removed.
- When to use it: when you need to add capabilities to a repo, update installed skills, or understand which packs own which tools.
- Primary commands:
oat tools list,oat tools install,oat tools update,oat tools remove
Bundled packs at a glance
core- foundational diagnostics and docs access (oat-doctor,oat-docs)docs- docs and agent-instructions governance workflowsworkflows- project lifecycle skills, wrap-up reporting, reviewer agents, and core project templatesideas- lightweight ideation and promotion flowsutility- review and repo-maintenance helpersproject-management- file-backed backlog/reference skills plus backlog and roadmap templatesresearch- research, analysis, comparison, and synthesis skillsbrainstorm- always-on brainstorming entry point with visual companion
oat tools command group
The oat tools command group provides a unified interface for managing installed tools (skills and agents) across scopes.
oat tools list
Purpose:
- List all installed tools with version, pack membership, scope, and update status
Key behavior:
- Scans installed skills and agents across project and user scopes
- Displays version, pack (
core,docs,ideas,workflows,utility,project-management,research,brainstorm,custom), and status (current,outdated,newer,not-bundled) - Supports
--scopefiltering and--jsonoutput
oat tools outdated
Purpose:
- Show only tools that have available updates (status
outdated)
Key behavior:
- Filters scan results to tools where the installed version is older than the bundled version
- Displays installed and available versions side by side
- Supports
--scopefiltering and--jsonoutput
oat tools info <name>
Purpose:
- Show detailed information about a single installed tool
Key behavior:
- Displays name, type (skill/agent), version, bundled version, pack, scope, and status
- Reports whether the tool is invocable (for skills) and whether an update is available
- Returns exit code 1 if the tool is not found in any scope
oat tools install
Purpose:
- Install bundled OAT tool packs (
core,docs,ideas,workflows,utility,project-management,research,brainstorm)
Key behavior:
- Same pack selection and install flow as
oat init tools - Pack-oriented install subcommands:
core,docs,ideas,workflows,utility,project-management,research,brainstorm - Interactive installs show each pack's current install location in the picker so already-installed packs are visible before you submit
- User-scope follow-up choices are prepopulated from the current install state for user-eligible packs (
ideas,docs,utility,research,brainstorm) - The
brainstormpack defaults to user scope on fresh installs (driven byPACK_METADATA[brainstorm].defaultScope = 'user'); existing project-scope installs still take precedence on re-install so users do not get unexpected scope migrations - If a user-eligible pack is already installed in both project and user scope, the installer asks whether to keep both installs or normalize the pack to user scope before it makes any cleanup changes
- Changing a user-eligible pack from project scope to user scope, or back again, is treated as a migration: the old canonical copy is removed so the pack ends in the selected scope instead of accumulating duplicate installs
- Tracks installed vs bundled skill versions and reports outdated skills
- Records installed pack state in shared repo config as
tools.<pack>: trueso other OAT workflows can detect installed capabilities without relying on filesystem heuristics - Interactive runs can prompt to update selected outdated skills
- Successful installs report the final scope chosen for each pack, including
project + userwhen both installs are preserved, and auto-sync every scope touched by the install or migration - Install-triggered auto-sync limits removal planning to the canonical entries from the pack that was just installed, so stale manifest drift in unrelated packs does not delete other provider views
- Use
--no-syncto skip auto-sync
oat tools update
Purpose:
- Update installed tools to the latest bundled versions
Key behavior:
- Accepts a tool name,
--pack <pack>, or--all(mutually exclusive) - Compares installed versions against bundled versions and copies updated assets
- For
--pack <pack>and--all, an already-installed pack is reconciled to include newly added bundled skills or agents in that same scope - For
--pack <pack>and--all, shared repo config is also reconciled from an installed-pack scan sotools.*reflects what is actually available and staletrueflags are cleared - Dry-run mode with
--dry-run; auto-sync after mutations by default - Use
--no-syncto skip auto-sync - Reports tools that are already current, newer than bundled, or not bundled (custom)
oat tools remove
Purpose:
- Remove installed tools (skills and agents)
Key behavior:
- Accepts a tool name,
--pack <pack>, or--all(mutually exclusive) - Removes skill directories and agent
.mdfiles from canonical locations - For
--pack <pack>and--all, shared repo config is rewritten from a post-removal scan sotools.<pack>becomesfalsewhen a pack is no longer installed in any scope - Dry-run mode with
--dry-run; auto-sync after mutations by default - Use
--no-syncto skip auto-sync
Shared config signal: tools.*
Tool-pack lifecycle commands now persist pack availability in shared repo config under .oat/config.json.
oat tools install <pack>writestools.<pack>: trueoat tools update --pack <pack>andoat tools update --allrebuild the fulltoolsmap from installed-pack scansoat tools remove --pack <pack>andoat tools remove --allrebuild the same map after removals
This matters because other workflows can now check oat config get tools.<pack> instead of inferring capabilities from directory existence alone. For example, oat-project-document checks tools.project-management before auto-running repo-reference refresh work.
Core pack
The core pack contains foundational diagnostic and documentation skills:
- oat-doctor — Setup diagnostics with two modes: check mode (terse
brew doctor-style warnings with fix commands) and summary mode (full dashboard of installed packs, config values, and sync status). - oat-docs — Interactive Q&A skill backed by locally-bundled OAT documentation at
~/.oat/docs/.
Key behavior:
- Core pack always installs at user scope (
~/.agents/skills/), regardless of the--scopeflag. This ensures core skills are available in any directory. - Core is checked by default in the
oat init toolsguided setup. - Installation also bundles OAT documentation to
~/.oat/docs/for the oat-docs skill. oat tools update --pack corerefreshes both skills and~/.oat/docs/documentation.oat tools update --allalso refreshes~/.oat/docs/when an installed core pack is reconciled.
Docs pack
The docs pack contains active documentation and instruction-governance
workflows:
- oat-docs-bootstrap — Guide users through bootstrapping a docs app
end-to-end: preflight detection, input gathering, scaffold (via
oat docs init) with capability-gated post-patches, build verification, config inspection, and an educational walkthrough. - oat-docs-analyze — Analyze a docs surface for contract coverage, nav drift, stale claims, and coverage gaps.
- oat-docs-apply — Apply only approved, evidence-backed docs-analysis recommendations.
- oat-agent-instructions-analyze — Evaluate
AGENTS.mdand provider instruction coverage, quality, and drift. - oat-agent-instructions-apply — Generate or update approved instruction files from an analysis artifact.
Key behavior:
- Docs pack installs at the selected scope, typically
project. - It complements the
corepack:oat-docsanswers questions from bundled docs, while thedocspack adds analyze/apply workflows. oat tools install docsis the preferred install path;oat init tools docsremains available for backward compatibility.oat tools update --pack docsandoat tools remove --pack docsmanage the workflow skills as a unit.
Brainstorm pack
The brainstorm pack ships a single skill plus a bundled visual companion for
project-independent brainstorming conversations:
- oat-brainstorm — Brainstorming entry point with an explicit activation
contract. The OAT brainstorm banner is a workflow commitment marker, not a
response style — the skill enters mode only on Hard Activation (explicit
brainstormverb: "let's brainstorm", "brainstorm this", "can we brainstorm X", "help me brainstorm X", or/oat-brainstorm). Ambiguous exploratory phrasing ("I've been thinking about", "what if we", "help me think through") follows the Soft Exploratory Path — answered conversationally with brainstorm-quality reasoning (options, tradeoffs, no premature implementation, no destination guess) without the banner. After ≥2 sustained exploratory turns the skill offers mode once: "If you want, I can switch into structured brainstorm mode for this." Advisory / review / debug / PR / status / implementation / active-workflow questions ("thoughts?", "what's your take?", "does this seem right?", "why is this failing?") follow No Activation — direct response, no banner, no offer. Once entered, brainstorm mode runs a structured design conversation (one question at a time, 2-3 approaches with a recommendation) without committing the user to an idea or project artifact, and ends in a pack-aware terminal-state picker that hands off to existing OAT skills (idea capture, scoped backlog item, project promotion, active-project fold-back, doc-to-path) based on which packs are installed in the current repo. Two base outcomes (inline-only and write a brainstorming doc to a user-specified path) are always available regardless of installed packs.
Key behavior:
- Default user scope. The
brainstormpack is user-eligible and defaults to user scope so the always-on trigger fires consistently across directories and machines. This is driven by the generalized pack-metadata mechanism (PACK_METADATA[brainstorm].defaultScope = 'user'); other user-eligible packs (ideas,docs,utility,research) still default to project scope unless their metadata is updated. - Existing-install precedence. Re-running install on a pack that is
already installed at project scope preserves that scope —
defaultScopeonly applies to fresh installs. This protects users from unexpected scope migrations. - Default-on in
oat init.brainstormis checked by default in theoat init toolsguided setup, so new repos get the brainstorming entry point out of the box. - Visual companion. A bundled local browser-based UI (Node-based HTTP +
WebSocket server, content-fragment authoring, per-question terminal-vs-browser
routing) ships with the skill at
.agents/skills/oat-brainstorm/scripts/and is documented in.agents/skills/oat-brainstorm/references/visual-companion.md. The companion is offered only when the topic is visual-likely (mockups, layout comparisons, diagrams, visual option comparisons). Text-likely brainstorms skip the offer and can surface it later if the conversation turns visual. Persistence paths use OAT-managed prefixes (.oat/brainstorm/<session-id>/repo-scope or~/.oat/brainstorm/<session-id>/user-scope). - Terminal-state picker filtered by
tools.<pack>config. When the user converges on a destination, the skill consultsoat config get tools.ideas,tools.project-management, andtools.workflowsto filter the available terminal states. Pack-gated outcomes (capture-as-idea, scoped backlog item, project promotion, active-project fold-back) only appear when the corresponding pack is installed. - Destinations playbook. The full set of terminal-state stanzas — trigger
phrases, required template fields, confirmation patterns, handoff targets —
lives at
.agents/skills/oat-brainstorm/references/destinations.mdand is consulted by the skill at destination-identification time. - Pack lifecycle.
oat tools install brainstorm,oat tools update --pack brainstorm, andoat tools remove --pack brainstormmanage the skill plus visual-companion bundle as a unit. Standard config-write semantics (tools.brainstorm: trueon install) apply.
Auto-sync behavior
All mutation commands (install, update, remove) automatically run oat sync --scope <scope> after successful operations. This ensures provider views stay in sync with canonical assets without manual intervention.
Use --no-sync on any mutation command to skip this step.
For oat tools install, the follow-up sync still refreshes provider views immediately, but its removal pass is scoped to the canonical entries that were just installed. This avoids deleting unrelated provider views when a worktree has stale manifest entries for packs whose canonical content is absent locally.
Legacy commands
oat init tools
The oat init tools command remains available for backward compatibility. It has the same install behavior as oat tools install but does not include auto-sync — you must run oat sync --scope ... manually after install.
oat remove
The oat remove command group remains available for backward compatibility. It provides skill removal with dry-run/apply semantics and managed provider-view cleanup.
oat remove skill <name>— remove one installed skill by nameoat remove skills --pack <pack>— remove all installed skills from a bundled pack
These commands mutate by default; use --dry-run to preview deletions.
Related docs:
- Bootstrap (
oat init):bootstrap.md - Provider sync (
oat status,oat sync,oat providers ...):../provider-sync/index.md - Diagnostics and local-state commands:
config-and-local-state.md