@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# State persistence
|
|
2
2
|
|
|
3
|
-
Outfitter launches agent CLIs from a temporary
|
|
3
|
+
Outfitter launches agent CLIs from a temporary baked composition. During a run, Pi, Claude Code, or another adapter may write state such as settings, sessions, plugin installs, caches, auth metadata, or MCP configuration.
|
|
4
4
|
|
|
5
|
-
Outfitter does not silently copy every file back into your
|
|
5
|
+
Outfitter does not silently copy every file back into your `.agents` tree. Instead, each adapter declares the state paths it understands, chooses safe defaults, and lets settings override how writes to those paths are handled.
|
|
6
6
|
|
|
7
7
|
## Default behavior
|
|
8
8
|
|
|
@@ -18,40 +18,33 @@ state_persistence:
|
|
|
18
18
|
mcp.json: symlink # MCP/server configuration stays durable.
|
|
19
19
|
plugins/: symlink # Installed plugins can be reused.
|
|
20
20
|
cache/: symlink # Useful package/cache state can be reused.
|
|
21
|
-
sessions/: symlink # Session/project state is durable unless
|
|
22
|
-
unknown: warn # Unexpected writes are visible and not silently
|
|
21
|
+
sessions/: symlink # Session/project state is durable unless overridden.
|
|
22
|
+
unknown: warn # Unexpected writes are visible and not silently persisted.
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Some generated
|
|
25
|
+
Some generated runtime files, such as transformed settings or keybindings, may be treated as one-run generated files even though the underlying state path normally defaults to `symlink`. This keeps Outfitter-managed launch reconciliation from becoming accidental user state.
|
|
26
26
|
|
|
27
27
|
## How state works
|
|
28
28
|
|
|
29
29
|
Outfitter separates runtime files into three groups:
|
|
30
30
|
|
|
31
|
-
1. **Generated
|
|
31
|
+
1. **Generated composition files** — files Outfitter bakes from the resolved `.agents` layers and adapter rules. These are temporary and reproducible.
|
|
32
32
|
2. **Declared state paths** — files or directories the selected agent CLI is expected to read or write, such as `settings.json`, `mcp.json`, `plugins/`, or `sessions/`.
|
|
33
33
|
3. **Unknown writes** — anything the agent writes outside declared state paths. Outfitter never silently persists these because it does not know their owner or merge rules.
|
|
34
34
|
|
|
35
|
-
Only declared state paths can be persisted automatically.
|
|
35
|
+
Only declared state paths can be persisted automatically. Baked artifacts and [dumps](./dump-and-bake.md) never contain persisted state — state is runtime, not configuration.
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Configuring persistence
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Set `state_persistence` in [settings](./settings.md) — globally, per project, or in `settings.local.yml` for one machine:
|
|
40
40
|
|
|
41
41
|
```yaml
|
|
42
|
-
|
|
43
|
-
label: Strict CI
|
|
44
|
-
|
|
45
|
-
# Omitted paths use the selected adapter's default strategy.
|
|
46
|
-
# This profile only overrides paths where CI should be stricter than normal.
|
|
42
|
+
# .agents/settings.yml — a stricter policy for a CI project
|
|
47
43
|
state_persistence:
|
|
48
44
|
settings.json: error # Fail if the agent changes settings during the run.
|
|
49
45
|
mcp.json: error # Fail if tool/server config changes during the run.
|
|
50
46
|
plugins/: error # Fail if plugin state changes during the run.
|
|
51
47
|
unknown: error # Fail if the agent writes an undeclared file.
|
|
52
|
-
|
|
53
|
-
controls:
|
|
54
|
-
thinking: high
|
|
55
48
|
```
|
|
56
49
|
|
|
57
50
|
## Strategies
|
|
@@ -60,24 +53,22 @@ controls:
|
|
|
60
53
|
|
|
61
54
|
```yaml
|
|
62
55
|
state_persistence:
|
|
63
|
-
auth.json: symlink # Persist writes through a durable
|
|
56
|
+
auth.json: symlink # Persist writes through a durable native CLI path.
|
|
64
57
|
cache/: discard # Allow writes, then throw them away when the run ends.
|
|
65
58
|
plugins/: warn # Allow writes, discard them, and report them after the run.
|
|
66
59
|
settings.json: error # Allow the run, then fail if this path changed.
|
|
67
|
-
mcp.json: prompt # Ask after the run: persist, discard, or always persist
|
|
60
|
+
mcp.json: prompt # Ask after the run: persist, discard, or always persist.
|
|
68
61
|
```
|
|
69
62
|
|
|
70
|
-
Use `symlink` for state you want to keep, such as login state, durable settings, MCP config, or plugin installs. Use `discard`, `warn`, or `error` for state that should not become
|
|
63
|
+
Use `symlink` for state you want to keep, such as login state, durable settings, MCP config, or plugin installs. Use `discard`, `warn`, or `error` for state that should not become durable. Use `prompt` when you want to decide interactively after each run.
|
|
71
64
|
|
|
72
65
|
## Prompt strategy
|
|
73
66
|
|
|
74
67
|
When a `prompt` path changed during a run and both stdin and stdout are interactive terminals, Outfitter asks what to do with the change after the agent exits:
|
|
75
68
|
|
|
76
|
-
- **persist** — copy the change to the path's durable
|
|
77
|
-
- **discard** — throw the change away with the rest of the
|
|
78
|
-
- **always** — persist the change and record a `state_persistence: <path>: symlink` override in the
|
|
79
|
-
|
|
80
|
-
The "always" choice is written into the selected profile's `profile.yml` because profiles are the single source of truth for `state_persistence` policy. If the selected profile comes from a remote or cached source, Outfitter never mutates the cache: the change is persisted once and a warning explains that the choice could not be recorded.
|
|
69
|
+
- **persist** — copy the change to the path's durable destination for this run only.
|
|
70
|
+
- **discard** — throw the change away with the rest of the baked composition.
|
|
71
|
+
- **always** — persist the change and record a `state_persistence: <path>: symlink` override in the editable settings scope, so future runs persist writes to that path automatically. Outfitter never mutates a synced catalog cache: if the active configuration comes from a remote source, the change is persisted once and a warning explains that the choice could not be recorded.
|
|
81
72
|
|
|
82
73
|
In non-interactive sessions (CI, scripts, piped stdio), `prompt` falls back to `warn` and Outfitter prints an explicit `prompt skipped: non-interactive` notice.
|
|
83
74
|
|
|
@@ -85,7 +76,7 @@ Undeclared writes governed by `unknown: prompt` cannot be persisted because they
|
|
|
85
76
|
|
|
86
77
|
## Temporary directory cleanup
|
|
87
78
|
|
|
88
|
-
|
|
79
|
+
Baked composition directories are created under the system temporary directory and removed automatically when the Outfitter process exits or receives a handled signal. Removal deletes symlink entries without following them, so the durable auth/settings state the links point at is never touched. Pass `--debug` to keep the directory for inspection; Outfitter prints its path.
|
|
89
80
|
|
|
90
81
|
Each startup also best-effort sweeps `outfitter-*` directories older than seven days from the temporary root. The sweep never follows symlinks, so a stale directory's links are removed while their targets survive.
|
|
91
82
|
|
|
@@ -104,7 +95,7 @@ state_persistence:
|
|
|
104
95
|
### Keep shared catalogs clean
|
|
105
96
|
|
|
106
97
|
```yaml
|
|
107
|
-
# Story: A team publishes a shared
|
|
98
|
+
# Story: A team publishes a shared .agents catalog.
|
|
108
99
|
# Goal: MCP config can come from the catalog, but one user's random runtime files
|
|
109
100
|
# should not become shared team state.
|
|
110
101
|
state_persistence:
|
|
@@ -115,12 +106,12 @@ state_persistence:
|
|
|
115
106
|
### Make CI reproducible
|
|
116
107
|
|
|
117
108
|
```yaml
|
|
118
|
-
# Story: A platform engineer runs
|
|
119
|
-
# Goal: CI should prove the
|
|
109
|
+
# Story: A platform engineer runs a baked Outfitter task in CI.
|
|
110
|
+
# Goal: CI should prove the composition is complete, not depend on hidden runtime mutation.
|
|
120
111
|
state_persistence:
|
|
121
|
-
settings.json: error # Settings drift means the
|
|
112
|
+
settings.json: error # Settings drift means the composition is incomplete.
|
|
122
113
|
mcp.json: error # Tool config drift should fail the job.
|
|
123
|
-
plugins/: error # Plugin installs/updates should be explicit in the
|
|
114
|
+
plugins/: error # Plugin installs/updates should be explicit in the tree.
|
|
124
115
|
unknown: error # Any undeclared write is a reproducibility problem.
|
|
125
116
|
```
|
|
126
117
|
|
|
@@ -186,39 +177,10 @@ state_persistence:
|
|
|
186
177
|
unknown: warn # Undeclared writes; allowed: discard, warn, error, prompt.
|
|
187
178
|
```
|
|
188
179
|
|
|
189
|
-
Claude Code project/session state is represented through `projects/`. If a profile sets `controls.session_directory` or `controls.claude.session_directory`, Outfitter uses that location for Claude project state.
|
|
190
|
-
|
|
191
180
|
## Where durable state lives
|
|
192
181
|
|
|
193
|
-
When a path uses `symlink`,
|
|
194
|
-
|
|
195
|
-
```text
|
|
196
|
-
profiles/
|
|
197
|
-
default/
|
|
198
|
-
profile.yml
|
|
199
|
-
cli_specific/
|
|
200
|
-
pi/
|
|
201
|
-
settings.json
|
|
202
|
-
mcp.json
|
|
203
|
-
claude/
|
|
204
|
-
settings.json
|
|
205
|
-
skills/
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
If no profile-managed source exists, Outfitter falls back to the native CLI state location for most paths, such as `~/.pi/agent/...` for Pi or `~/.claude/...` for Claude Code.
|
|
182
|
+
When a path uses `symlink`, the durable destination is the native CLI state location — `~/.pi/agent/...` for Pi, `~/.claude/...` for Claude Code. The native location is not another configuration layer: it does not participate in resolution or merge precedence; it only provides a durable destination for state paths.
|
|
209
183
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
## When to change defaults
|
|
213
|
-
|
|
214
|
-
Most users can keep the adapter defaults. Override `state_persistence` when you need a profile with a specific state policy:
|
|
215
|
-
|
|
216
|
-
```yaml
|
|
217
|
-
state_persistence:
|
|
218
|
-
cache/: discard # Throwaway demos, sessions, or caches.
|
|
219
|
-
plugins/: warn # Local experimentation is okay but should be visible.
|
|
220
|
-
settings.json: error # CI, reproducibility checks, or locked-down project profiles.
|
|
221
|
-
auth.json: symlink # Intentional durable setup.
|
|
222
|
-
```
|
|
184
|
+
For a [ported Claude Code setup](./porting-claude.md), `~/.claude` configuration entries are themselves symlinks into `~/.agents/`, so persisted configuration state lands in the protocol tree while session and auth state stays native.
|
|
223
185
|
|
|
224
186
|
For the complete adapter contract and rationale, see [State writeback strategy](../architecture/state_writeback_strategy.md).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Subagents
|
|
2
|
+
|
|
3
|
+
A subagent is a protocol [agent](./agents.md) projected into the harness's native delegation mechanism, so a run can hand focused work to a separate context. You declare subagents in an agent's loadout — the `subagents` field of its `agent.md` frontmatter or `config.json` — not in any settings map.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
---
|
|
7
|
+
name: engineer
|
|
8
|
+
subagents: [code-reviewer, explorer]
|
|
9
|
+
---
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Each slug resolves to an `agents/<id>/` definition across layers like any other resource. At launch the adapter projects the selected definitions into the harness's subagent surface:
|
|
13
|
+
|
|
14
|
+
- **Claude Code** — materialized into the harness's agents directory so they are invocable as native subagents.
|
|
15
|
+
- **Pi** — registered through Pi's subagent extension mechanism.
|
|
16
|
+
|
|
17
|
+
See the [adapter support matrix](./support-matrix.md) for current coverage.
|
|
18
|
+
|
|
19
|
+
## Leader agents and delegation targets
|
|
20
|
+
|
|
21
|
+
The reason to give an agent subagents is to make it a **leader**: an agent that coordinates work and delegates the bounded pieces. A leader can delegate two ways, and the two compose:
|
|
22
|
+
|
|
23
|
+
- **To local coding-harness subagents** — agents projected into the running harness (Claude Code's agents directory, Pi's subagent extension). The leader hands off exploration, review, or parallelizable work to a fresh context on the same machine and gets the result back inline.
|
|
24
|
+
- **To issue- and action-backed subagents** — work dispatched asynchronously, backed by a GitHub issue and an [Outfitter action](./actions.md). The leader files the unit of work as an issue; an action runs the delegate agent headlessly and reports back on the issue or PR. This is how a leader parallelizes across machines and across time rather than within one session.
|
|
25
|
+
|
|
26
|
+
A leader's loadout is where both are declared: local delegates as `subagents`, remote work routed through the action it triggers. Keep each delegate bounded — one job, clear inputs, a defined deliverable back to the caller.
|
|
27
|
+
|
|
28
|
+
## When to give an agent subagents
|
|
29
|
+
|
|
30
|
+
- **One focused agent** — a single agent doing the work directly. Prefer this default; delegation adds latency and context loss.
|
|
31
|
+
- **One leader managing subagents** — a coordinating agent that delegates exploration, review, or parallelizable work.
|
|
32
|
+
|
|
33
|
+
## Authoring guidance
|
|
34
|
+
|
|
35
|
+
- Give each subagent a crisp `description` — the leader uses it to decide when to delegate.
|
|
36
|
+
- Keep subagents bounded: one job, clear inputs, a defined deliverable.
|
|
37
|
+
- Don't duplicate skill procedures into subagent definitions; a subagent can select and use [skills](./skills.md) through its own loadout like any agent.
|
|
@@ -1,49 +1,54 @@
|
|
|
1
1
|
# Adapter support matrix
|
|
2
2
|
|
|
3
|
-
What Outfitter can
|
|
3
|
+
What Outfitter can project per agent CLI. Pi is the primary and most complete adapter; Claude Code is supported with gaps.
|
|
4
4
|
|
|
5
5
|
Status values:
|
|
6
6
|
|
|
7
|
-
- **Supported** — Outfitter
|
|
7
|
+
- **Supported** — Outfitter projects this concept for the CLI through at least one native mechanism.
|
|
8
8
|
- **Partial** — some of the concept works today, with documented gaps.
|
|
9
|
-
- **Roadmap** — the CLI appears to support the concept, but Outfitter does not
|
|
10
|
-
|
|
11
|
-
When a
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
9
|
+
- **Roadmap** — the CLI appears to support the concept, but Outfitter does not project it yet.
|
|
10
|
+
|
|
11
|
+
When a composition requests something an adapter cannot project, Outfitter warns to stderr; `--strict` makes those warnings fatal.
|
|
12
|
+
|
|
13
|
+
Tasks and bake are not in this matrix — they are the subject of a [separate upcoming RFC](./tasks.md).
|
|
14
|
+
|
|
15
|
+
| What Outfitter projects | Pi | Claude Code |
|
|
16
|
+
| ------------------------------------------------------------------------ | --------- | ----------- |
|
|
17
|
+
| Agent config directory | Supported | Supported |
|
|
18
|
+
| Session directory | Supported | Supported |
|
|
19
|
+
| Agent identity (`system-prompt.md`, `agents.md`, `agents/<id>/agent.md`) | Supported | Supported |
|
|
20
|
+
| Subagents (`agents/<id>` as harness delegates) | Supported | Supported |
|
|
21
|
+
| Skills (`skills/<id>`) | Supported | Partial |
|
|
22
|
+
| Commands (`commands/`) | Supported | Partial |
|
|
23
|
+
| Knowledge (`knowledge/`) | Supported | Partial |
|
|
24
|
+
| Model selection (`models.json`) | Supported | Partial |
|
|
25
|
+
| MCP servers (`mcp.json`) | Supported | Supported |
|
|
26
|
+
| Extensions (agent `extensions:` loadout) | Supported | Roadmap |
|
|
27
|
+
| Plugins (agent `plugins:` loadout) | Supported | Roadmap |
|
|
28
|
+
| Credentials and environment | Supported | Supported |
|
|
29
|
+
| DeepWork job selection | Supported | Roadmap |
|
|
30
|
+
| Hooks | Partial | Partial |
|
|
31
|
+
| Tool availability | Roadmap | Roadmap |
|
|
32
|
+
| Theme / UI presentation | Roadmap | Roadmap |
|
|
33
|
+
| Working directory | Roadmap | Roadmap |
|
|
34
|
+
| Pass-through arguments | Supported | Supported |
|
|
35
|
+
| Bootstrap hook | Supported | Roadmap |
|
|
31
36
|
|
|
32
37
|
## Claude Code notes
|
|
33
38
|
|
|
34
|
-
- **Config and session state** — Outfitter points `CLAUDE_CONFIG_DIR` at the
|
|
35
|
-
- **
|
|
36
|
-
- **
|
|
37
|
-
- **Model selection (Partial)** —
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
39
|
+
- **Config and session state** — Outfitter points `CLAUDE_CONFIG_DIR` at the baked composition, declares Claude state paths (`settings.json`, `agents/`, `skills/`, `commands/`, `plugins/`, `projects/`) for [state persistence](./state.md), and can [symlink a ported `~/.claude`](./porting-claude.md) so native use keeps working.
|
|
40
|
+
- **Subagents** — selected `agents/<id>` definitions are materialized into Claude's native agents directory.
|
|
41
|
+
- **Skills (Partial)** — selected skills are materialized into the config directory's skills surface; remaining gaps are tracked per release. The bundled Outfitter skill ships through the plugin channel.
|
|
42
|
+
- **Model selection (Partial)** — model maps to `--model` and thinking level to `--effort`; provider selection is not projected for Claude and warns if requested.
|
|
43
|
+
- **Hooks (Partial)** — hook configuration is projected into the generated `settings.json`; there is no portable protocol hooks resource yet. See [Hooks](./hooks.md).
|
|
44
|
+
- **DeepWork jobs** — job selection is Pi-only today and warns on Claude.
|
|
45
|
+
- **Bundled Outfitter skill** — every launch also publishes Outfitter's own self-documentation skill as a bundled plugin, so the agent can explain Outfitter and this launch's configuration.
|
|
41
46
|
|
|
42
47
|
## Pi notes
|
|
43
48
|
|
|
44
|
-
- Pi
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
- Every launch also passes Outfitter's own self-documentation skill
|
|
49
|
+
- Pi projects the full resource set: agent identity, subagents (via the subagent extension), skills (`--skill`), commands, model configuration, MCP, extensions (`--extension`) and plugins as first-class loadout elements, environment, pass-through args, session directory, and DeepWork job selection.
|
|
50
|
+
- Selected skills resolve across layers following [layer precedence](./concepts.md#layer-precedence); `references`, `scripts`, and `assets` frontmatter materialize into a generated skill passed via `--skill`. `outfitter validate` checks selections and references before launch.
|
|
51
|
+
- **Hooks (Partial)** — bootstrap behavior uses an explicit Pi extension via `--extension`; recurring per-event hooks are extension territory. See [Hooks](./hooks.md).
|
|
52
|
+
- Every launch also passes Outfitter's own self-documentation skill through `--skill`.
|
|
48
53
|
|
|
49
54
|
For the architecture-level definitions behind each row, see [Controllable elements](../architecture/controllable-elements.md).
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
# Switching to Outfitter
|
|
2
2
|
|
|
3
|
-
This guide is for people who already use Pi, Claude Code, Codex, Cursor, or another agent CLI and want Outfitter to make that setup repeatable. The goal is not to copy every local experiment into
|
|
3
|
+
This guide is for people who already use Pi, Claude Code, Codex, Cursor, or another agent CLI and want Outfitter to make that setup repeatable. The goal is not to copy every local experiment into the tree. The goal is to capture the small set of habits that reliably jumpstart the human.
|
|
4
|
+
|
|
5
|
+
## Two adoption paths
|
|
6
|
+
|
|
7
|
+
**You already have a `.agents/` directory.** You're done with the hard part — Outfitter reads the protocol directly. Set `default_agent` in `.agents/settings.yml` to one of your [agent](./agents.md) slugs — the agent's own loadout selects its skills, subagents, and knowledge — and run `outfitter`. Nothing is converted or re-authored.
|
|
8
|
+
|
|
9
|
+
**Your setup lives in `~/.claude`.** Let `outfitter setup` port it into `~/.agents/` and symlink it back so Claude Code keeps working natively — see [Porting a Claude Code setup](./porting-claude.md). Your ported skills, agents, and commands are then referenceable by slug like any protocol resource.
|
|
10
|
+
|
|
11
|
+
Starting from neither? `outfitter setup` bootstraps from the default catalog — see [Getting started](./getting-started.md).
|
|
4
12
|
|
|
5
13
|
## Migration shape
|
|
6
14
|
|
|
7
15
|
1. Keep the current agent CLI installed and working.
|
|
8
16
|
2. Identify the behavior you rely on every week: prompts, planning rules, permission posture, skills, subagents, and state you want preserved.
|
|
9
|
-
3.
|
|
10
|
-
4. Add project
|
|
11
|
-
5. Run `outfitter`, compare the session to your old workflow, and tighten the
|
|
17
|
+
3. Put stable personal defaults in your global layer — ideally a versioned standalone `.agents` repo ([Local development](./local-development.md)).
|
|
18
|
+
4. Add a project `.agents/` overlay only where a repository needs different instructions or tools.
|
|
19
|
+
5. Run `outfitter`, compare the session to your old workflow, and tighten the tree before adding more.
|
|
12
20
|
|
|
13
21
|
## What to migrate first
|
|
14
22
|
|
|
@@ -19,105 +27,91 @@ Migrate durable operating rules before migrating files:
|
|
|
19
27
|
- how it should use subagents;
|
|
20
28
|
- what review or test evidence you expect;
|
|
21
29
|
- what writing voice or product judgment it should preserve;
|
|
22
|
-
- which skills
|
|
30
|
+
- which skills are essential.
|
|
23
31
|
|
|
24
|
-
Leave transient chat tricks behind. If a rule is not worth committing to
|
|
32
|
+
Leave transient chat tricks behind. If a rule is not worth committing to the tree, it probably belongs in the next prompt, not the baseline.
|
|
25
33
|
|
|
26
|
-
##
|
|
34
|
+
## Global layer template
|
|
27
35
|
|
|
28
|
-
Use this as a
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
# ~/.outfitter/settings.yml
|
|
32
|
-
# Human jumpstart: this default profile should make `outfitter` feel like
|
|
33
|
-
# your current best agent setup, but with fewer manual launch steps.
|
|
34
|
-
default_profile: migrated-agent-workbench
|
|
35
|
-
default_agent: pi
|
|
36
|
-
profile_sources:
|
|
37
|
-
- path: ./profiles
|
|
36
|
+
Use this as a migration worksheet: one agent holding your durable posture and the skills you reach for.
|
|
38
37
|
|
|
38
|
+
```
|
|
39
|
+
<!-- ~/.agents/agents/workbench/agent.md -->
|
|
39
40
|
---
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
# Skills can come from Pi packages, the Outfitter default profile catalog, or project profiles.
|
|
64
|
-
# Add only skills you expect to use repeatedly.
|
|
65
|
-
skills: []
|
|
66
|
-
|
|
67
|
-
# Subagents may be provided by the active Pi/Outfitter profile or project config.
|
|
68
|
-
# Document how you want the lead agent to use them even before adding custom definitions.
|
|
41
|
+
name: workbench
|
|
42
|
+
description: Personal agent-CLI habits migrated from my previous setup.
|
|
43
|
+
skills: [] # add only skills you expect to use repeatedly
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Workbench
|
|
47
|
+
|
|
48
|
+
You may inspect files, make focused edits, and run local validation commands.
|
|
49
|
+
Ask before deleting files, changing dependencies, pushing, publishing, touching
|
|
50
|
+
credentials, mutating production data, or making irreversible external changes.
|
|
51
|
+
|
|
52
|
+
Plan before broad rewrites. Use acceptance criteria that can be checked from
|
|
53
|
+
repo state. Prefer small commits and explain validation evidence before
|
|
54
|
+
calling work done.
|
|
55
|
+
|
|
56
|
+
Treat rough notes as source material, not final requirements: convert
|
|
57
|
+
ambiguous requests into a short plan, preserve interesting claims, remove filler.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
# ~/.agents/settings.yml
|
|
62
|
+
default_agent: workbench
|
|
63
|
+
default_harness: pi
|
|
69
64
|
```
|
|
70
65
|
|
|
71
66
|
## Project overlay template
|
|
72
67
|
|
|
73
|
-
Use a project overlay when a repository has instructions that should not leak into every session.
|
|
68
|
+
Use a project overlay when a repository has instructions that should not leak into every session. The workspace layer merges over your global layer by ID; `agents.md` carries project context.
|
|
74
69
|
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
# Project jumpstart: select the repo-specific profile when `outfitter` starts here.
|
|
78
|
-
default_profile: project-workbench
|
|
79
|
-
profile_sources:
|
|
80
|
-
# Import the home profile this project inherits from.
|
|
81
|
-
# Adjust the relative path to match the repo's depth under your home directory.
|
|
82
|
-
- path: ../../.outfitter/profiles
|
|
83
|
-
only:
|
|
84
|
-
- migrated-agent-workbench
|
|
85
|
-
- path: ./profiles
|
|
70
|
+
```
|
|
71
|
+
<!-- <repo>/.agents/agents.md -->
|
|
86
72
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
73
|
+
Use this repository's docs, tests, and issue tracker as the source of truth.
|
|
74
|
+
Record durable decisions in project files, not only in chat.
|
|
75
|
+
Run the narrowest relevant validation before broad checks.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
A project overlay can add a skill to the workbench agent without redefining it. Put the additive loadout change in the agent's `config.json`: JSON files shallow-merge by key across layers, so the workspace layer adds `deployment-review` while the global `agent.md` identity stays intact. (A partial `agent.md` would _not_ merge field-by-field — it resolves whole-resource by ID and would replace the global body, so keep loadout tweaks in `config.json`.)
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
<!-- <repo>/.agents/agents/workbench/config.json -->
|
|
82
|
+
{
|
|
83
|
+
"skills": ["deployment-review"]
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
# <repo>/.agents/settings.yml
|
|
89
|
+
default_agent: workbench
|
|
98
90
|
```
|
|
99
91
|
|
|
100
92
|
## Mapping old habits to Outfitter
|
|
101
93
|
|
|
102
|
-
| Existing habit | Outfitter
|
|
94
|
+
| Existing habit | Outfitter shape |
|
|
103
95
|
| ------------------------------------ | -------------------------------------------------------------------------------------------------------- |
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
96
|
+
| "Always plan before edits." | Use the plan extension keybinding (`Shift+Tab` in the default Outfitter Pi setup) before implementation. |
|
|
97
|
+
| "Use YOLO except dangerous actions." | State allowed local actions and approval gates in your agent. |
|
|
98
|
+
| "Run code review after changes." | Select a review skill, then invoke it with a slash command such as `/skill:review`. |
|
|
99
|
+
| "Spawn a second agent for research." | Select an explorer [subagent](./subagents.md) and describe when the lead agent should delegate. |
|
|
100
|
+
| "Use browser or GitHub helpers." | Add the MCP server to `mcp.json` in the layer that needs it. |
|
|
101
|
+
| "Keep project context durable." | Commit it to the project's `.agents/agents.md`; keep personal defaults in your global layer. |
|
|
102
|
+
| "Repeat the same CI/automation job." | Make it a [task](./tasks.md) with structured inputs. |
|
|
111
103
|
|
|
112
104
|
## Check the active capabilities
|
|
113
105
|
|
|
114
|
-
Because tools differ by CLI and
|
|
106
|
+
Because tools differ by CLI and composition, start migrated sessions with:
|
|
115
107
|
|
|
116
108
|
```text
|
|
117
|
-
List the active tools, skills,
|
|
109
|
+
List the active tools, skills, and subagents. Note which are vanilla harness
|
|
110
|
+
features, which come from the default catalog, and which are project-local.
|
|
111
|
+
Also read agents.md if this tree has one.
|
|
118
112
|
```
|
|
119
113
|
|
|
120
|
-
If a
|
|
114
|
+
If a behavior is a project rule rather than a personal preference, put it in the project's `.agents/agents.md` so every agent session can inherit it.
|
|
121
115
|
|
|
122
116
|
## Migration checkpoint
|
|
123
117
|
|
|
@@ -127,4 +121,4 @@ Run:
|
|
|
127
121
|
outfitter
|
|
128
122
|
```
|
|
129
123
|
|
|
130
|
-
If the first session does not feel like a better version of your old setup, edit the
|
|
124
|
+
If the first session does not feel like a better version of your old setup, edit the agent before adding more files. The first win is reliable launch plus useful starting context; broader catalogs can come after that baseline holds.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
> **Status: future RFC.** Tasks are not part of the dotagents end state described here. This page is a placeholder for a concept that will be specified separately.
|
|
4
|
+
|
|
5
|
+
A task is intended to be a named, portable execution contract — the stable objective of a repeatable unit of work, the resources it composes, its structured input and output contract, and what "done" means — together with a **bake** step that freezes that contract and its inputs into an immutable, deterministic artifact for headless execution (CI, scheduled jobs, delegated work).
|
|
6
|
+
|
|
7
|
+
That surface — `tasks/<id>/task.md`, structured `inputs`, `outfitter task bake`, and task-backed [actions](./actions.md) — raises its own design questions (input trust boundaries, determinism guarantees, DeepWork job selection, adapter coverage) and will be worked out in a dedicated RFC rather than folded into this one.
|
|
8
|
+
|
|
9
|
+
Until then:
|
|
10
|
+
|
|
11
|
+
- Run work interactively by selecting an [agent](./agents.md): `outfitter run <agent-id>`.
|
|
12
|
+
- Inspect exactly what an agent composes with [`outfitter dump`](./dump-and-bake.md).
|
|
13
|
+
- For headless GitHub Actions runs today, see [Actions](./actions.md), which runs an agent non-interactively with structured inputs.
|