@ai-outfitter/outfitter 0.11.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.outfitter/skills/outfitter/SKILL.md +67 -37
- package/README.md +63 -35
- package/code/enterprise/cli/privateCatalogSettings.cjs +2 -2
- package/code/enterprise/pi-extension/privateCatalogOnboarding.js +5 -8
- package/code/enterprise/shared/privateCatalogPolicy.cjs +5 -5
- package/code/pi-extension/src/outfitter-extension.js +353 -553
- package/code/pi-extension/src/outfitter-runtime-extension.js +160 -0
- package/dist/agents/AgentLaunch.d.ts +9 -1
- package/dist/agents/AgentLaunch.js +19 -0
- package/dist/agents/AgentLaunch.js.map +1 -1
- package/dist/agents/PiCredentialPersistence.d.ts +6 -0
- package/dist/agents/PiCredentialPersistence.js +33 -0
- package/dist/agents/PiCredentialPersistence.js.map +1 -0
- package/dist/cli/OutfitterCli.js +10 -18
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/CommandObject.d.ts +0 -5
- package/dist/cli/commands/CommandObject.js +1 -4
- package/dist/cli/commands/CommandObject.js.map +1 -1
- package/dist/cli/commands/DumpCommand.d.ts +19 -0
- package/dist/cli/commands/DumpCommand.js +54 -0
- package/dist/cli/commands/DumpCommand.js.map +1 -0
- package/dist/cli/commands/ListCommand.d.ts +17 -0
- package/dist/cli/commands/ListCommand.js +77 -0
- package/dist/cli/commands/ListCommand.js.map +1 -0
- package/dist/cli/commands/PiRuntimeLaunch.d.ts +8 -0
- package/dist/cli/commands/PiRuntimeLaunch.js +47 -0
- package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -0
- package/dist/cli/commands/ProcessDefaults.d.ts +2 -0
- package/dist/cli/commands/ProcessDefaults.js +5 -0
- package/dist/cli/commands/ProcessDefaults.js.map +1 -0
- package/dist/cli/commands/RunAgentCommand.d.ts +46 -0
- package/dist/cli/commands/RunAgentCommand.js +176 -0
- package/dist/cli/commands/RunAgentCommand.js.map +1 -0
- package/dist/cli/commands/SetupCommand.d.ts +38 -6
- package/dist/cli/commands/SetupCommand.js +194 -232
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/ValidateCommand.d.ts +20 -0
- package/dist/cli/commands/ValidateCommand.js +54 -0
- package/dist/cli/commands/ValidateCommand.js.map +1 -0
- package/dist/composer/Composer.d.ts +11 -0
- package/dist/composer/Composer.js +72 -0
- package/dist/composer/Composer.js.map +1 -0
- package/dist/composer/Composition.d.ts +33 -0
- package/dist/composer/Composition.js +2 -0
- package/dist/composer/Composition.js.map +1 -0
- package/dist/dump/Containment.d.ts +8 -0
- package/dist/dump/Containment.js +22 -0
- package/dist/dump/Containment.js.map +1 -0
- package/dist/dump/Dump.d.ts +8 -0
- package/dist/dump/Dump.js +182 -0
- package/dist/dump/Dump.js.map +1 -0
- package/dist/extensions/PiExtensionCache.d.ts +30 -0
- package/dist/extensions/PiExtensionCache.js +92 -0
- package/dist/extensions/PiExtensionCache.js.map +1 -0
- package/dist/fs/TypeConflict.d.ts +6 -0
- package/dist/fs/TypeConflict.js +21 -0
- package/dist/fs/TypeConflict.js.map +1 -0
- package/dist/paths/OutfitterCache.d.ts +6 -0
- package/dist/paths/OutfitterCache.js +17 -0
- package/dist/paths/OutfitterCache.js.map +1 -0
- package/dist/projection/Materialize.d.ts +24 -0
- package/dist/projection/Materialize.js +83 -0
- package/dist/projection/Materialize.js.map +1 -0
- package/dist/projection/ProjectHarness.d.ts +5 -0
- package/dist/projection/ProjectHarness.js +77 -0
- package/dist/projection/ProjectHarness.js.map +1 -0
- package/dist/projection/Projection.d.ts +23 -0
- package/dist/projection/Projection.js +2 -0
- package/dist/projection/Projection.js.map +1 -0
- package/dist/resolver/AgentDefinition.d.ts +30 -0
- package/dist/resolver/AgentDefinition.js +123 -0
- package/dist/resolver/AgentDefinition.js.map +1 -0
- package/dist/resolver/Layer.d.ts +12 -0
- package/dist/resolver/Layer.js +30 -0
- package/dist/resolver/Layer.js.map +1 -0
- package/dist/resolver/Resolver.d.ts +3 -0
- package/dist/resolver/Resolver.js +163 -0
- package/dist/resolver/Resolver.js.map +1 -0
- package/dist/resolver/ResolverContext.d.ts +15 -0
- package/dist/resolver/ResolverContext.js +11 -0
- package/dist/resolver/ResolverContext.js.map +1 -0
- package/dist/resolver/ResolverValidation.d.ts +11 -0
- package/dist/resolver/ResolverValidation.js +112 -0
- package/dist/resolver/ResolverValidation.js.map +1 -0
- package/dist/resolver/Resource.d.ts +88 -0
- package/dist/resolver/Resource.js +34 -0
- package/dist/resolver/Resource.js.map +1 -0
- package/dist/schemas/agent.schema.json +48 -0
- package/dist/schemas/settings.schema.json +32 -9
- package/dist/settings/Settings.d.ts +34 -5
- package/dist/settings/Settings.js +3 -1
- package/dist/settings/Settings.js.map +1 -1
- package/dist/settings/SettingsLoader.d.ts +1 -1
- package/dist/settings/SettingsLoader.js +23 -22
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/settings/SettingsMerger.js +12 -10
- package/dist/settings/SettingsMerger.js.map +1 -1
- package/dist/setup/DefaultCatalog.d.ts +20 -0
- package/dist/setup/DefaultCatalog.js +89 -0
- package/dist/setup/DefaultCatalog.js.map +1 -0
- package/dist/setup/Setup.d.ts +43 -0
- package/dist/setup/Setup.js +261 -0
- package/dist/setup/Setup.js.map +1 -0
- package/dist/skills/SkillDocument.d.ts +6 -1
- package/dist/skills/SkillDocument.js.map +1 -1
- package/dist/sources/SourceCache.d.ts +19 -0
- package/dist/{profiles/ProfileCache.js → sources/SourceCache.js} +22 -18
- package/dist/sources/SourceCache.js.map +1 -0
- package/dist/validation/SchemaValidator.d.ts +1 -1
- package/dist/validation/SchemaValidator.js +4 -13
- package/dist/validation/SchemaValidator.js.map +1 -1
- package/docs/architecture/state_writeback_strategy.md +54 -122
- package/docs/documentation/README.md +33 -12
- package/docs/documentation/actions.md +35 -52
- package/docs/documentation/agents.md +109 -0
- package/docs/documentation/best-practices.md +25 -63
- package/docs/documentation/catalogs.md +126 -0
- package/docs/documentation/cli.md +39 -41
- package/docs/documentation/concepts.md +66 -23
- package/docs/documentation/dump-and-bake.md +30 -0
- package/docs/documentation/first-time-cli-agent-users.md +8 -8
- package/docs/documentation/getting-started.md +28 -8
- package/docs/documentation/hooks.md +20 -0
- package/docs/documentation/iterating-on-profiles.md +56 -70
- package/docs/documentation/local-development.md +84 -0
- package/docs/documentation/migration.md +39 -0
- package/docs/documentation/personas.md +41 -0
- package/docs/documentation/porting-claude.md +54 -0
- package/docs/documentation/profiles.md +16 -169
- package/docs/documentation/settings.md +61 -0
- package/docs/documentation/skills.md +93 -334
- package/docs/documentation/state.md +24 -62
- package/docs/documentation/subagents.md +37 -0
- package/docs/documentation/support-matrix.md +40 -35
- package/docs/documentation/switching-to-outfitter.md +75 -81
- package/docs/documentation/tasks.md +13 -0
- package/docs/documentation/usecases/engineering.md +67 -84
- package/docs/documentation/usecases/organization-profile-catalog.md +83 -111
- package/docs/documentation/usecases/persona-reviews.md +133 -139
- package/docs/philosophy.md +2 -2
- package/package.json +3 -3
- package/src/schemas/agent.schema.json +48 -0
- package/src/schemas/settings.schema.json +32 -9
- package/dist/agents/AdapterProfileControls.d.ts +0 -21
- package/dist/agents/AdapterProfileControls.js +0 -76
- package/dist/agents/AdapterProfileControls.js.map +0 -1
- package/dist/agents/AdapterStatePaths.d.ts +0 -12
- package/dist/agents/AdapterStatePaths.js +0 -46
- package/dist/agents/AdapterStatePaths.js.map +0 -1
- package/dist/agents/AgentAdapter.d.ts +0 -44
- package/dist/agents/AgentAdapter.js +0 -2
- package/dist/agents/AgentAdapter.js.map +0 -1
- package/dist/agents/AgentRegistry.d.ts +0 -6
- package/dist/agents/AgentRegistry.js +0 -17
- package/dist/agents/AgentRegistry.js.map +0 -1
- package/dist/agents/LaunchResources.d.ts +0 -17
- package/dist/agents/LaunchResources.js +0 -61
- package/dist/agents/LaunchResources.js.map +0 -1
- package/dist/agents/OutfitterSkill.d.ts +0 -11
- package/dist/agents/OutfitterSkill.js +0 -128
- package/dist/agents/OutfitterSkill.js.map +0 -1
- package/dist/agents/ResourceIdentity.d.ts +0 -2
- package/dist/agents/ResourceIdentity.js +0 -51
- package/dist/agents/ResourceIdentity.js.map +0 -1
- package/dist/agents/claude/ClaudeAdapter.d.ts +0 -2
- package/dist/agents/claude/ClaudeAdapter.js +0 -148
- package/dist/agents/claude/ClaudeAdapter.js.map +0 -1
- package/dist/agents/claude/ClaudeCompositeProfileWriter.d.ts +0 -5
- package/dist/agents/claude/ClaudeCompositeProfileWriter.js +0 -7
- package/dist/agents/claude/ClaudeCompositeProfileWriter.js.map +0 -1
- package/dist/agents/pi/PiAdapter.d.ts +0 -2
- package/dist/agents/pi/PiAdapter.js +0 -363
- package/dist/agents/pi/PiAdapter.js.map +0 -1
- package/dist/agents/pi/PiArgs.d.ts +0 -2
- package/dist/agents/pi/PiArgs.js +0 -15
- package/dist/agents/pi/PiArgs.js.map +0 -1
- package/dist/agents/pi/PiCompositeProfileWriter.d.ts +0 -5
- package/dist/agents/pi/PiCompositeProfileWriter.js +0 -7
- package/dist/agents/pi/PiCompositeProfileWriter.js.map +0 -1
- package/dist/agents/pi/PiExtensionCache.d.ts +0 -12
- package/dist/agents/pi/PiExtensionCache.js +0 -195
- package/dist/agents/pi/PiExtensionCache.js.map +0 -1
- package/dist/agents/pi/PiMcpConfig.d.ts +0 -2
- package/dist/agents/pi/PiMcpConfig.js +0 -114
- package/dist/agents/pi/PiMcpConfig.js.map +0 -1
- package/dist/agents/pi/PiSettingsMergePolicy.d.ts +0 -17
- package/dist/agents/pi/PiSettingsMergePolicy.js +0 -59
- package/dist/agents/pi/PiSettingsMergePolicy.js.map +0 -1
- package/dist/agents/pi/PiSkillSources.d.ts +0 -8
- package/dist/agents/pi/PiSkillSources.js +0 -73
- package/dist/agents/pi/PiSkillSources.js.map +0 -1
- package/dist/cli/commands/FirstRunWelcomeProfile.d.ts +0 -11
- package/dist/cli/commands/FirstRunWelcomeProfile.js +0 -110
- package/dist/cli/commands/FirstRunWelcomeProfile.js.map +0 -1
- package/dist/cli/commands/PiLoginLaunch.d.ts +0 -22
- package/dist/cli/commands/PiLoginLaunch.js +0 -170
- package/dist/cli/commands/PiLoginLaunch.js.map +0 -1
- package/dist/cli/commands/RunCommand.d.ts +0 -36
- package/dist/cli/commands/RunCommand.js +0 -345
- package/dist/cli/commands/RunCommand.js.map +0 -1
- package/dist/cli/commands/SyncCommand.d.ts +0 -46
- package/dist/cli/commands/SyncCommand.js +0 -244
- package/dist/cli/commands/SyncCommand.js.map +0 -1
- package/dist/cli/commands/WelcomeCommand.d.ts +0 -56
- package/dist/cli/commands/WelcomeCommand.js +0 -224
- package/dist/cli/commands/WelcomeCommand.js.map +0 -1
- package/dist/cli/commands/assets/outfitter-ascii.txt +0 -5
- package/dist/cli/commands/profile/Command.d.ts +0 -7
- package/dist/cli/commands/profile/Command.js +0 -24
- package/dist/cli/commands/profile/Command.js.map +0 -1
- package/dist/cli/commands/profile/CreateCommand.d.ts +0 -19
- package/dist/cli/commands/profile/CreateCommand.js +0 -115
- package/dist/cli/commands/profile/CreateCommand.js.map +0 -1
- package/dist/cli/commands/profile/LintCommand.d.ts +0 -19
- package/dist/cli/commands/profile/LintCommand.js +0 -155
- package/dist/cli/commands/profile/LintCommand.js.map +0 -1
- package/dist/cli/commands/profile/ListCommand.d.ts +0 -19
- package/dist/cli/commands/profile/ListCommand.js +0 -91
- package/dist/cli/commands/profile/ListCommand.js.map +0 -1
- package/dist/cli/commands/profile/Shared.d.ts +0 -9
- package/dist/cli/commands/profile/Shared.js +0 -10
- package/dist/cli/commands/profile/Shared.js.map +0 -1
- package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +0 -7
- package/dist/cli/commands/run/RunFirstRunOnboarding.js +0 -52
- package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +0 -1
- package/dist/cli/commands/run/RunLaunchSummary.d.ts +0 -2
- package/dist/cli/commands/run/RunLaunchSummary.js +0 -35
- package/dist/cli/commands/run/RunLaunchSummary.js.map +0 -1
- package/dist/cli/commands/run/RunProfileResolution.d.ts +0 -39
- package/dist/cli/commands/run/RunProfileResolution.js +0 -128
- package/dist/cli/commands/run/RunProfileResolution.js.map +0 -1
- package/dist/cli/commands/run/RunStateWritePrompt.d.ts +0 -2
- package/dist/cli/commands/run/RunStateWritePrompt.js +0 -29
- package/dist/cli/commands/run/RunStateWritePrompt.js.map +0 -1
- package/dist/cli/commands/setup/SetupPrompts.d.ts +0 -14
- package/dist/cli/commands/setup/SetupPrompts.js +0 -296
- package/dist/cli/commands/setup/SetupPrompts.js.map +0 -1
- package/dist/cli/commands/setup/SetupSourceImport.d.ts +0 -5
- package/dist/cli/commands/setup/SetupSourceImport.js +0 -177
- package/dist/cli/commands/setup/SetupSourceImport.js.map +0 -1
- package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +0 -4
- package/dist/cli/commands/setup/SetupSourceLaunch.js +0 -65
- package/dist/cli/commands/setup/SetupSourceLaunch.js.map +0 -1
- package/dist/cli/commands/setup/SetupStarterSource.d.ts +0 -21
- package/dist/cli/commands/setup/SetupStarterSource.js +0 -133
- package/dist/cli/commands/setup/SetupStarterSource.js.map +0 -1
- package/dist/cli/commands/setup/SetupTypes.d.ts +0 -91
- package/dist/cli/commands/setup/SetupTypes.js +0 -26
- package/dist/cli/commands/setup/SetupTypes.js.map +0 -1
- package/dist/compositeProfile/CompositeProfile.d.ts +0 -8
- package/dist/compositeProfile/CompositeProfile.js +0 -6
- package/dist/compositeProfile/CompositeProfile.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileAssembler.d.ts +0 -12
- package/dist/compositeProfile/CompositeProfileAssembler.js +0 -32
- package/dist/compositeProfile/CompositeProfileAssembler.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileCleanup.d.ts +0 -9
- package/dist/compositeProfile/CompositeProfileCleanup.js +0 -87
- package/dist/compositeProfile/CompositeProfileCleanup.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileFile.d.ts +0 -16
- package/dist/compositeProfile/CompositeProfileFile.js +0 -16
- package/dist/compositeProfile/CompositeProfileFile.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileTemplate.d.ts +0 -15
- package/dist/compositeProfile/CompositeProfileTemplate.js +0 -65
- package/dist/compositeProfile/CompositeProfileTemplate.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileWatcher.d.ts +0 -18
- package/dist/compositeProfile/CompositeProfileWatcher.js +0 -46
- package/dist/compositeProfile/CompositeProfileWatcher.js.map +0 -1
- package/dist/compositeProfile/StatePersistence.d.ts +0 -39
- package/dist/compositeProfile/StatePersistence.js +0 -249
- package/dist/compositeProfile/StatePersistence.js.map +0 -1
- package/dist/fs/SafeSymlink.d.ts +0 -13
- package/dist/fs/SafeSymlink.js +0 -50
- package/dist/fs/SafeSymlink.js.map +0 -1
- package/dist/profiles/Profile.d.ts +0 -60
- package/dist/profiles/Profile.js +0 -7
- package/dist/profiles/Profile.js.map +0 -1
- package/dist/profiles/ProfileCache.d.ts +0 -8
- package/dist/profiles/ProfileCache.js.map +0 -1
- package/dist/profiles/ProfileLoader.d.ts +0 -28
- package/dist/profiles/ProfileLoader.js +0 -299
- package/dist/profiles/ProfileLoader.js.map +0 -1
- package/dist/profiles/ProfileMerger.d.ts +0 -19
- package/dist/profiles/ProfileMerger.js +0 -112
- package/dist/profiles/ProfileMerger.js.map +0 -1
- package/dist/profiles/ProfileSource.d.ts +0 -35
- package/dist/profiles/ProfileSource.js +0 -13
- package/dist/profiles/ProfileSource.js.map +0 -1
- package/dist/profiles/PromptIncludes.d.ts +0 -32
- package/dist/profiles/PromptIncludes.js +0 -147
- package/dist/profiles/PromptIncludes.js.map +0 -1
- package/dist/prompts/SystemPromptExport.d.ts +0 -16
- package/dist/prompts/SystemPromptExport.js +0 -81
- package/dist/prompts/SystemPromptExport.js.map +0 -1
- package/dist/schemas/profile-source.schema.json +0 -29
- package/dist/schemas/profile.schema.json +0 -200
- package/dist/skills/ProfileSkillResolution.d.ts +0 -21
- package/dist/skills/ProfileSkillResolution.js +0 -88
- package/dist/skills/ProfileSkillResolution.js.map +0 -1
- package/dist/skills/SkillCatalog.d.ts +0 -41
- package/dist/skills/SkillCatalog.js +0 -119
- package/dist/skills/SkillCatalog.js.map +0 -1
- package/dist/skills/SkillResolution.d.ts +0 -34
- package/dist/skills/SkillResolution.js +0 -369
- package/dist/skills/SkillResolution.js.map +0 -1
- package/docs/documentation/profile-repository.md +0 -179
- package/src/schemas/SchemaDocument.ts +0 -20
- package/src/schemas/profile-source.schema.json +0 -29
- package/src/schemas/profile.schema.json +0 -200
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Agents
|
|
2
|
+
|
|
3
|
+
An agent is the protocol's identity resource — and, in Outfitter, the thing you run. A directory under `agents/<id>/` holds an `agent.md` definition and an optional `config.json`. Together they carry both _who the agent is_ and _what it runs with_: its skills, MCP servers, subagents, extensions, plugins, model, thinking level, and tool policy. That whole bundle — identity plus loadout — is what earlier drafts called a "profile." There is no separate profile resource; **an agent is the profile**. See [Profiles](./profiles.md).
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
.agents/
|
|
7
|
+
agents/
|
|
8
|
+
engineer/
|
|
9
|
+
agent.md
|
|
10
|
+
config.json # optional
|
|
11
|
+
skills/ # capabilities private to engineer
|
|
12
|
+
release-debug/SKILL.md
|
|
13
|
+
hooks/ # reserved for a future portable hook entity
|
|
14
|
+
code-reviewer/
|
|
15
|
+
agent.md
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## agent.md
|
|
19
|
+
|
|
20
|
+
`agent.md` describes the identity in markdown — who the agent is, its policy and posture, how it approaches work — and declares its loadout in frontmatter:
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
---
|
|
24
|
+
name: engineer
|
|
25
|
+
description: Implements features and fixes with a bias toward small, verifiable changes.
|
|
26
|
+
skills: [wiki, research]
|
|
27
|
+
subagents: [code-reviewer]
|
|
28
|
+
extensions: [outfitter-mode]
|
|
29
|
+
plugins: [git-tools]
|
|
30
|
+
mcp: [github]
|
|
31
|
+
model: gpt-5.2
|
|
32
|
+
thinking: high
|
|
33
|
+
tools:
|
|
34
|
+
allow: [read, edit, bash]
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# Engineer
|
|
38
|
+
|
|
39
|
+
You implement changes directly, keep diffs small, and verify before claiming done...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Keep the prose focused on durable identity and behavior. Per-capability procedures belong in [skills](./skills.md); the frontmatter only _selects_ resources by slug — it never copies their content.
|
|
43
|
+
|
|
44
|
+
### Loadout fields
|
|
45
|
+
|
|
46
|
+
| Field | Selects |
|
|
47
|
+
| ------------ | ---------------------------------------------------------------------------- |
|
|
48
|
+
| `skills` | [Skill](./skills.md) slugs made available to the run. |
|
|
49
|
+
| `mcp` | MCP servers from the tree's `mcp.json` to enable. |
|
|
50
|
+
| `subagents` | Agent slugs projected as harness delegates. See [Subagents](./subagents.md). |
|
|
51
|
+
| `extensions` | Pi extensions to load. First-class, per the adapter. |
|
|
52
|
+
| `plugins` | Pi plugins to load. First-class, per the adapter. |
|
|
53
|
+
| `model` | Provider/model from `models.json`. |
|
|
54
|
+
| `thinking` | Thinking/effort level. |
|
|
55
|
+
| `tools` | Allowed/denied tool policy for the run. |
|
|
56
|
+
|
|
57
|
+
Every value is a slug resolved across layers. Skills first check `agents/<agent>/skills/<slug>/` across layer precedence, then fall back to catalog-wide `skills/<slug>/`. This lets an agent own private implementation capabilities without exposing them to every agent in the catalog. See [Skills](./skills.md#agent-local-skills).
|
|
58
|
+
|
|
59
|
+
`knowledge` and `commands` resolve the same way — an agent may keep private files under `agents/<agent>/knowledge/` and `agents/<agent>/commands/`, local-first over the catalog-wide trees. `subagents` are always catalog-wide (a delegate is a shared agent). `extensions`/`plugins` are harness-native passthroughs with no on-disk namespace, and `model`/`thinking`/`tools` are per-agent already via `config.json` merge.
|
|
60
|
+
|
|
61
|
+
## Pi configuration overlay
|
|
62
|
+
|
|
63
|
+
An agent may own native Pi configuration under `agents/<agent>/pi/`. Outfitter overlays that folder into the temporary `PI_CODING_AGENT_DIR` before launching Pi, so native files keep their standard names and formats:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
agents/founder/
|
|
67
|
+
├── agent.md
|
|
68
|
+
└── pi/
|
|
69
|
+
├── settings.json
|
|
70
|
+
├── keybindings.json
|
|
71
|
+
├── models.json
|
|
72
|
+
└── themes/
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The overlay is file-based. Source layers are applied from lowest to highest precedence, so a workspace `agents/founder/pi/keybindings.json` replaces the same file from a global or remote catalog while unrelated lower-layer files remain present. Outfitter does not follow symlinks from the overlay. The folder is ignored when the selected harness is not Pi.
|
|
76
|
+
|
|
77
|
+
Outfitter writes generated identity and composed skills after applying the native overlay, and seeds durable Pi credentials immediately before launch. Those runtime-owned resources therefore cannot be replaced accidentally by a profile overlay.
|
|
78
|
+
|
|
79
|
+
Two per-agent surfaces are **discovered but not yet projected** (adapter parity is tracked in [#183](https://github.com/ai-outfitter/outfitter/issues/183)): `agents/<agent>/mcp.json` (merges by server id over the tree-root `mcp.json`) and the reserved `agents/<agent>/hooks/` namespace (see [Hooks](./hooks.md)). Both surface a validation warning when present so a selection placed there is never silently dropped.
|
|
80
|
+
|
|
81
|
+
## config.json
|
|
82
|
+
|
|
83
|
+
The optional `config.json` carries structured or harness-specific configuration that is awkward in frontmatter, following the protocol's schema for the pinned revision. JSON files merge across layers per the protocol's JSON merge behavior, so a workspace layer can adjust one field of a globally defined agent — swap the model, add an extension — without copying the whole definition.
|
|
84
|
+
|
|
85
|
+
## Tree-level context
|
|
86
|
+
|
|
87
|
+
Two files at the tree root complement agent definitions:
|
|
88
|
+
|
|
89
|
+
- `agents.md` — shared operating context that applies to every run from this tree.
|
|
90
|
+
- `system-prompt.md` — the base system prompt an agent's identity layers on top of.
|
|
91
|
+
|
|
92
|
+
## Running an agent
|
|
93
|
+
|
|
94
|
+
Select an agent by slug; choose the harness with `--harness`:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
outfitter run engineer
|
|
98
|
+
outfitter run engineer --harness claude
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`default_agent` in [settings](./settings.md) sets what plain `outfitter` runs.
|
|
102
|
+
|
|
103
|
+
## Resolution
|
|
104
|
+
|
|
105
|
+
Agents resolve by slug across layers — workspace, global, then remote sources — with merge-by-ID semantics: a workspace `agents/engineer/` overrides a global or remote one. Agent-local skills merge by their owner and slug using the same layer order. `outfitter list agents` shows every resolvable agent and its winning source; `outfitter list skills --agent engineer` shows its effective skill namespace; `outfitter validate` reports broken loadout slugs and shadowed definitions.
|
|
106
|
+
|
|
107
|
+
## Agents as delegates
|
|
108
|
+
|
|
109
|
+
The same agent definition can also be selected as a [subagent](./subagents.md) in another agent's `subagents` list — a delegate the run can hand focused work to. A leader agent's loadout is where that delegation is declared.
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
# Best practices
|
|
2
2
|
|
|
3
|
-
Outfitter works best with a few stable
|
|
4
|
-
Profiles define who the agent is and the boundaries it operates within. Skills
|
|
5
|
-
define what the agent can progressively learn to do.
|
|
3
|
+
Outfitter works best with a few stable [agents](./agents.md) and many focused skills. An agent defines who it is, the boundaries it operates within, and — through its loadout — what it composes. Skills define what the agent can progressively learn to do.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
The target shape for a project:
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
- zero authored profile files ([an agent and its loadout is the profile](./profiles.md));
|
|
8
|
+
- a small set of reusable agents;
|
|
9
|
+
- one [skill](./skills.md) per capability rather than one skill per trigger;
|
|
10
|
+
- one reusable DeepWork job per multi-step procedure where needed;
|
|
11
|
+
- the minimum GitHub workflow set required by trigger and permission boundaries;
|
|
12
|
+
- only the transitive resource closure required by the selected agent when [dumping](./dump-and-bake.md).
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
issue planning, code review, deployment smoke testing, KPI reporting, release
|
|
16
|
-
preparation. Adding a new situation SHOULD usually add a skill and a concise
|
|
17
|
-
activation rule, not another profile. Reserve profile inheritance for genuine
|
|
18
|
-
control and policy composition; do not require consumers to inherit a profile
|
|
19
|
-
merely to access one of its skills.
|
|
14
|
+
## Prefer a few agents and many skills
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
Create an agent for a durable identity or policy boundary — engineering, platform operations, support. An agent owns operating policy and safety boundaries, conventions, the short rules for selecting skills, and its loadout.
|
|
17
|
+
|
|
18
|
+
Add a skill when the new behavior is a capability within an existing identity: issue planning, code review, deployment smoke testing, KPI reporting, release preparation. Adding a new situation SHOULD usually add a skill and a concise activation rule, not another agent.
|
|
19
|
+
|
|
20
|
+
Prefer one agent with many skills:
|
|
22
21
|
|
|
23
22
|
```text
|
|
24
|
-
platform
|
|
23
|
+
platform agent
|
|
25
24
|
├── issue-planning skill
|
|
26
25
|
├── issue-implementation skill
|
|
27
26
|
├── kpi-reporting skill
|
|
@@ -29,48 +28,23 @@ platform profile
|
|
|
29
28
|
└── failed-deployment-triage skill
|
|
30
29
|
```
|
|
31
30
|
|
|
32
|
-
Avoid separate `issue-planner`, `deployment-reviewer`, and `kpi-reporter`
|
|
33
|
-
profiles when they share the same platform identity, permissions, and tools.
|
|
34
|
-
Adding release notes later should add a `release-notes` skill to the platform
|
|
35
|
-
profile, not a `release-notes-agent` profile with copies of the same controls.
|
|
31
|
+
Avoid separate `issue-planner`, `deployment-reviewer`, and `kpi-reporter` agents when they share the same platform identity, permissions, and tools. Adding release notes later should add a `release-notes` skill, not a `release-notes-agent` with copies of the same policy.
|
|
36
32
|
|
|
37
|
-
Separate
|
|
38
|
-
engineering agent may edit code, run tests, and push branches; a customer
|
|
39
|
-
support agent may read customer conversations and draft replies but must not
|
|
40
|
-
modify repositories. Those are different identities with different data access,
|
|
41
|
-
tools, and write permissions, so separate `engineering` and `support` profiles
|
|
42
|
-
are appropriate — and each can still expose many focused skills.
|
|
33
|
+
Separate agents are appropriate when the policy boundary differs. An engineering agent may edit code, run tests, and push branches; a customer support agent may read customer conversations and draft replies but must not modify repositories. Those are different identities with different data access and write permissions — and each can still expose many focused skills.
|
|
43
34
|
|
|
44
35
|
## Keep skills focused
|
|
45
36
|
|
|
46
|
-
Give each skill one recognizable capability and a description precise enough
|
|
47
|
-
for an agent to decide when it applies. Keep common policy in the profile
|
|
48
|
-
rather than repeating it across every skill.
|
|
37
|
+
Give each skill one recognizable capability and a description precise enough for an agent to decide when it applies. Keep common policy in the agent definition rather than repeating it across every skill.
|
|
49
38
|
|
|
50
|
-
Focused does not mean tiny. Err on the side of one larger skill that
|
|
51
|
-
[routes to different references](./skills.md#skills-as-routers) over many
|
|
52
|
-
near-duplicate skills: split a skill only when its description can no longer
|
|
53
|
-
say when it applies. Point references at existing human-maintained
|
|
54
|
-
documentation rather than writing new agent-only copies, and use
|
|
55
|
-
[profile-added references](./skills.md#profile-added-references) to specialize
|
|
56
|
-
a shared skill instead of forking it.
|
|
39
|
+
Focused does not mean tiny. Err on the side of one larger skill that [routes to different references](./skills.md#skills-as-routers) over many near-duplicate skills: split a skill only when its description can no longer say when it applies. Point references at existing human-maintained documentation rather than writing new agent-only copies, and use [loadout-added references](./skills.md#loadout-added-references) to specialize a shared skill instead of forking it.
|
|
57
40
|
|
|
58
41
|
## Use references for human documentation
|
|
59
42
|
|
|
60
|
-
Keep canonical architecture, policy, and operating documents in normal `docs/`
|
|
61
|
-
locations where people already maintain and review them. Declare those files as
|
|
62
|
-
skill `references` instead of copying them into skill directories, and read
|
|
63
|
-
them only after the skill activates so every run does not pay the context cost
|
|
64
|
-
of every possible workflow. See
|
|
65
|
-
[External references](./skills.md#external-references) for the reference format
|
|
66
|
-
and trust rules.
|
|
43
|
+
Keep canonical architecture, policy, and operating documents in normal `docs/` locations where people already maintain and review them. Declare those files as skill `references` instead of copying them into skill directories, and read them only after the skill activates so every run does not pay the context cost of every possible workflow. See [External references](./skills.md#external-references) for the reference format and trust rules.
|
|
67
44
|
|
|
68
45
|
## Keep routing concise
|
|
69
46
|
|
|
70
|
-
|
|
71
|
-
Keep these activation rules short; detailed procedures belong in the selected
|
|
72
|
-
skills and their references, never repeated in the profile prompt (see
|
|
73
|
-
[Where context and instructions live](./skills.md#where-context-and-instructions-live)).
|
|
47
|
+
An agent can map stable runtime signals to relevant skills. Keep these activation rules short; detailed procedures belong in the selected skills and their references, never repeated in the agent (see [Where context and instructions live](./skills.md#where-context-and-instructions-live)).
|
|
74
48
|
|
|
75
49
|
```text
|
|
76
50
|
Select only the skill relevant to the current task.
|
|
@@ -79,27 +53,15 @@ Select only the skill relevant to the current task.
|
|
|
79
53
|
- Recurring repository activity report: use kpi-reporting.
|
|
80
54
|
- Successful environment awaiting verification: use deployment-review.
|
|
81
55
|
- Failed environment update: use failed-deployment-triage.
|
|
82
|
-
Load detailed
|
|
56
|
+
Load detailed content only after selecting the skill.
|
|
83
57
|
```
|
|
84
58
|
|
|
85
|
-
When an integration
|
|
86
|
-
runtime metadata needed to choose a skill. Keep untrusted source material out
|
|
87
|
-
of the activation rules and let the selected skill retrieve only what it needs
|
|
88
|
-
with trusted tools.
|
|
59
|
+
When an integration invokes an agent headlessly, pass only the trusted identifiers it expects. Keep untrusted source material out of inputs and let the selected skill retrieve only what it needs with trusted tools.
|
|
89
60
|
|
|
90
61
|
## Keep automation reusable
|
|
91
62
|
|
|
92
|
-
For agentic automation, prefer a small number of reusable workflows that
|
|
93
|
-
concise runtime metadata to the same stable execution profile. Let that profile
|
|
94
|
-
activate the appropriate skill. One profile and one workflow can then support
|
|
95
|
-
issue planning, implementation, scheduled reporting, deployment review, and
|
|
96
|
-
future situations; adding a capability becomes a skill change instead of
|
|
97
|
-
another near-duplicate profile and automation job.
|
|
63
|
+
For agentic automation, prefer a small number of reusable workflows that run [agents with structured inputs](./actions.md). Consolidate compatible agents into as few workflows as practical; separate workflows are justified only by different triggers, permissions, credentials, or isolation boundaries. Adding a capability becomes a skill change instead of another near-duplicate workflow.
|
|
98
64
|
|
|
99
65
|
## Review the trust chain
|
|
100
66
|
|
|
101
|
-
|
|
102
|
-
[Trust and review](./profile-repository.md#trust-and-review) for catalog
|
|
103
|
-
sources, keep secrets out of profiles, skills, references, and prompts, and run
|
|
104
|
-
`outfitter profile lint --strict` in CI to catch broken skill IDs and
|
|
105
|
-
references before they reach an agent run.
|
|
67
|
+
Resources influence agent behavior and tool use. Follow [Trust and review](./catalogs.md#trust-and-review) for catalog sources, pin refs (full SHAs for CI), keep secrets out of agents, skills, references, and prompts, and run `outfitter validate --strict` in CI to catch broken slugs and references before they reach an agent run.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Catalogs
|
|
2
|
+
|
|
3
|
+
A catalog is a git repository that publishes a `.agents` payload — agents, skills, tasks, knowledge, commands — so a person, team, or organization can share it. You can bootstrap a machine or project from one, or add one as an ongoing source that Outfitter keeps synchronized.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
outfitter setup https://github.com/ncrmro/.agents
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
The repository names are discovery and distribution conventions; the payload is always the same protocol-shaped tree (pinned protocol revision [`502a9d5`](https://github.com/aj47/dotagentsprotocol-website/blob/502a9d5f886d0aad8d3da83c03354bdfa4b389e7/src/components/Structure.astro)):
|
|
10
|
+
|
|
11
|
+
| Convention | Purpose |
|
|
12
|
+
| --------------------------------- | -------------------------------------------------------------------------------- |
|
|
13
|
+
| `owner/.agents` or `owner/.agent` | A shareable personal or team catalog. |
|
|
14
|
+
| `owner/.outfitter` | An organization/control repository distributing org-wide resources and settings. |
|
|
15
|
+
|
|
16
|
+
## Standalone `.agents` repositories (preferred)
|
|
17
|
+
|
|
18
|
+
The primary catalog pattern is a standalone repository whose **root is the payload** — the flat dotagents layout:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
ncrmro/.agents/ # repository root
|
|
22
|
+
agents.md
|
|
23
|
+
system-prompt.md
|
|
24
|
+
agents/
|
|
25
|
+
engineer/
|
|
26
|
+
agent.md
|
|
27
|
+
skills/ # skills private to engineer
|
|
28
|
+
release-debug/SKILL.md
|
|
29
|
+
founder/agent.md
|
|
30
|
+
skills/
|
|
31
|
+
wiki/SKILL.md
|
|
32
|
+
research/SKILL.md
|
|
33
|
+
tasks/
|
|
34
|
+
weekly-kpis/task.md
|
|
35
|
+
knowledge/
|
|
36
|
+
settings.yml # Outfitter settings (optional; see settings.md)
|
|
37
|
+
settings.local.yml # gitignored machine-local overrides
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This is the same layout as `~/.agents/` — a standalone catalog is simply a global layer under version control. That makes it the natural home for personal dotagents development: clone it as `~/.agents` (or point your settings at the checkout), iterate locally, and open pull requests to move improvements upstream into shared catalogs. See [Local development](./local-development.md) for the full workflow.
|
|
41
|
+
|
|
42
|
+
## Colocated `.agents/` directories (fallback)
|
|
43
|
+
|
|
44
|
+
When agent configuration should travel with a codebase, colocate the payload as a `.agents/` subdirectory beside the code:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
payments-service/
|
|
48
|
+
.agents/
|
|
49
|
+
agents/
|
|
50
|
+
skills/
|
|
51
|
+
settings.yml
|
|
52
|
+
src/
|
|
53
|
+
docs/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The colocated tree doubles as the protocol's workspace overlay: its resources merge by ID over the global and remote layers for anyone running in that project. Prefer the standalone pattern for anything you intend to share across projects; prefer colocation only for resources that are meaningless outside the one repository.
|
|
57
|
+
|
|
58
|
+
## Consuming a catalog
|
|
59
|
+
|
|
60
|
+
Add the repository to `sources` in your [settings](./settings.md):
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
# ~/.agents/settings.yml
|
|
64
|
+
sources:
|
|
65
|
+
- github: my-org/.agent # owner/repo shorthand
|
|
66
|
+
ref: 2f9c1ab0d3e44b6f9d2c8a17e5b40c91d6f3a8e2 # pin a commit, tag, or branch
|
|
67
|
+
- github: my-org/payments-service
|
|
68
|
+
ref: v1.2.0
|
|
69
|
+
path: .agents # colocated payload inside the repo
|
|
70
|
+
- uri: git+https://git.example.com/team/agents.git # any git URI
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Each source entry is one of:
|
|
74
|
+
|
|
75
|
+
- `path:` — a local directory (no `ref`; read live from disk).
|
|
76
|
+
- `github:` — an `owner/repo` GitHub shorthand.
|
|
77
|
+
- `uri:` — any git-cloneable URI, for non-GitHub hosts.
|
|
78
|
+
|
|
79
|
+
Remote entries additionally accept:
|
|
80
|
+
|
|
81
|
+
- `ref:` — a tag, branch, or commit to pin. With a `ref`, `outfitter sync` fetches exactly that ref. Without one, sync fast-forwards the default branch.
|
|
82
|
+
- `path:` — the payload directory inside the repository, for colocated layouts.
|
|
83
|
+
|
|
84
|
+
Resources from all sources resolve by slug behind local layers, following [layer precedence](./concepts.md#layer-precedence). Agent-local skills keep their owning-agent namespace through cache and source merging. Outfitter reports shadowed IDs so consumers can see which source supplies a selected resource.
|
|
85
|
+
|
|
86
|
+
## Organization control repositories
|
|
87
|
+
|
|
88
|
+
An `owner/.outfitter` repository distributes organization-wide resources plus shared settings that Outfitter layers below each user's local settings:
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
# ~/.agents/settings.yml
|
|
92
|
+
remote_settings:
|
|
93
|
+
- github: my-org/.outfitter
|
|
94
|
+
path: .agents/settings.yml # file path inside the repo
|
|
95
|
+
ref: 9c47d1e2b8a05f36c4d7e90a12b3f8c5d6e71a04
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Remote settings are cached locally and merged at lower precedence than your project and user settings, so anything you set locally wins. This is how an organization distributes shared sources, agents, and defaults without controlling each user's machine. See the [organization catalog use case](./usecases/organization-profile-catalog.md).
|
|
99
|
+
|
|
100
|
+
## Syncing and updating
|
|
101
|
+
|
|
102
|
+
`outfitter sync` synchronizes every remote source into the local cache:
|
|
103
|
+
|
|
104
|
+
1. Remote settings repositories are cloned or updated first, then reloaded.
|
|
105
|
+
2. Remote sources (including any added by remote settings) are cloned or updated.
|
|
106
|
+
3. Each synced source is validated; sync reports `updated`, `unchanged`, `skipped`, or `failed` per source.
|
|
107
|
+
|
|
108
|
+
Pinned (`ref:`) sources stay on their pinned ref until you change it; unpinned sources fast-forward on every sync.
|
|
109
|
+
|
|
110
|
+
## Private repositories
|
|
111
|
+
|
|
112
|
+
Private GitHub catalogs are an enterprise feature. When sync detects a private GitHub repository, it asks for confirmation before use and records the decision in your user settings. Review the Outfitter Enterprise license or your enterprise agreement before enabling private catalogs. Non-GitHub `uri:` sources use whatever git credentials your environment already has; credentials embedded in URIs are redacted from sync output.
|
|
113
|
+
|
|
114
|
+
## Trust and review
|
|
115
|
+
|
|
116
|
+
Adding a catalog source means trusting its authors with your agent runtime. A catalog's resources can shape prompts and policy (agents, `agents.md`, `system-prompt.md`), add MCP servers (`mcp.json`), and ship skills whose scripts execute on your machine.
|
|
117
|
+
|
|
118
|
+
Before adding a source, review it:
|
|
119
|
+
|
|
120
|
+
1. Read the agent definitions, `agents.md`, and `system-prompt.md` you will compose.
|
|
121
|
+
2. Read every skill you will select, including its scripts and catalog-owned `file` references (see the [trust boundary](./skills.md#trust-boundary)).
|
|
122
|
+
3. Review `mcp.json` — MCP servers are code with whatever access you grant them.
|
|
123
|
+
4. Check `remote_settings` targets: a settings file can add further sources you did not review.
|
|
124
|
+
5. Confirm the repository's ownership and that its maintainers are who you expect.
|
|
125
|
+
|
|
126
|
+
**Pin a `ref:`** — ideally a full commit SHA — for any catalog you do not maintain yourself, and always for catalogs consumed in CI (see [Running tasks in GitHub Actions](./actions.md)). A pinned ref makes updates an explicit, reviewable action — bump the ref after reviewing the diff — instead of silently pulling whatever the catalog publishes next.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# CLI reference
|
|
2
2
|
|
|
3
|
+
> **Status: RFC [#165](https://github.com/ai-outfitter/outfitter/issues/165) target.** This reference describes the dotagents end-state command surface. The currently released CLI still implements the legacy profile commands; implementation PRs replace them incrementally.
|
|
4
|
+
|
|
3
5
|
Global options:
|
|
4
6
|
|
|
5
7
|
| Option | Description |
|
|
@@ -7,68 +9,64 @@ Global options:
|
|
|
7
9
|
| `-V, --version` | Print the Outfitter version. |
|
|
8
10
|
| `-h, --help` | Show help for a command. |
|
|
9
11
|
|
|
10
|
-
## `outfitter run [args...]`
|
|
12
|
+
## `outfitter run [agent] [args...]`
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
Resolve, compose, and launch an agent. `run` is the default command, so plain `outfitter` and `outfitter run` are equivalent.
|
|
13
15
|
|
|
14
|
-
| Option
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
| `--
|
|
18
|
-
| `--strict`
|
|
16
|
+
| Argument / Option | Description |
|
|
17
|
+
| --------------------- | -------------------------------------------------------------------------------- |
|
|
18
|
+
| `[agent]` | Agent slug to run. Defaults to the settings `default_agent`. |
|
|
19
|
+
| `--harness <harness>` | Harness to launch in: `pi` or `claude`. Defaults to `default_harness`. |
|
|
20
|
+
| `--strict` | Fail instead of warning when the adapter cannot project part of the composition. |
|
|
19
21
|
|
|
20
|
-
Any other arguments and unrecognized options are passed through to the launched
|
|
22
|
+
Any other arguments and unrecognized options are passed through to the launched harness:
|
|
21
23
|
|
|
22
24
|
```bash
|
|
23
|
-
outfitter run
|
|
24
|
-
outfitter
|
|
25
|
+
outfitter run engineer --harness claude
|
|
26
|
+
outfitter run reviewer -- --print "summarize this repo"
|
|
25
27
|
```
|
|
26
28
|
|
|
27
|
-
On a first interactive launch with no `~/.outfitter/settings.yml`, `outfitter` starts Pi-native onboarding instead of a normal run.
|
|
28
|
-
|
|
29
29
|
## `outfitter setup [source]`
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
Open the bundled Pi walkthrough using the original setup wording and sequence. Choose **Use the
|
|
32
|
+
default Outfitter profile catalog**, **Create your own profile**, or **Provide a different catalog
|
|
33
|
+
to import**; complete that branch; choose a home/project settings target; then choose the default
|
|
34
|
+
CLI agent. Pi/Outfitter is preselected. Passing `[source]` retains the original direct-source path
|
|
35
|
+
and starts at target selection. Pi hosts the deterministic setup UI without a model provider and
|
|
36
|
+
does not port or symlink harness configuration. The default picker always comes from
|
|
37
|
+
`ai-outfitter/default-profiles` at the immutable Release Please version tag pinned by the installed
|
|
38
|
+
Outfitter version; setup fetches or reuses that release through the normal source cache and writes
|
|
39
|
+
the same GitHub/ref pair to settings. It never reads a sibling checkout or a packaged catalog
|
|
40
|
+
fallback.
|
|
36
41
|
|
|
37
42
|
## `outfitter sync`
|
|
38
43
|
|
|
39
|
-
Synchronize
|
|
40
|
-
|
|
41
|
-
## `outfitter profile`
|
|
42
|
-
|
|
43
|
-
List and manage Outfitter profiles.
|
|
44
|
+
Synchronize remote sources and remote settings into the local cache. Reports a per-source status of `updated`, `unchanged`, `skipped`, or `failed`, and validates synced sources.
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
## `outfitter list [kind]`
|
|
46
47
|
|
|
47
|
-
List
|
|
48
|
+
List resolvable resources across all layers, with the winning source for each slug and any shadowed IDs.
|
|
48
49
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
50
|
+
| Argument | Description |
|
|
51
|
+
| -------- | ------------------------------------------------------------- |
|
|
52
|
+
| `[kind]` | Optional filter: `agents`, `skills`, `knowledge`, `commands`. |
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
## `outfitter validate`
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
| Argument / option | Description |
|
|
58
|
-
| ----------------- | --------------------------------------------------------- |
|
|
59
|
-
| `<name>` | Filesystem-safe profile name. |
|
|
60
|
-
| `--scope <scope>` | Destination scope: `user`, `project`, or `project-local`. |
|
|
61
|
-
| `--path <path>` | Destination profile source directory. |
|
|
62
|
-
|
|
63
|
-
### `outfitter profile lint`
|
|
64
|
-
|
|
65
|
-
Validate profiles, inheritance, and typed prompt includes.
|
|
56
|
+
Validate the effective resource set: protocol layout, frontmatter, unresolved slugs in agent loadouts, broken or escaping skill references, and settings schema.
|
|
66
57
|
|
|
67
58
|
| Option | Description |
|
|
68
59
|
| ---------- | ---------------------------------------- |
|
|
69
60
|
| `--strict` | Exit non-zero when warnings are present. |
|
|
70
61
|
| `--json` | Print diagnostics as JSON. |
|
|
71
62
|
|
|
72
|
-
## `outfitter
|
|
63
|
+
## `outfitter dump`
|
|
64
|
+
|
|
65
|
+
Write the composed resource tree as a self-contained `.agents/` directory for review, vendoring, or air-gapped use. Identical sources, refs, and selections produce byte-identical output; dumps never contain credentials, sessions, caches, or other mutable runtime state.
|
|
66
|
+
|
|
67
|
+
| Option | Description |
|
|
68
|
+
| -------------- | ---------------------------------------------------- |
|
|
69
|
+
| `--agent <id>` | Restrict the dump to one agent's transitive closure. |
|
|
70
|
+
| `--out <dir>` | Destination directory (default `./.agents`). |
|
|
73
71
|
|
|
74
|
-
|
|
72
|
+
> **Tasks and `outfitter task bake`** — baking a task and its inputs into an immutable execution artifact — are the subject of a separate upcoming RFC and are not part of this command surface yet. See [Tasks](./tasks.md).
|
|
@@ -4,51 +4,94 @@ How an `outfitter` launch goes from configuration files to a running agent:
|
|
|
4
4
|
|
|
5
5
|
```mermaid
|
|
6
6
|
flowchart LR
|
|
7
|
-
A[Settings] --> B[
|
|
8
|
-
B --> C[
|
|
9
|
-
C --> D[
|
|
10
|
-
D --> E[
|
|
11
|
-
E --> F[
|
|
7
|
+
A[Settings] --> B[Sources]
|
|
8
|
+
B --> C[.agents layers]
|
|
9
|
+
C --> D[Resolver]
|
|
10
|
+
D --> E[Composed agent]
|
|
11
|
+
E --> F[Adapter]
|
|
12
|
+
F --> G[Harness]
|
|
12
13
|
```
|
|
13
14
|
|
|
14
|
-
Settings tell Outfitter where
|
|
15
|
+
Settings tell Outfitter where `.agents` resources come from; sources supply protocol resource trees; the resolver merges the layered trees into one effective resource set; the selected agent composes its loadout — skills, subagents, model, and so on — from that set by slug; and an adapter projects the composed agent into harness-specific files, flags, and environment variables before launching the harness (pi or Claude Code).
|
|
16
|
+
|
|
17
|
+
## The `.agents` protocol
|
|
18
|
+
|
|
19
|
+
Outfitter stores and exchanges all agent configuration in the vendor-neutral [Dotagents `.agents` protocol](https://dotagentsprotocol.com/) (pinned at revision [`502a9d5`](https://github.com/aj47/dotagentsprotocol-website/blob/502a9d5f886d0aad8d3da83c03354bdfa4b389e7/src/components/Structure.astro)). Outfitter does not define its own authored configuration format: a `.agents/` tree is useful without Outfitter, and any existing `.agents/` tree is usable by Outfitter without conversion.
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
.agents/
|
|
23
|
+
agents.md # shared operating context
|
|
24
|
+
system-prompt.md # base system prompt
|
|
25
|
+
mcp.json # MCP server configuration
|
|
26
|
+
models.json # model configuration
|
|
27
|
+
agents/<id>/agent.md # agent definitions (+ optional config.json)
|
|
28
|
+
agents/<id>/skills/ # skills private to one agent (also knowledge/, commands/)
|
|
29
|
+
agents/<id>/mcp.json # per-agent MCP config (discovered; projection deferred, #183)
|
|
30
|
+
agents/<id>/hooks/ # reserved namespace (not yet resolved)
|
|
31
|
+
skills/<id>/... # Agent Skills packages
|
|
32
|
+
tasks/<id>/task.md # named execution contracts
|
|
33
|
+
knowledge/... # reference documents
|
|
34
|
+
commands/... # slash commands
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Resources
|
|
38
|
+
|
|
39
|
+
The protocol resources Outfitter resolves and composes:
|
|
40
|
+
|
|
41
|
+
- **Agent** — a definition at `agents/<id>/agent.md` (plus optional `config.json`) describing an identity _and_ its loadout: the skills, subagents, MCP servers, extensions, plugins, model, thinking level, and tools it runs with. The agent is what you run. See [Agents](./agents.md).
|
|
42
|
+
- **Skill** — a capability package under catalog-wide `skills/<id>/` or agent-local `agents/<agent-id>/skills/<id>/`, with instructions, references, scripts, and assets. See [Skills](./skills.md).
|
|
43
|
+
- **Knowledge** and **commands** — reference documents and slash commands shared across runs.
|
|
44
|
+
|
|
45
|
+
> Tasks — `tasks/<id>/task.md` execution contracts, structured inputs, and baking — are the subject of a separate upcoming RFC and are not part of this end state. See [Tasks](./tasks.md).
|
|
15
46
|
|
|
16
|
-
##
|
|
47
|
+
## Profiles, personas, and subagents
|
|
17
48
|
|
|
18
|
-
|
|
49
|
+
Three related terms, none of which is a settings key or a separate file format:
|
|
19
50
|
|
|
20
|
-
|
|
51
|
+
- A **[profile](./profiles.md)** is just an agent and its loadout. "The engineer profile" is the `engineer` agent with everything it composes. There is no `profile.yml` and no `profiles:` map — the loadout lives on the agent.
|
|
52
|
+
- A **[persona](./personas.md)** is a _convention_, not a resource: a base review agent (a base prompt plus how-to-review instructions) that reads an interchangeable persona description document — for example `docs/user-personas/coyote-road-runner-chaser.md` — as input. Swapping the input document swaps the persona.
|
|
53
|
+
- A **[subagent](./subagents.md)** is an agent projected into the harness's native delegation mechanism, selected in another agent's `subagents` loadout. A leader agent delegates to local coding-harness subagents or to issue- and action-backed subagents.
|
|
21
54
|
|
|
22
|
-
|
|
55
|
+
The same agent definition can be run directly or selected as a subagent elsewhere; its loadout decides what it composes.
|
|
23
56
|
|
|
24
|
-
##
|
|
57
|
+
## Layers
|
|
25
58
|
|
|
26
|
-
|
|
59
|
+
Resources resolve across layers, following the protocol's overlay semantics:
|
|
60
|
+
|
|
61
|
+
1. `<project>/.agents/` — the workspace layer, committed with a project.
|
|
62
|
+
2. `~/.agents/` — the global layer for one developer.
|
|
63
|
+
3. Remote sources — pinned `.agents` payloads from [catalog repositories](./catalogs.md), in configured order.
|
|
64
|
+
|
|
65
|
+
Resources merge **by ID**: a workspace `skills/wiki/` overrides a global or remote `skills/wiki/`. Agent-local skills merge by owner and ID, so `agents/actions/skills/debug/` is distinct from `agents/reviewer/skills/debug/`; the selected agent's local winner takes precedence over catalog-wide `skills/debug/`. JSON files such as `mcp.json` and `models.json` follow the protocol's JSON merge behavior. Standalone `.agents` repositories — where the repository root _is_ the payload — are the primary way to develop and share layers; see [Catalogs](./catalogs.md) and [Local development](./local-development.md).
|
|
27
66
|
|
|
28
67
|
## Settings scopes
|
|
29
68
|
|
|
30
|
-
Outfitter
|
|
69
|
+
Outfitter's own settings live inside the `.agents` tree as `settings.yml`, with a flat, gitignored `settings.local.yml` beside it for personal machine-local overrides:
|
|
70
|
+
|
|
71
|
+
- `~/.agents/settings.yml` — user defaults, plus optional `~/.agents/settings.local.yml`.
|
|
72
|
+
- `<project>/.agents/settings.yml` — committed project settings.
|
|
73
|
+
- `<project>/.agents/settings.local.yml` — personal, uncommitted overrides for that project. This flat file replaces the old nested project-local directory scope.
|
|
31
74
|
|
|
32
|
-
|
|
75
|
+
Settings declare the default agent and harness, resource sources, and launch behavior — not resource selection, which lives on the agent. Removing the settings files leaves a pure protocol tree. See [Settings](./settings.md).
|
|
33
76
|
|
|
34
|
-
|
|
77
|
+
## One resolver
|
|
78
|
+
|
|
79
|
+
Listing, validation, running, and dumping all share one resolver. What `outfitter list` shows is what `outfitter run` launches and what `outfitter dump` writes. See [Dump](./dump-and-bake.md).
|
|
35
80
|
|
|
36
81
|
## Adapters
|
|
37
82
|
|
|
38
|
-
An adapter
|
|
83
|
+
An adapter projects composed resources into one agent CLI's native configuration — files, command-line flags, and environment variables. Pi is the primary and most complete adapter; a Claude Code adapter is supported with gaps. When an adapter cannot honor part of a composition it warns to stderr, or fails when `--strict` is set. See the [adapter support matrix](./support-matrix.md).
|
|
39
84
|
|
|
40
85
|
## State persistence
|
|
41
86
|
|
|
42
|
-
Agents write state during a run — auth, native settings, plugins, sessions. Each adapter declares the state paths it understands and how writes are handled (`symlink`, `discard`, `warn`, `error`, or `prompt`), so useful state survives future runs
|
|
87
|
+
Agents write state during a run — auth, native settings, plugins, sessions. Each adapter declares the state paths it understands and how writes are handled (`symlink`, `discard`, `warn`, `error`, or `prompt`), so useful state survives future runs. See [State persistence](./state.md).
|
|
43
88
|
|
|
44
89
|
## Layer precedence
|
|
45
90
|
|
|
46
|
-
When several layers define the same
|
|
91
|
+
When several layers define the same resource ID or setting, higher layers win:
|
|
47
92
|
|
|
48
|
-
1. Project-local (
|
|
49
|
-
2. Project (
|
|
50
|
-
3. User (`~/.
|
|
93
|
+
1. Project-local settings (`<project>/.agents/settings.local.yml`)
|
|
94
|
+
2. Project (`<project>/.agents/`)
|
|
95
|
+
3. User (`~/.agents/`, with `settings.local.yml` above `settings.yml`)
|
|
51
96
|
4. Cached remote sources (in configured source order)
|
|
52
97
|
5. Built-in defaults
|
|
53
|
-
|
|
54
|
-
For profiles, explicitly inherited profiles slot between cached remote sources and built-in defaults, in declared order.
|