@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.
- package/README.md +12 -2
- package/code/pi-extension/src/outfitter-extension.js +720 -0
- package/dist/agents/AdapterStatePaths.js +3 -1
- package/dist/agents/AdapterStatePaths.js.map +1 -1
- package/dist/agents/AgentAdapter.d.ts +3 -0
- package/dist/agents/AgentLaunch.js +5 -0
- package/dist/agents/AgentLaunch.js.map +1 -1
- package/dist/agents/OutfitterDocs.d.ts +2 -0
- package/dist/agents/OutfitterDocs.js +38 -0
- package/dist/agents/OutfitterDocs.js.map +1 -0
- package/dist/agents/claude/ClaudeAdapter.js +3 -2
- package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
- package/dist/agents/pi/PiAdapter.js +24 -19
- package/dist/agents/pi/PiAdapter.js.map +1 -1
- package/dist/agents/pi/PiExtensionCache.d.ts +8 -0
- package/dist/agents/pi/PiExtensionCache.js +95 -5
- package/dist/agents/pi/PiExtensionCache.js.map +1 -1
- package/dist/agents/pi/PiSkillSources.d.ts +8 -0
- package/dist/agents/pi/PiSkillSources.js +69 -0
- package/dist/agents/pi/PiSkillSources.js.map +1 -0
- package/dist/cli/OutfitterCli.js +7 -2
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/PiLoginLaunch.js +28 -737
- package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
- package/dist/cli/commands/RunCommand.d.ts +6 -17
- package/dist/cli/commands/RunCommand.js +115 -186
- package/dist/cli/commands/RunCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +4 -63
- package/dist/cli/commands/SetupCommand.js +13 -673
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/SyncCommand.d.ts +1 -1
- package/dist/cli/commands/SyncCommand.js +37 -12
- package/dist/cli/commands/SyncCommand.js.map +1 -1
- package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +7 -0
- package/dist/cli/commands/run/RunFirstRunOnboarding.js +52 -0
- package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +1 -0
- package/dist/cli/commands/run/RunLaunchSummary.d.ts +2 -0
- package/dist/cli/commands/run/RunLaunchSummary.js +35 -0
- package/dist/cli/commands/run/RunLaunchSummary.js.map +1 -0
- package/dist/cli/commands/run/RunProfileResolution.d.ts +37 -0
- package/dist/cli/commands/run/RunProfileResolution.js +124 -0
- package/dist/cli/commands/run/RunProfileResolution.js.map +1 -0
- package/dist/cli/commands/run/RunStateWritePrompt.d.ts +2 -0
- package/dist/cli/commands/run/RunStateWritePrompt.js +29 -0
- package/dist/cli/commands/run/RunStateWritePrompt.js.map +1 -0
- package/dist/cli/commands/setup/SetupPrompts.d.ts +14 -0
- package/dist/cli/commands/setup/SetupPrompts.js +296 -0
- package/dist/cli/commands/setup/SetupPrompts.js.map +1 -0
- package/dist/cli/commands/setup/SetupSourceImport.d.ts +5 -0
- package/dist/cli/commands/setup/SetupSourceImport.js +177 -0
- package/dist/cli/commands/setup/SetupSourceImport.js.map +1 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +4 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.js +65 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.js.map +1 -0
- package/dist/cli/commands/setup/SetupStarterSource.d.ts +21 -0
- package/dist/cli/commands/setup/SetupStarterSource.js +133 -0
- package/dist/cli/commands/setup/SetupStarterSource.js.map +1 -0
- package/dist/cli/commands/setup/SetupTypes.d.ts +91 -0
- package/dist/cli/commands/setup/SetupTypes.js +26 -0
- package/dist/cli/commands/setup/SetupTypes.js.map +1 -0
- package/dist/compositeProfile/CompositeProfileCleanup.d.ts +9 -0
- package/dist/compositeProfile/CompositeProfileCleanup.js +87 -0
- package/dist/compositeProfile/CompositeProfileCleanup.js.map +1 -0
- package/dist/compositeProfile/StatePersistence.d.ts +16 -1
- package/dist/compositeProfile/StatePersistence.js +27 -5
- package/dist/compositeProfile/StatePersistence.js.map +1 -1
- package/dist/fs/SafeSymlink.d.ts +13 -0
- package/dist/fs/SafeSymlink.js +50 -0
- package/dist/fs/SafeSymlink.js.map +1 -0
- package/dist/settings/SettingsLoader.d.ts +1 -0
- package/dist/settings/SettingsLoader.js +10 -1
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/doc/architecture/state_writeback_strategy.md +350 -0
- package/doc/documentation/README.md +21 -0
- package/doc/documentation/cli.md +74 -0
- package/doc/documentation/concepts.md +54 -0
- package/doc/documentation/first-time-cli-agent-users.md +137 -0
- package/doc/documentation/getting-started.md +49 -0
- package/doc/documentation/iterating-on-profiles.md +109 -0
- package/doc/documentation/profile-repository.md +111 -0
- package/doc/documentation/profiles.md +183 -0
- package/doc/documentation/state.md +224 -0
- package/doc/documentation/support-matrix.md +46 -0
- package/doc/documentation/switching-to-outfitter.md +130 -0
- package/doc/documentation/usecases/engineering.md +114 -0
- package/doc/documentation/usecases/organization-profile-catalog.md +140 -0
- package/doc/documentation/usecases/persona-reviews.md +173 -0
- package/doc/philosophy.md +25 -0
- 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.
|
|
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.
|
|
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",
|