gspec 1.1.2 → 1.4.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 (58) hide show
  1. package/README.md +62 -13
  2. package/bin/gspec.js +11 -3
  3. package/commands/gspec.epic.md +25 -15
  4. package/commands/gspec.feature.md +24 -14
  5. package/commands/gspec.implement.md +51 -118
  6. package/commands/gspec.practices.md +2 -3
  7. package/commands/gspec.research.md +276 -0
  8. package/commands/gspec.stack.md +29 -6
  9. package/commands/gspec.style.md +13 -46
  10. package/dist/antigravity/gspec-architect/SKILL.md +1 -1
  11. package/dist/antigravity/gspec-dor/SKILL.md +2 -2
  12. package/dist/antigravity/gspec-epic/SKILL.md +26 -16
  13. package/dist/antigravity/gspec-feature/SKILL.md +25 -15
  14. package/dist/antigravity/gspec-implement/SKILL.md +54 -121
  15. package/dist/antigravity/gspec-migrate/SKILL.md +5 -5
  16. package/dist/antigravity/gspec-practices/SKILL.md +3 -4
  17. package/dist/antigravity/gspec-profile/SKILL.md +1 -1
  18. package/dist/antigravity/gspec-record/SKILL.md +2 -2
  19. package/dist/antigravity/gspec-research/SKILL.md +280 -0
  20. package/dist/antigravity/gspec-stack/SKILL.md +30 -7
  21. package/dist/antigravity/gspec-style/SKILL.md +14 -47
  22. package/dist/claude/gspec-architect/SKILL.md +1 -1
  23. package/dist/claude/gspec-dor/SKILL.md +2 -2
  24. package/dist/claude/gspec-epic/SKILL.md +26 -16
  25. package/dist/claude/gspec-feature/SKILL.md +25 -15
  26. package/dist/claude/gspec-implement/SKILL.md +54 -121
  27. package/dist/claude/gspec-migrate/SKILL.md +5 -5
  28. package/dist/claude/gspec-practices/SKILL.md +3 -4
  29. package/dist/claude/gspec-profile/SKILL.md +1 -1
  30. package/dist/claude/gspec-record/SKILL.md +2 -2
  31. package/dist/claude/gspec-research/SKILL.md +281 -0
  32. package/dist/claude/gspec-stack/SKILL.md +30 -7
  33. package/dist/claude/gspec-style/SKILL.md +14 -47
  34. package/dist/codex/gspec-architect/SKILL.md +337 -0
  35. package/dist/codex/gspec-dor/SKILL.md +224 -0
  36. package/dist/codex/gspec-epic/SKILL.md +232 -0
  37. package/dist/codex/gspec-feature/SKILL.md +174 -0
  38. package/dist/codex/gspec-implement/SKILL.md +325 -0
  39. package/dist/codex/gspec-migrate/SKILL.md +119 -0
  40. package/dist/codex/gspec-practices/SKILL.md +135 -0
  41. package/dist/codex/gspec-profile/SKILL.md +221 -0
  42. package/dist/codex/gspec-record/SKILL.md +172 -0
  43. package/dist/codex/gspec-research/SKILL.md +280 -0
  44. package/dist/codex/gspec-stack/SKILL.md +300 -0
  45. package/dist/codex/gspec-style/SKILL.md +229 -0
  46. package/dist/cursor/gspec-architect.mdc +1 -1
  47. package/dist/cursor/gspec-dor.mdc +2 -2
  48. package/dist/cursor/gspec-epic.mdc +26 -16
  49. package/dist/cursor/gspec-feature.mdc +25 -15
  50. package/dist/cursor/gspec-implement.mdc +54 -121
  51. package/dist/cursor/gspec-migrate.mdc +5 -5
  52. package/dist/cursor/gspec-practices.mdc +3 -4
  53. package/dist/cursor/gspec-profile.mdc +1 -1
  54. package/dist/cursor/gspec-record.mdc +2 -2
  55. package/dist/cursor/gspec-research.mdc +279 -0
  56. package/dist/cursor/gspec-stack.mdc +30 -7
  57. package/dist/cursor/gspec-style.mdc +14 -47
  58. package/package.json +2 -1
package/README.md CHANGED
@@ -25,14 +25,51 @@ These documents become the shared context for all subsequent AI interactions. Wh
25
25
 
26
26
  The only commands you *need* are the four fundamentals and `implement`. Everything else exists to help when your project calls for it.
27
27
 
28
- The fundamentals give your AI tool enough context to build well — it knows what the product is, how it should look, what technologies to use, and what engineering standards to follow. From there, `implement` can take a plain-language description and start building. The remaining commands — `feature`, `epic`, `architect`, `dor`, and `record` — add structure and rigor when the scope or complexity warrants it.
29
-
30
- ```
31
- Define → Build
32
- Define → Specify → Build
33
- Define Specify → Architect → Build → Iterate
28
+ The fundamentals give your AI tool enough context to build well — it knows what the product is, how it should look, what technologies to use, and what engineering standards to follow. From there, `implement` can take a plain-language description and start building. The remaining commands — `research`, `feature`, `epic`, `architect`, `dor`, and `record` — add structure and rigor when the scope or complexity warrants it.
29
+
30
+ ```mermaid
31
+ flowchart LR
32
+ Define["1. Define
33
+ profile · style
34
+ stack · practices"]
35
+
36
+ Research["2. Research
37
+ competitive analysis"]
38
+
39
+ Specify["3. Specify
40
+ feature · epic"]
41
+
42
+ Architect["4. Architect
43
+ technical blueprint"]
44
+
45
+ Build["5. Build
46
+ implement"]
47
+
48
+ Iterate["6. Iterate
49
+ dor · record"]
50
+
51
+ Define --> Research
52
+ Define --> Specify
53
+ Define --> Build
54
+ Research --> Specify
55
+ Research --> Build
56
+ Specify --> Architect
57
+ Specify --> Build
58
+ Architect --> Build
59
+ Build --> Iterate
60
+ Iterate --> Build
61
+
62
+ style Define fill:#4a9eff,color:#fff,stroke:none
63
+ style Research fill:#a855f7,color:#fff,stroke:none
64
+ style Specify fill:#f59e0b,color:#fff,stroke:none
65
+ style Architect fill:#f59e0b,color:#fff,stroke:none
66
+ style Build fill:#22c55e,color:#fff,stroke:none
67
+ style Iterate fill:#64748b,color:#fff,stroke:none
34
68
  ```
35
69
 
70
+ > **Blue** = required foundation. **Purple/Yellow** = optional depth. **Green** = implementation. **Gray** = maintenance.
71
+ > Every path starts with Define and passes through Build. The steps in between depend on your project's complexity.
72
+
36
73
  **1. Define the Fundamentals** — Establish the foundation that drives every decision.
37
74
 
38
75
  | Command | Role | What it produces |
@@ -42,7 +79,15 @@ Define → Specify → Architect → Build → Iterate
42
79
  | `gspec.stack` | Software Architect | Technology stack, frameworks, infrastructure, architecture |
43
80
  | `gspec.practices` | Engineering Lead | Development standards, code quality, testing, workflows |
44
81
 
45
- **2. Specify What to Build** *(optional)* — Define features and requirements.
82
+ **2. Research the Market** *(optional)* — Understand the competitive landscape before building.
83
+
84
+ | Command | Role | What it produces |
85
+ |---|---|---|
86
+ | `gspec.research` | Product Strategist | Competitive analysis with feature matrix, gap identification, and strategic recommendations |
87
+
88
+ Use `research` when you want to understand what competitors offer, identify table-stakes features you might be missing, and find differentiation opportunities. It reads competitors from your product profile, produces a persistent `gspec/research.md` file, and can optionally generate feature PRDs from the findings. The `implement` command automatically uses this file when it exists.
89
+
90
+ **3. Specify What to Build** *(optional)* — Define features and requirements.
46
91
 
47
92
  | Command | Role | What it produces |
48
93
  |---|---|---|
@@ -51,7 +96,7 @@ Define → Specify → Architect → Build → Iterate
51
96
 
52
97
  Use `feature` when you want a detailed PRD with prioritized capabilities and acceptance criteria before building. Use `epic` when a body of work is large enough to need decomposition into multiple features with dependency mapping. For smaller tasks or rapid prototyping, you can skip straight to `implement` with a plain-language description.
53
98
 
54
- **3. Architect** *(optional)* — Translate specs into a concrete technical blueprint.
99
+ **4. Architect** *(optional)* — Translate specs into a concrete technical blueprint.
55
100
 
56
101
  | Command | Role | What it produces |
57
102
  |---|---|---|
@@ -59,13 +104,13 @@ Use `feature` when you want a detailed PRD with prioritized capabilities and acc
59
104
 
60
105
  Use `architect` when your feature involves significant technical complexity — new data models, service boundaries, auth flows, or integration points that benefit from upfront design. For straightforward features, `implement` can make sound architectural decisions on its own using your `stack` and `practices` specs.
61
106
 
62
- **4. Build** — Implement with full context.
107
+ **5. Build** — Implement with full context.
63
108
 
64
109
  | Command | Role | What it does |
65
110
  |---|---|---|
66
- | `gspec.implement` | Senior Engineer | Reads all specs, identifies gaps, researches competitors, plans and builds |
111
+ | `gspec.implement` | Senior Engineer | Reads all specs (including research), identifies gaps, plans and builds |
67
112
 
68
- **5. Iterate** *(optional)* — Keep specs and code in sync as the project evolves.
113
+ **6. Iterate** *(optional)* — Keep specs and code in sync as the project evolves.
69
114
 
70
115
  | Command | Role | What it does |
71
116
  |---|---|---|
@@ -97,6 +142,7 @@ The CLI will ask which platform you're installing for:
97
142
  | Claude Code | `.claude/skills/` |
98
143
  | Cursor | `.cursor/commands/` |
99
144
  | Antigravity | `.agent/skills/` |
145
+ | Codex | `.agents/skills/` |
100
146
 
101
147
  You can skip the prompt by passing a target directly:
102
148
 
@@ -104,6 +150,7 @@ You can skip the prompt by passing a target directly:
104
150
  npx gspec --target claude
105
151
  npx gspec --target cursor
106
152
  npx gspec --target antigravity
153
+ npx gspec --target codex
107
154
  ```
108
155
 
109
156
  That's it. The commands are immediately available in your AI tool.
@@ -120,6 +167,7 @@ project-root/
120
167
  ├── stack.md # Technology stack and architecture
121
168
  ├── practices.md # Development standards
122
169
  ├── architecture.md # Technical architecture blueprint
170
+ ├── research.md # Competitive analysis and feature gaps
123
171
  ├── epics/
124
172
  │ └── onboarding-flow.md
125
173
  └── features/
@@ -140,9 +188,9 @@ These are standard Markdown files. They live in your repo, are version-controlle
140
188
 
141
189
  **Incremental implementation.** Feature PRDs use checkboxes to track which capabilities have been built. The `implement` command reads these to know what's done and what's remaining, so it can be run multiple times as your project grows.
142
190
 
143
- **Competitive research.** The `implement` command can optionally research competitors named in your product profile, identifying table-stakes features you might be missing and opportunities for differentiation.
191
+ **Competitive research.** The `research` command analyzes competitors named in your product profile, identifying table-stakes features you might be missing and opportunities for differentiation. Its output is saved to `gspec/research.md` and automatically used by `implement` when present.
144
192
 
145
- **Platform-agnostic.** A single set of source commands builds for Claude Code, Cursor, and Antigravity. The build system handles platform-specific formatting so the commands stay consistent across tools.
193
+ **Platform-agnostic.** A single set of source commands builds for Claude Code, Cursor, Antigravity, and Codex. The build system handles platform-specific formatting so the commands stay consistent across tools.
146
194
 
147
195
  ## Supported Platforms
148
196
 
@@ -151,6 +199,7 @@ These are standard Markdown files. They live in your repo, are version-controlle
151
199
  | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | Skills format | Supported |
152
200
  | [Cursor](https://www.cursor.com/) | Commands format | Supported |
153
201
  | [Antigravity](https://www.antigravity.dev/) | Skills format | Supported |
202
+ | [Codex](https://developers.openai.com/codex/cli/) | Skills format | Supported |
154
203
 
155
204
  ## Project Status
156
205
 
package/bin/gspec.js CHANGED
@@ -45,12 +45,19 @@ const TARGETS = {
45
45
  label: 'Antigravity',
46
46
  layout: 'directory',
47
47
  },
48
+ codex: {
49
+ sourceDir: join(DIST_DIR, 'codex'),
50
+ installDir: '.agents/skills',
51
+ label: 'Codex',
52
+ layout: 'directory',
53
+ },
48
54
  };
49
55
 
50
56
  const TARGET_CHOICES = [
51
57
  { key: '1', name: 'claude', label: 'Claude Code' },
52
58
  { key: '2', name: 'cursor', label: 'Cursor' },
53
59
  { key: '3', name: 'antigravity', label: 'Antigravity' },
60
+ { key: '4', name: 'codex', label: 'Codex' },
54
61
  ];
55
62
 
56
63
  function promptTarget() {
@@ -63,7 +70,7 @@ function promptTarget() {
63
70
  console.log();
64
71
 
65
72
  return new Promise((resolve) => {
66
- rl.question(chalk.bold(' Select [1-3]: '), (answer) => {
73
+ rl.question(chalk.bold(' Select [1-4]: '), (answer) => {
67
74
  rl.close();
68
75
  const trimmed = answer.trim().toLowerCase();
69
76
 
@@ -76,7 +83,7 @@ function promptTarget() {
76
83
  if (byName) return resolve(byName.name);
77
84
 
78
85
  console.error(chalk.red(`\nInvalid selection: "${answer.trim()}"`));
79
- console.error(`Valid options: 1, 2, 3, claude, cursor, antigravity`);
86
+ console.error(`Valid options: 1, 2, 3, 4, claude, cursor, antigravity, codex`);
80
87
  process.exit(1);
81
88
  });
82
89
  });
@@ -215,6 +222,7 @@ const MIGRATE_COMMANDS = {
215
222
  claude: '/gspec-migrate',
216
223
  cursor: '/gspec-migrate',
217
224
  antigravity: '/gspec-migrate',
225
+ codex: '/gspec-migrate',
218
226
  };
219
227
 
220
228
  function parseGspecVersion(content) {
@@ -297,7 +305,7 @@ program
297
305
  .name('gspec')
298
306
  .description('Install gspec specification commands')
299
307
  .version(pkg.version)
300
- .option('-t, --target <target>', 'target platform (claude, cursor, antigravity)')
308
+ .option('-t, --target <target>', 'target platform (claude, cursor, antigravity, codex)')
301
309
  .action(async (opts) => {
302
310
  console.log(BANNER);
303
311
 
@@ -31,7 +31,7 @@ Take the provided epic description (a large body of work) and break it down into
31
31
 
32
32
  ## Guidelines
33
33
 
34
- - **Read existing gspec documents first** to ground the epic and its features in established product context
34
+ - **Read existing feature PRDs and epics** in `gspec/features/` and `gspec/epics/` to understand already-specified work and avoid overlap
35
35
  - Identify distinct features that make up the epic
36
36
  - **Ask all clarifying questions in the chat before writing specs** — never embed unresolved questions in the generated documents
37
37
  - When asking questions, offer 2-3 specific suggestions to guide the discussion
@@ -43,21 +43,27 @@ Take the provided epic description (a large body of work) and break it down into
43
43
 
44
44
  ---
45
45
 
46
- ## Context Discovery
46
+ ## Portability
47
47
 
48
- Before generating epic and feature documents, check for and read any existing gspec documents in the project root's `gspec/` folder. These provide established product context that should inform the breakdown:
48
+ Epic summaries and the feature PRDs they produce are designed to be **portable across projects**. A feature spec written for one project should be reusable in a different project with a different profile, design system, tech stack, and development practices. Project-specific context is resolved at implementation time by `gspec-implement`, which reads all gspec documents (profile, style, stack, practices) alongside the feature PRDs.
49
49
 
50
- 1. **`gspec/profile.md`** — Product identity, target audience, value proposition, market context, and competitive landscape. Use this to align the epic with the product's mission, ensure features target the right users, and understand what's table-stakes vs. differentiating.
51
- 2. **`gspec/style.md`**Visual design language, component patterns, and UX principles. Use this to inform UX requirements in individual feature PRDs and ensure consistency with the established design system.
52
- 3. **`gspec/stack.md`**Technology choices and architecture. Use this to understand technical constraints that may affect feature scoping, sequencing, and dependency mapping.
53
- 4. **`gspec/practices.md`**Development standards and conventions. Use this to understand delivery constraints, quality expectations, and testing requirements that may influence phasing.
50
+ **To maintain portability, DO NOT read or incorporate context from:**
51
+ - `gspec/profile.md`Do not reference project-specific personas, competitive landscape, or positioning
52
+ - `gspec/style.md`Do not reference a specific design system or component library
53
+ - `gspec/stack.md`Do not reference specific technologies (already covered by Technology Agnosticism)
54
+ - `gspec/practices.md` — Do not reference project-specific development standards
54
55
 
55
- If these files don't exist, proceed without them they are optional context, not blockers. When they do exist, incorporate their context naturally:
56
- - Reference the product's target users and personas from the profile rather than defining them from scratch
57
- - Align epic and feature success metrics with metrics already established in the profile
58
- - Ensure feature boundaries and UX requirements respect the established design system
59
- - Let the competitive landscape inform priority levels and MVE scope
60
- - Use technical stack constraints to inform realistic dependency mapping and sequencing
56
+ **DO read existing feature PRDs and epics** in `gspec/features/` and `gspec/epics/` to:
57
+ - Avoid duplicating or contradicting already-specified features
58
+ - Identify cross-feature and cross-epic dependencies
59
+ - Ensure consistent scope boundaries and terminology
60
+
61
+ **Write in generic, portable terms:**
62
+ - Use relative role descriptions ("primary users", "administrators", "content creators") not project-specific persona names
63
+ - Justify priorities based on intrinsic user value and technical dependencies, not competitive landscape
64
+ - Describe desired UX behavior generically ("clear error feedback", "responsive layout") without referencing a specific design system
65
+ - Define success metrics in terms of each feature's own outcomes, not project-level KPIs
66
+ - Sequence features based on logical dependencies, not project-specific stack constraints
61
67
 
62
68
  ## Output Rules
63
69
 
@@ -113,7 +119,7 @@ If these files don't exist, proceed without them — they are optional context,
113
119
  - ❌ S3, GCS, Azure Blob Storage
114
120
  - ❌ Kafka, RabbitMQ, SQS
115
121
 
116
- This separation allows the same epic and feature specs to be implemented using different technology stacks by swapping the Stack file.
122
+ This separation — combined with the portability principles above — allows the same epic and feature specs to be reused across projects with different technology stacks, design systems, and product contexts.
117
123
 
118
124
  ## Epic Summary Document Structure
119
125
 
@@ -161,7 +167,7 @@ For each feature, create a separate file in `gspec/features/[feature-name].md` w
161
167
  - **Parent Epic** (link to epic summary)
162
168
 
163
169
  ### 2. Users & Use Cases
164
- - Primary users
170
+ - Primary users (use generic role descriptions like "end users", "administrators", "content managers" — not project-specific persona names)
165
171
  - Key use cases (3-4 scenarios showing how users benefit)
166
172
 
167
173
  ### 3. Scope
@@ -195,6 +201,10 @@ For each feature, create a separate file in `gspec/features/[feature-name].md` w
195
201
  ### 7. Success Metrics
196
202
  - 2-4 measurable outcomes that define whether this feature is working
197
203
 
204
+ ### 8. Implementation Context
205
+ - Include the following standard note verbatim:
206
+ > This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
207
+
198
208
  ## Workflow
199
209
 
200
210
  1. **Analyze the epic description** and identify logical feature boundaries
@@ -23,7 +23,7 @@ Your task is to take the provided feature description (which may be vague or det
23
23
  - ✅ Build order recommendations based on technical dependencies
24
24
 
25
25
  You should:
26
- - **Read existing gspec documents first** to ground the PRD in established product context
26
+ - **Read existing feature PRDs** in `gspec/features/` to understand already-specified features and avoid overlap
27
27
  - **Ask all clarifying questions in the chat before writing the spec** — never embed unresolved questions in the generated document
28
28
  - When asking questions, offer 2-3 specific suggestions to guide the discussion
29
29
  - Focus on user value, scope, and outcomes
@@ -32,20 +32,26 @@ You should:
32
32
 
33
33
  ---
34
34
 
35
- ## Context Discovery
35
+ ## Portability
36
36
 
37
- Before generating the PRD, check for and read any existing gspec documents in the project root's `gspec/` folder. These provide established product context that should inform the feature definition:
37
+ Feature PRDs are designed to be **portable across projects**. A feature spec written for one project should be reusable in a different project with a different profile, design system, tech stack, and development practices. Project-specific context is resolved at implementation time by `gspec-implement`, which reads all gspec documents (profile, style, stack, practices) alongside the feature PRDs.
38
38
 
39
- 1. **`gspec/profile.md`** — Product identity, target audience, value proposition, market context, and competitive landscape. Use this to align the feature with the product's mission, target users, and positioning.
40
- 2. **`gspec/style.md`**Visual design language, component patterns, and UX principles. Use this to inform any UX-related guidance or capability descriptions in the PRD.
41
- 3. **`gspec/stack.md`**Technology choices and architecture. Use this to understand technical constraints that may affect feature scope or feasibility.
42
- 4. **`gspec/practices.md`**Development standards and conventions. Use this to understand delivery constraints or quality expectations.
39
+ **To maintain portability, DO NOT read or incorporate context from:**
40
+ - `gspec/profile.md`Do not reference project-specific personas, competitive landscape, or positioning
41
+ - `gspec/style.md`Do not reference a specific design system or component library
42
+ - `gspec/stack.md`Do not reference specific technologies (already covered by Technology Agnosticism)
43
+ - `gspec/practices.md` — Do not reference project-specific development standards
43
44
 
44
- If these files don't exist, proceed without them — they are optional context, not blockers. When they do exist, incorporate their context naturally:
45
- - Reference the product's target users from the profile rather than defining them from scratch
46
- - Align success metrics with metrics already established in the profile
47
- - Ensure capabilities respect the product's stated non-goals and positioning
48
- - Let the competitive landscape inform what's table-stakes vs. differentiating
45
+ **DO read existing feature PRDs** in `gspec/features/` to:
46
+ - Avoid duplicating or contradicting already-specified features
47
+ - Identify cross-feature dependencies
48
+ - Ensure consistent scope boundaries
49
+
50
+ **Write in generic, portable terms:**
51
+ - Use relative role descriptions ("primary users", "administrators", "content creators") not project-specific persona names
52
+ - Justify priorities based on the feature's intrinsic user value, not competitive landscape
53
+ - Describe desired UX behavior generically ("clear error feedback", "responsive layout") without referencing a specific design system
54
+ - Define success metrics in terms of the feature's own outcomes, not project-level KPIs
49
55
 
50
56
  ---
51
57
 
@@ -97,7 +103,7 @@ If these files don't exist, proceed without them — they are optional context,
97
103
  - ❌ S3, GCS, Azure Blob Storage
98
104
  - ❌ Kafka, RabbitMQ, SQS
99
105
 
100
- This separation allows the same feature spec to be implemented using different technology stacks by swapping the Stack file.
106
+ This separation — combined with the portability principles above — allows the same feature spec to be reused across projects with different technology stacks, design systems, and product contexts.
101
107
 
102
108
  ---
103
109
 
@@ -111,7 +117,7 @@ This separation allows the same feature spec to be implemented using different t
111
117
  - Problem being solved and why it matters now
112
118
 
113
119
  ### 2. Users & Use Cases
114
- - Primary users
120
+ - Primary users (use generic role descriptions like "end users", "administrators", "content managers" — not project-specific persona names)
115
121
  - Key use cases (3-4 scenarios showing how users benefit)
116
122
 
117
123
  ### 3. Scope
@@ -145,6 +151,10 @@ This separation allows the same feature spec to be implemented using different t
145
151
  ### 7. Success Metrics
146
152
  - 2-4 measurable outcomes that define whether this feature is working
147
153
 
154
+ ### 8. Implementation Context
155
+ - Include the following standard note verbatim:
156
+ > This feature PRD is portable and project-agnostic. During implementation, consult the project's `gspec/profile.md` (target users, positioning), `gspec/style.md` (design system), `gspec/stack.md` (technology choices), and `gspec/practices.md` (development standards) to resolve project-specific context.
157
+
148
158
  ---
149
159
 
150
160
  ## Tone & Style