@ai-outfitter/outfitter 0.7.2 → 0.9.0

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.
Files changed (89) hide show
  1. package/README.md +12 -2
  2. package/code/pi-extension/src/outfitter-extension.js +720 -0
  3. package/dist/agents/AdapterStatePaths.js +3 -1
  4. package/dist/agents/AdapterStatePaths.js.map +1 -1
  5. package/dist/agents/AgentAdapter.d.ts +3 -0
  6. package/dist/agents/AgentLaunch.js +5 -0
  7. package/dist/agents/AgentLaunch.js.map +1 -1
  8. package/dist/agents/OutfitterDocs.d.ts +2 -0
  9. package/dist/agents/OutfitterDocs.js +38 -0
  10. package/dist/agents/OutfitterDocs.js.map +1 -0
  11. package/dist/agents/claude/ClaudeAdapter.js +3 -2
  12. package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
  13. package/dist/agents/pi/PiAdapter.js +24 -19
  14. package/dist/agents/pi/PiAdapter.js.map +1 -1
  15. package/dist/agents/pi/PiExtensionCache.d.ts +8 -0
  16. package/dist/agents/pi/PiExtensionCache.js +95 -5
  17. package/dist/agents/pi/PiExtensionCache.js.map +1 -1
  18. package/dist/agents/pi/PiSkillSources.d.ts +8 -0
  19. package/dist/agents/pi/PiSkillSources.js +69 -0
  20. package/dist/agents/pi/PiSkillSources.js.map +1 -0
  21. package/dist/cli/OutfitterCli.js +7 -2
  22. package/dist/cli/OutfitterCli.js.map +1 -1
  23. package/dist/cli/commands/PiLoginLaunch.js +28 -737
  24. package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
  25. package/dist/cli/commands/RunCommand.d.ts +6 -17
  26. package/dist/cli/commands/RunCommand.js +115 -186
  27. package/dist/cli/commands/RunCommand.js.map +1 -1
  28. package/dist/cli/commands/SetupCommand.d.ts +4 -63
  29. package/dist/cli/commands/SetupCommand.js +13 -673
  30. package/dist/cli/commands/SetupCommand.js.map +1 -1
  31. package/dist/cli/commands/SyncCommand.d.ts +1 -1
  32. package/dist/cli/commands/SyncCommand.js +37 -12
  33. package/dist/cli/commands/SyncCommand.js.map +1 -1
  34. package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +7 -0
  35. package/dist/cli/commands/run/RunFirstRunOnboarding.js +52 -0
  36. package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +1 -0
  37. package/dist/cli/commands/run/RunLaunchSummary.d.ts +2 -0
  38. package/dist/cli/commands/run/RunLaunchSummary.js +35 -0
  39. package/dist/cli/commands/run/RunLaunchSummary.js.map +1 -0
  40. package/dist/cli/commands/run/RunProfileResolution.d.ts +37 -0
  41. package/dist/cli/commands/run/RunProfileResolution.js +124 -0
  42. package/dist/cli/commands/run/RunProfileResolution.js.map +1 -0
  43. package/dist/cli/commands/run/RunStateWritePrompt.d.ts +2 -0
  44. package/dist/cli/commands/run/RunStateWritePrompt.js +29 -0
  45. package/dist/cli/commands/run/RunStateWritePrompt.js.map +1 -0
  46. package/dist/cli/commands/setup/SetupPrompts.d.ts +14 -0
  47. package/dist/cli/commands/setup/SetupPrompts.js +296 -0
  48. package/dist/cli/commands/setup/SetupPrompts.js.map +1 -0
  49. package/dist/cli/commands/setup/SetupSourceImport.d.ts +5 -0
  50. package/dist/cli/commands/setup/SetupSourceImport.js +177 -0
  51. package/dist/cli/commands/setup/SetupSourceImport.js.map +1 -0
  52. package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +4 -0
  53. package/dist/cli/commands/setup/SetupSourceLaunch.js +65 -0
  54. package/dist/cli/commands/setup/SetupSourceLaunch.js.map +1 -0
  55. package/dist/cli/commands/setup/SetupStarterSource.d.ts +21 -0
  56. package/dist/cli/commands/setup/SetupStarterSource.js +133 -0
  57. package/dist/cli/commands/setup/SetupStarterSource.js.map +1 -0
  58. package/dist/cli/commands/setup/SetupTypes.d.ts +91 -0
  59. package/dist/cli/commands/setup/SetupTypes.js +26 -0
  60. package/dist/cli/commands/setup/SetupTypes.js.map +1 -0
  61. package/dist/compositeProfile/CompositeProfileCleanup.d.ts +9 -0
  62. package/dist/compositeProfile/CompositeProfileCleanup.js +87 -0
  63. package/dist/compositeProfile/CompositeProfileCleanup.js.map +1 -0
  64. package/dist/compositeProfile/StatePersistence.d.ts +16 -1
  65. package/dist/compositeProfile/StatePersistence.js +27 -5
  66. package/dist/compositeProfile/StatePersistence.js.map +1 -1
  67. package/dist/fs/SafeSymlink.d.ts +13 -0
  68. package/dist/fs/SafeSymlink.js +50 -0
  69. package/dist/fs/SafeSymlink.js.map +1 -0
  70. package/dist/settings/SettingsLoader.d.ts +1 -0
  71. package/dist/settings/SettingsLoader.js +10 -1
  72. package/dist/settings/SettingsLoader.js.map +1 -1
  73. package/doc/architecture/state_writeback_strategy.md +350 -0
  74. package/doc/documentation/README.md +21 -0
  75. package/doc/documentation/cli.md +74 -0
  76. package/doc/documentation/concepts.md +54 -0
  77. package/doc/documentation/first-time-cli-agent-users.md +137 -0
  78. package/doc/documentation/getting-started.md +49 -0
  79. package/doc/documentation/iterating-on-profiles.md +109 -0
  80. package/doc/documentation/profile-repository.md +111 -0
  81. package/doc/documentation/profiles.md +183 -0
  82. package/doc/documentation/state.md +224 -0
  83. package/doc/documentation/support-matrix.md +46 -0
  84. package/doc/documentation/switching-to-outfitter.md +130 -0
  85. package/doc/documentation/usecases/engineering.md +114 -0
  86. package/doc/documentation/usecases/organization-profile-catalog.md +140 -0
  87. package/doc/documentation/usecases/persona-reviews.md +173 -0
  88. package/doc/philosophy.md +25 -0
  89. package/package.json +3 -2
@@ -0,0 +1,173 @@
1
+ # Persona Reviews
2
+
3
+ A persona review catalog is a shared setup source that publishes profiles representing the kinds of people who might use a product, service, internal tool, or documentation site. Teams can launch these personas to get structured feedback on docs, onboarding, website copy, setup flows, and UX before asking real prospects or customers to spend time on a review.
4
+
5
+ The example below uses Outfitter itself as the product being reviewed, but the pattern is meant for your own product. Replace the persona files, concerns, and review prompts with the customer types you care about.
6
+
7
+ ```text
8
+ customer-persona-reviews/
9
+ settings.yml
10
+ personas/
11
+ base-customer-persona.yml
12
+ founder-operator.yml
13
+ staff-engineer.yml
14
+ engineering-manager.yml
15
+ platform-lead.yml
16
+ agency-consultant.yml
17
+ ```
18
+
19
+ ## Catalog settings
20
+
21
+ ```yaml
22
+ # customer-persona-reviews/settings.yml
23
+ profile_sources:
24
+ - path: ./personas
25
+ only:
26
+ - founder-operator
27
+ - staff-engineer
28
+ - engineering-manager
29
+ - platform-lead
30
+ - agency-consultant
31
+ ```
32
+
33
+ ## Shared base profile
34
+
35
+ ```yaml
36
+ # personas/base-customer-persona.yml
37
+ id: base-customer-persona
38
+ label: Customer Persona Base
39
+ template: true
40
+ description: Shared rules for reviewing an artifact from a customer persona's point of view.
41
+ controls:
42
+ append_system_prompt: |
43
+ Review as the assigned customer persona. Read or experience the provided artifact
44
+ from that persona's point of view: docs, screenshots, website, prototype, product
45
+ flow, or onboarding path. Distinguish evidence from assumptions, cite the exact
46
+ page or UI moment that shaped your reaction, and do not invent real customer research.
47
+ ```
48
+
49
+ ## Persona profiles
50
+
51
+ Persona review catalogs SHOULD make each potential customer's job, anxieties, buying triggers, and expected feedback shape explicit. These examples use Outfitter as the reviewed product so the pattern is concrete; replace the product references with your own product, audience, and UX.
52
+
53
+ ```yaml
54
+ # personas/founder-operator.yml
55
+ id: founder-operator
56
+ label: Founder Operator
57
+ description: Reviews whether a product helps a hands-on founder get leverage quickly.
58
+ inherits:
59
+ - base-customer-persona
60
+ controls:
61
+ provider: anthropic
62
+ model: anthropic/claude-sonnet-4
63
+ thinking: high
64
+ append_system_prompt: |
65
+ You are a technical founder who writes product specs, edits docs, ships small
66
+ features, and manages a thin team. For this example, review Outfitter as the
67
+ product. Say whether the first hour feels obviously valuable. Flag jargon, setup
68
+ friction, unclear pricing or trust boundaries, and anything that delays the first
69
+ useful outcome.
70
+ ```
71
+
72
+ ```yaml
73
+ # personas/staff-engineer.yml
74
+ id: staff-engineer
75
+ label: Staff Engineer
76
+ description: Reviews whether a product is credible for complex technical work.
77
+ inherits:
78
+ - base-customer-persona
79
+ controls:
80
+ provider: anthropic
81
+ model: anthropic/claude-sonnet-4
82
+ thinking: high
83
+ append_system_prompt: |
84
+ You are a staff engineer responsible for large codebases, architecture decisions,
85
+ reviews, and cross-team technical quality. For this example, review Outfitter as
86
+ the product. Say whether the docs explain how the product improves real engineering
87
+ work. Flag missing examples, weak verification paths, and claims that need evidence.
88
+ ```
89
+
90
+ ```yaml
91
+ # personas/engineering-manager.yml
92
+ id: engineering-manager
93
+ label: Engineering Manager
94
+ description: Reviews whether a product helps a team standardize work safely.
95
+ inherits:
96
+ - base-customer-persona
97
+ controls:
98
+ provider: openai
99
+ model: openai/gpt-4.1
100
+ thinking: medium
101
+ append_system_prompt: |
102
+ You manage engineers with different tool habits. For this example, review Outfitter
103
+ as the product. Say whether team defaults, onboarding, review expectations, and
104
+ governance are understandable. Flag anything that makes rollout, support, training,
105
+ or risk ownership unclear.
106
+ ```
107
+
108
+ ```yaml
109
+ # personas/platform-lead.yml
110
+ id: platform-lead
111
+ label: Platform Lead
112
+ description: Reviews whether a product can fit into internal developer platform workflows.
113
+ inherits:
114
+ - base-customer-persona
115
+ controls:
116
+ provider: anthropic
117
+ model: anthropic/claude-opus-4
118
+ thinking: xhigh
119
+ append_system_prompt: |
120
+ You own internal developer tooling, CI, secrets, and fleet-wide standards. For this
121
+ example, review Outfitter as the product. Focus on trust boundaries, credential
122
+ handling, catalog governance, private repo assumptions, reproducibility, and
123
+ operational failure modes. Prioritize risks that would block enterprise rollout.
124
+ ```
125
+
126
+ ```yaml
127
+ # personas/agency-consultant.yml
128
+ id: agency-consultant
129
+ label: Agency Consultant
130
+ description: Reviews whether a product helps switch between multiple client contexts cleanly.
131
+ inherits:
132
+ - base-customer-persona
133
+ controls:
134
+ provider: openai
135
+ model: openai/gpt-4.1-mini
136
+ thinking: low
137
+ append_system_prompt: |
138
+ You work across multiple client contexts and need repeatable setup without leaking
139
+ one client's context into another. For this example, review Outfitter as the product.
140
+ Say whether the docs and UX make isolation, project settings, and switching contexts
141
+ obvious.
142
+ ```
143
+
144
+ ## Review workflows
145
+
146
+ A persona review can inspect static docs or interact with a running UX. The prompt should say which artifact is under review and what kind of feedback is useful. For your own product, swap in your own docs, prototype URL, screenshots, local app, or onboarding flow.
147
+
148
+ ```text
149
+ Read README.md, docs/getting-started.md, and docs/pricing.md for <your product>.
150
+ As the staff-engineer persona, explain where the product feels credible, where it feels
151
+ underspecified, and what one example would most improve your confidence.
152
+ ```
153
+
154
+ ```text
155
+ Browse <your product>'s local documentation site and try the first-run setup flow.
156
+ As the founder-operator persona, report the first confusing moment, the first moment
157
+ that felt valuable, and whether you would keep using the product after setup.
158
+ ```
159
+
160
+ ## Review output pattern
161
+
162
+ Persona profiles SHOULD define a repeatable response shape so feedback from different potential customers is comparable.
163
+
164
+ ```yaml
165
+ # personas/founder-operator.yml excerpt
166
+ controls:
167
+ append_system_prompt: |
168
+ Return feedback as: persona, artifact reviewed, first impression, top blocker,
169
+ strongest value signal, confusing language, suggested change, and confidence.
170
+ If you need more context, ask for the smallest missing artifact.
171
+ ```
172
+
173
+ This gives a team a reusable customer-persona review catalog: each agent reads docs or experiences a UX from a distinct buyer/user viewpoint, then returns structured feedback without pretending to replace real customer discovery.
@@ -0,0 +1,25 @@
1
+ # Outfitter Philosophy
2
+
3
+ Make, share, and switch the profiles your coding agents use — manually or programmatically.
4
+
5
+ ## Expeditious agents
6
+
7
+ An agent is defined by its agency: its ability to make good decisions on the way to completing a task. Outfitter exists to make agents _expeditious_ — not just effective, but fast.
8
+
9
+ The two are linked. An agent loaded with every tool, prompt, and extension you have ever collected spends its context window carrying baggage instead of thinking. A tight profile — only the context, tools, and instructions relevant to the job at hand — preserves context headroom. That headroom translates directly into better decisions, shorter paths to completion, and faster sessions. High signal in, clear signal out.
10
+
11
+ Tight profiles also make delegation practical. When a role is small and well defined, it can be handed to a subagent and run in parallel with others. Focused profiles are what turn one overloaded agent into a coordinated set of fast ones.
12
+
13
+ ## Composition over accumulation
14
+
15
+ The common failure mode is a single, ever-growing agent setup: one configuration that accretes every tool and instruction anyone has ever needed, serving no task particularly well. Outfitter takes the opposite approach. Profiles are small, purpose-built, and composable — you stack a personal baseline, a team convention, and a task-specific role, and switch between combinations as the work changes. Each profile stays sharp because it never has to be everything at once.
16
+
17
+ ## Individual, team, enterprise
18
+
19
+ The same mechanism scales up a stair-step:
20
+
21
+ - **Individuals** make profiles for their own recurring modes of work and switch between them per task or per project.
22
+ - **Teams** share profiles through catalog repositories, so a new teammate starts with proven, organization-approved roles instead of assembling a setup from scratch.
23
+ - **Enterprises** publish and pin curated catalogs, keeping agent configuration reviewable, versioned, and consistent across the organization.
24
+
25
+ At every level the goal is the same: the right profile, at the right moment, with nothing extra along for the ride.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-outfitter/outfitter",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "description": "Profile-oriented wrapper for launching pi, Claude Code, and future agent CLIs with reproducible configuration.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -21,6 +21,7 @@
21
21
  "src/schemas",
22
22
  "doc",
23
23
  "code/enterprise",
24
+ "code/pi-extension",
24
25
  "README.md",
25
26
  "LICENSE.md"
26
27
  ],
@@ -38,7 +39,7 @@
38
39
  "check-ci": "prettier --check . && npm run lint && npm run coverage"
39
40
  },
40
41
  "dependencies": {
41
- "@earendil-works/pi-coding-agent": "^0.78.1",
42
+ "@earendil-works/pi-coding-agent": "^0.80.3",
42
43
  "ajv": "^8.20.0",
43
44
  "chalk": "^5.6.2",
44
45
  "commander": "^14.0.3",