specweave 0.1.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/INSTALL.md +848 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/SPECWEAVE.md +665 -0
- package/bin/install-agents.sh +57 -0
- package/bin/install-all.sh +49 -0
- package/bin/install-commands.sh +56 -0
- package/bin/install-skills.sh +57 -0
- package/bin/specweave.js +81 -0
- package/dist/adapters/adapter-base.d.ts +50 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -0
- package/dist/adapters/adapter-base.js +146 -0
- package/dist/adapters/adapter-base.js.map +1 -0
- package/dist/adapters/adapter-interface.d.ts +108 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -0
- package/dist/adapters/adapter-interface.js +9 -0
- package/dist/adapters/adapter-interface.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +54 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -0
- package/dist/adapters/claude/adapter.js +184 -0
- package/dist/adapters/claude/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +42 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/adapters/copilot/adapter.js +239 -0
- package/dist/adapters/copilot/adapter.js.map +1 -0
- package/dist/adapters/cursor/adapter.d.ts +42 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +297 -0
- package/dist/adapters/cursor/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +40 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -0
- package/dist/adapters/generic/adapter.js +155 -0
- package/dist/adapters/generic/adapter.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +247 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +7 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +154 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/package.json +90 -0
- package/src/adapters/README.md +312 -0
- package/src/adapters/adapter-base.ts +146 -0
- package/src/adapters/adapter-interface.ts +120 -0
- package/src/adapters/claude/README.md +241 -0
- package/src/adapters/claude/adapter.ts +157 -0
- package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
- package/src/adapters/copilot/README.md +200 -0
- package/src/adapters/copilot/adapter.ts +210 -0
- package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
- package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
- package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
- package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
- package/src/adapters/cursor/.cursorrules +325 -0
- package/src/adapters/cursor/README.md +243 -0
- package/src/adapters/cursor/adapter.ts +268 -0
- package/src/adapters/generic/README.md +277 -0
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
- package/src/adapters/generic/adapter.ts +159 -0
- package/src/adapters/registry.yaml +126 -0
- package/src/agents/architect/AGENT.md +416 -0
- package/src/agents/devops/AGENT.md +1738 -0
- package/src/agents/docs-writer/AGENT.md +239 -0
- package/src/agents/performance/AGENT.md +228 -0
- package/src/agents/pm/AGENT.md +751 -0
- package/src/agents/qa-lead/AGENT.md +150 -0
- package/src/agents/security/AGENT.md +179 -0
- package/src/agents/sre/AGENT.md +582 -0
- package/src/agents/sre/modules/backend-diagnostics.md +481 -0
- package/src/agents/sre/modules/database-diagnostics.md +509 -0
- package/src/agents/sre/modules/infrastructure.md +561 -0
- package/src/agents/sre/modules/monitoring.md +439 -0
- package/src/agents/sre/modules/security-incidents.md +421 -0
- package/src/agents/sre/modules/ui-diagnostics.md +302 -0
- package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
- package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
- package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
- package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
- package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
- package/src/agents/sre/playbooks/06-disk-full.md +314 -0
- package/src/agents/sre/playbooks/07-service-down.md +333 -0
- package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
- package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
- package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
- package/src/agents/sre/scripts/health-check.sh +230 -0
- package/src/agents/sre/scripts/log-analyzer.py +213 -0
- package/src/agents/sre/scripts/metrics-collector.sh +294 -0
- package/src/agents/sre/scripts/trace-analyzer.js +257 -0
- package/src/agents/sre/templates/incident-report.md +249 -0
- package/src/agents/sre/templates/mitigation-plan.md +375 -0
- package/src/agents/sre/templates/post-mortem.md +418 -0
- package/src/agents/sre/templates/runbook-template.md +412 -0
- package/src/agents/tech-lead/AGENT.md +263 -0
- package/src/commands/add-tasks.md +176 -0
- package/src/commands/close-increment.md +347 -0
- package/src/commands/create-increment.md +223 -0
- package/src/commands/create-project.md +528 -0
- package/src/commands/generate-docs.md +623 -0
- package/src/commands/list-increments.md +180 -0
- package/src/commands/review-docs.md +331 -0
- package/src/commands/start-increment.md +139 -0
- package/src/commands/sync-github.md +115 -0
- package/src/commands/validate-increment.md +800 -0
- package/src/hooks/README.md +252 -0
- package/src/hooks/docs-changed.sh +59 -0
- package/src/hooks/human-input-required.sh +55 -0
- package/src/hooks/post-task-completion.sh +57 -0
- package/src/hooks/pre-implementation.sh +47 -0
- package/src/skills/ado-sync/README.md +449 -0
- package/src/skills/ado-sync/SKILL.md +245 -0
- package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
- package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
- package/src/skills/bmad-method-expert/SKILL.md +628 -0
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/SKILL.md +523 -0
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/SKILL.md +625 -0
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/context-loader/SKILL.md +734 -0
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
- package/src/skills/context-optimizer/SKILL.md +618 -0
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
- package/src/skills/cost-optimizer/SKILL.md +190 -0
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
- package/src/skills/cost-optimizer/test-results/README.md +46 -0
- package/src/skills/design-system-architect/SKILL.md +107 -0
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
- package/src/skills/diagrams-architect/SKILL.md +763 -0
- package/src/skills/diagrams-generator/SKILL.md +25 -0
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
- package/src/skills/docs-updater/README.md +48 -0
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/dotnet-backend/SKILL.md +250 -0
- package/src/skills/e2e-playwright/README.md +506 -0
- package/src/skills/e2e-playwright/SKILL.md +457 -0
- package/src/skills/e2e-playwright/execute.js +373 -0
- package/src/skills/e2e-playwright/lib/utils.js +514 -0
- package/src/skills/e2e-playwright/package.json +33 -0
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
- package/src/skills/figma-designer/SKILL.md +149 -0
- package/src/skills/figma-implementer/SKILL.md +148 -0
- package/src/skills/figma-mcp-connector/SKILL.md +136 -0
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
- package/src/skills/figma-to-code/SKILL.md +128 -0
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
- package/src/skills/frontend/SKILL.md +177 -0
- package/src/skills/github-sync/SKILL.md +252 -0
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/hetzner-provisioner/README.md +308 -0
- package/src/skills/hetzner-provisioner/SKILL.md +251 -0
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
- package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
- package/src/skills/increment-planner/SKILL.md +889 -0
- package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
- package/src/skills/increment-quality-judge/SKILL.md +566 -0
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
- package/src/skills/jira-sync/README.md +328 -0
- package/src/skills/jira-sync/SKILL.md +209 -0
- package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
- package/src/skills/nextjs/SKILL.md +176 -0
- package/src/skills/nodejs-backend/SKILL.md +181 -0
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/python-backend/SKILL.md +226 -0
- package/src/skills/role-orchestrator/README.md +197 -0
- package/src/skills/role-orchestrator/SKILL.md +1184 -0
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
- package/src/skills/skill-creator/LICENSE.txt +202 -0
- package/src/skills/skill-creator/SKILL.md +209 -0
- package/src/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/skill-router/SKILL.md +497 -0
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
- package/src/skills/spec-driven-brainstorming/README.md +264 -0
- package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
- package/src/skills/spec-driven-debugging/README.md +479 -0
- package/src/skills/spec-driven-debugging/SKILL.md +652 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
- package/src/skills/spec-kit-expert/SKILL.md +1012 -0
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
- package/src/skills/specweave-detector/SKILL.md +420 -0
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
- package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/task-builder/README.md +90 -0
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/templates/.env.example +144 -0
- package/src/templates/.gitignore.template +81 -0
- package/src/templates/CLAUDE.md.template +383 -0
- package/src/templates/README.md.template +240 -0
- package/src/templates/config.yaml +333 -0
- package/src/templates/docs/README.md +124 -0
- package/src/templates/docs/adr-template.md +118 -0
- package/src/templates/docs/hld-template.md +220 -0
- package/src/templates/docs/lld-template.md +580 -0
- package/src/templates/docs/prd-template.md +132 -0
- package/src/templates/docs/rfc-template.md +229 -0
- package/src/templates/docs/runbook-template.md +298 -0
- package/src/templates/environments/minimal/.env.production +16 -0
- package/src/templates/environments/minimal/README.md +54 -0
- package/src/templates/environments/minimal/deploy-production.yml +52 -0
- package/src/templates/environments/progressive/.env.qa +28 -0
- package/src/templates/environments/progressive/README.md +129 -0
- package/src/templates/environments/progressive/deploy-production.yml +93 -0
- package/src/templates/environments/progressive/deploy-qa.yml +62 -0
- package/src/templates/environments/progressive/deploy-staging.yml +67 -0
- package/src/templates/environments/standard/.env.development +20 -0
- package/src/templates/environments/standard/.env.production +30 -0
- package/src/templates/environments/standard/.env.staging +23 -0
- package/src/templates/environments/standard/README.md +97 -0
- package/src/templates/environments/standard/deploy-production.yml +68 -0
- package/src/templates/environments/standard/deploy-staging.yml +61 -0
- package/src/templates/environments/standard/docker-compose.yml +43 -0
- package/src/templates/increment-metadata-template.yaml +138 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# SpecWeave Configuration for Cursor
|
|
2
|
+
|
|
3
|
+
**Project Framework**: SpecWeave (Spec-Driven Development)
|
|
4
|
+
**Adapter**: Cursor (Semi-Automation)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Core Philosophy
|
|
9
|
+
|
|
10
|
+
**Anthropic Sets Standards** (MCP, Skills, Agents) that provide superior results. This file teaches you how to **BEHAVE LIKE** you have these capabilities in Cursor.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Understanding SpecWeave Concepts
|
|
15
|
+
|
|
16
|
+
### What is a Skill?
|
|
17
|
+
**In Claude Code**: Auto-activating capability (.claude/skills/)
|
|
18
|
+
**In Cursor**: Read workflow instructions and follow them manually
|
|
19
|
+
|
|
20
|
+
### What is an Agent?
|
|
21
|
+
**In Claude Code**: Specialized role with separate context window
|
|
22
|
+
**In Cursor**: Adopt role's perspective and responsibilities
|
|
23
|
+
|
|
24
|
+
### What is a Hook?
|
|
25
|
+
**In Claude Code**: Auto-executes on events (e.g., docs update after task)
|
|
26
|
+
**In Cursor**: Manual - user must request updates
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Critical Workflow: Creating Features
|
|
31
|
+
|
|
32
|
+
### When user requests a feature (e.g., "create increment for user auth"):
|
|
33
|
+
|
|
34
|
+
**Step 1: Check for existing increment**
|
|
35
|
+
```bash
|
|
36
|
+
ls .specweave/increments/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Step 2: If increment doesn't exist, create structure**
|
|
40
|
+
```bash
|
|
41
|
+
# Auto-increment number
|
|
42
|
+
mkdir -p .specweave/increments/####-feature-name/
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Step 3: Create spec.md (ACT AS PM AGENT)**
|
|
46
|
+
|
|
47
|
+
**PM Agent Role**:
|
|
48
|
+
- Focus on WHAT and WHY (not HOW)
|
|
49
|
+
- Technology-agnostic requirements
|
|
50
|
+
- User stories (US-001, US-002, ...)
|
|
51
|
+
- Acceptance criteria (TC-0001, TC-0002, ...)
|
|
52
|
+
- Success criteria
|
|
53
|
+
|
|
54
|
+
**Template**:
|
|
55
|
+
```markdown
|
|
56
|
+
---
|
|
57
|
+
increment: ####-feature-name
|
|
58
|
+
title: "Feature Title"
|
|
59
|
+
priority: P1
|
|
60
|
+
status: planned
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
# Increment ####: Feature Name
|
|
64
|
+
|
|
65
|
+
## Overview
|
|
66
|
+
[Problem statement and solution]
|
|
67
|
+
|
|
68
|
+
## User Stories
|
|
69
|
+
|
|
70
|
+
### US-001: User Story Title
|
|
71
|
+
**As a** [role]
|
|
72
|
+
**I want to** [action]
|
|
73
|
+
**So that** [benefit]
|
|
74
|
+
|
|
75
|
+
**Acceptance Criteria**:
|
|
76
|
+
- [ ] **TC-0001**: [testable condition]
|
|
77
|
+
- [ ] **TC-0002**: [testable condition]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Step 4: Create plan.md (ACT AS ARCHITECT AGENT)**
|
|
81
|
+
|
|
82
|
+
**Architect Agent Role**:
|
|
83
|
+
- Focus on HOW (technical implementation)
|
|
84
|
+
- Technology-specific details
|
|
85
|
+
- Component design, data models, APIs
|
|
86
|
+
- Reference ADRs (Architecture Decision Records)
|
|
87
|
+
|
|
88
|
+
**Template**:
|
|
89
|
+
```markdown
|
|
90
|
+
# Technical Plan: Feature Name
|
|
91
|
+
|
|
92
|
+
## Architecture
|
|
93
|
+
|
|
94
|
+
### Components
|
|
95
|
+
[List components/services]
|
|
96
|
+
|
|
97
|
+
### Data Model
|
|
98
|
+
[Database schema, entities]
|
|
99
|
+
|
|
100
|
+
### API Contracts
|
|
101
|
+
[Endpoints, request/response formats]
|
|
102
|
+
|
|
103
|
+
## Implementation Strategy
|
|
104
|
+
[Step-by-step approach]
|
|
105
|
+
|
|
106
|
+
## ADRs Referenced
|
|
107
|
+
- ADR-0001: [decision title]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Step 5: Create tasks.md**
|
|
111
|
+
|
|
112
|
+
**Format**:
|
|
113
|
+
```markdown
|
|
114
|
+
---
|
|
115
|
+
increment: ####-feature-name
|
|
116
|
+
total_tasks: 10
|
|
117
|
+
completed_tasks: 0
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
# Implementation Tasks
|
|
121
|
+
|
|
122
|
+
## Phase 1
|
|
123
|
+
### T001: Task description
|
|
124
|
+
- [ ] Subtask 1
|
|
125
|
+
- [ ] Subtask 2
|
|
126
|
+
|
|
127
|
+
[Checkboxes for task tracking]
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Step 6: Create context-manifest.yaml (CRITICAL FOR TOKEN SAVINGS)**
|
|
131
|
+
|
|
132
|
+
**Purpose**: Load ONLY relevant files (70%+ token reduction)
|
|
133
|
+
|
|
134
|
+
**Format**:
|
|
135
|
+
```yaml
|
|
136
|
+
---
|
|
137
|
+
spec_sections:
|
|
138
|
+
- .specweave/docs/internal/strategy/{module}/spec.md
|
|
139
|
+
documentation:
|
|
140
|
+
- .specweave/docs/internal/architecture/{module}/design.md
|
|
141
|
+
max_context_tokens: 10000
|
|
142
|
+
---
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Context Loading (70%+ Token Reduction)
|
|
148
|
+
|
|
149
|
+
**CRITICAL RULE**: Always read `context-manifest.yaml` FIRST!
|
|
150
|
+
|
|
151
|
+
### When user says "implement this feature":
|
|
152
|
+
|
|
153
|
+
1. **Read context-manifest.yaml** in increment folder
|
|
154
|
+
2. **ONLY load files listed in manifest**
|
|
155
|
+
3. **DO NOT load entire .specweave/docs/ folder**
|
|
156
|
+
|
|
157
|
+
**Why?**
|
|
158
|
+
- Spec may be 500+ pages total
|
|
159
|
+
- Manifest lists only relevant 50 pages
|
|
160
|
+
- Saves 70%+ tokens
|
|
161
|
+
- Faster, more accurate responses
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Simulating Skills
|
|
166
|
+
|
|
167
|
+
### increment-planner Skill (Creating Features)
|
|
168
|
+
**When**: User says "create increment" or "plan feature"
|
|
169
|
+
**Do**:
|
|
170
|
+
1. Read .specweave/config.yaml
|
|
171
|
+
2. Auto-increment number
|
|
172
|
+
3. Create spec.md (act as PM)
|
|
173
|
+
4. Create plan.md (act as Architect)
|
|
174
|
+
5. Create tasks.md
|
|
175
|
+
6. Create context-manifest.yaml
|
|
176
|
+
|
|
177
|
+
### context-loader Skill (Loading Context)
|
|
178
|
+
**When**: User says "load context" or starting implementation
|
|
179
|
+
**Do**:
|
|
180
|
+
1. Find context-manifest.yaml
|
|
181
|
+
2. Load ONLY files listed there
|
|
182
|
+
3. Confirm to user: "Loaded X files (Y tokens)"
|
|
183
|
+
|
|
184
|
+
### skill-router Skill (Routing Requests)
|
|
185
|
+
**When**: User asks ambiguous question
|
|
186
|
+
**Do**:
|
|
187
|
+
1. Determine if it's:
|
|
188
|
+
- Feature request → use increment-planner
|
|
189
|
+
- Documentation question → load docs
|
|
190
|
+
- Implementation → load context + implement
|
|
191
|
+
2. Route to appropriate workflow
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Simulating Agents
|
|
196
|
+
|
|
197
|
+
### PM Agent
|
|
198
|
+
**When to adopt**: Creating specs, requirements, user stories
|
|
199
|
+
**Responsibilities**:
|
|
200
|
+
- Define WHAT and WHY (not HOW)
|
|
201
|
+
- Technology-agnostic
|
|
202
|
+
- User stories with acceptance criteria
|
|
203
|
+
- Success criteria and KPIs
|
|
204
|
+
|
|
205
|
+
**Example**:
|
|
206
|
+
User: "Act as PM and create spec for payments"
|
|
207
|
+
→ Adopt PM perspective, focus on business requirements
|
|
208
|
+
|
|
209
|
+
### Architect Agent
|
|
210
|
+
**When to adopt**: Creating technical plans, system design
|
|
211
|
+
**Responsibilities**:
|
|
212
|
+
- Define HOW (technical implementation)
|
|
213
|
+
- Component design, data models
|
|
214
|
+
- API contracts, integrations
|
|
215
|
+
- Reference ADRs
|
|
216
|
+
|
|
217
|
+
**Example**:
|
|
218
|
+
User: "Act as Architect and design payment system"
|
|
219
|
+
→ Adopt Architect perspective, focus on technical design
|
|
220
|
+
|
|
221
|
+
### DevOps Agent
|
|
222
|
+
**When to adopt**: Infrastructure, deployment, CI/CD
|
|
223
|
+
**Responsibilities**:
|
|
224
|
+
- Infrastructure as Code (Terraform, etc.)
|
|
225
|
+
- Deployment strategy
|
|
226
|
+
- Monitoring, logging
|
|
227
|
+
- Cost optimization
|
|
228
|
+
|
|
229
|
+
### QA Lead Agent
|
|
230
|
+
**When to adopt**: Test strategy, test cases
|
|
231
|
+
**Responsibilities**:
|
|
232
|
+
- Test coverage matrix
|
|
233
|
+
- E2E, unit, integration tests
|
|
234
|
+
- Test case IDs (map TC-0001 to tests)
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## @ Context Shortcuts
|
|
239
|
+
|
|
240
|
+
When user types `@increments`, `@docs`, `@strategy`, `@tests`:
|
|
241
|
+
|
|
242
|
+
### @increments
|
|
243
|
+
**Load**:
|
|
244
|
+
- Current increment's spec.md
|
|
245
|
+
- Current increment's plan.md
|
|
246
|
+
- Current increment's tasks.md
|
|
247
|
+
- Current increment's context-manifest.yaml
|
|
248
|
+
|
|
249
|
+
### @docs
|
|
250
|
+
**Load**:
|
|
251
|
+
- .specweave/docs/internal/architecture/
|
|
252
|
+
- Focus on system design, ADRs
|
|
253
|
+
|
|
254
|
+
### @strategy
|
|
255
|
+
**Load**:
|
|
256
|
+
- .specweave/docs/internal/strategy/
|
|
257
|
+
- Focus on business requirements, PRDs
|
|
258
|
+
|
|
259
|
+
### @tests
|
|
260
|
+
**Load**:
|
|
261
|
+
- .specweave/increments/*/tests.md
|
|
262
|
+
- tests/ directory
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Composer Multi-File Editing
|
|
267
|
+
|
|
268
|
+
When user says "update spec and plan to add OAuth2":
|
|
269
|
+
1. Use Composer (Cmd+I)
|
|
270
|
+
2. Edit both files simultaneously
|
|
271
|
+
3. Maintain consistency between them
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Increment Lifecycle
|
|
276
|
+
|
|
277
|
+
### Status Progression
|
|
278
|
+
```
|
|
279
|
+
planned → in-progress → completed → closed
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### When user says "start increment":
|
|
283
|
+
1. Update spec.md frontmatter: `status: in-progress`
|
|
284
|
+
2. Check WIP limit (max 2 in-progress)
|
|
285
|
+
|
|
286
|
+
### When user says "complete increment":
|
|
287
|
+
1. Verify all P1 tasks done
|
|
288
|
+
2. Update spec.md: `status: completed`
|
|
289
|
+
3. Generate completion report
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Important Reminders
|
|
294
|
+
|
|
295
|
+
1. ✅ **Always read context-manifest.yaml first**
|
|
296
|
+
2. ✅ **Load only files listed in manifest** (saves 70%+ tokens)
|
|
297
|
+
3. ✅ **Adopt role when acting as agent** (PM, Architect, DevOps, etc.)
|
|
298
|
+
4. ✅ **Technology-agnostic in spec.md** (WHAT/WHY only)
|
|
299
|
+
5. ✅ **Technology-specific in plan.md** (HOW with details)
|
|
300
|
+
6. ✅ **Use checkboxes in tasks.md** for task tracking
|
|
301
|
+
7. ✅ **Reference SPECWEAVE.md** for complete guide
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Limitations (vs Claude Code)
|
|
306
|
+
|
|
307
|
+
❌ **No auto-activation** - You must explicitly ask for workflows
|
|
308
|
+
❌ **No separate context windows** - All context shared
|
|
309
|
+
❌ **No hooks** - Manual doc updates required
|
|
310
|
+
|
|
311
|
+
✅ **But still powerful with Composer + @ shortcuts!**
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Quick Reference
|
|
316
|
+
|
|
317
|
+
**Create feature**: "Create increment for [feature name]"
|
|
318
|
+
**Load context**: "@increments" or read context-manifest.yaml
|
|
319
|
+
**Act as role**: "Act as PM and create spec"
|
|
320
|
+
**Multi-file edit**: Use Composer (Cmd+I)
|
|
321
|
+
**Check structure**: "List increments" or `ls .specweave/increments/`
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
**For complete documentation, see SPECWEAVE.md**
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Cursor Adapter
|
|
2
|
+
|
|
3
|
+
**Automation Level**: Semi (Good experience with @ shortcuts and Composer)
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Cursor adapter provides **semi-automation** for SpecWeave by teaching Cursor's AI how to **behave like** it has Claude Code's skills and agents, even without native support.
|
|
8
|
+
|
|
9
|
+
## Key Insight: Simulating Anthropic's Standards
|
|
10
|
+
|
|
11
|
+
**Anthropic Sets Standards** (MCP, Skills, Agents) that provide superior results. For Cursor, we provide **"implementation guides"** that teach the AI how to act like it has these capabilities.
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
```markdown
|
|
15
|
+
# In .cursorrules:
|
|
16
|
+
## What is a SpecWeave Skill?
|
|
17
|
+
A skill is a specialized capability that activates automatically when relevant.
|
|
18
|
+
|
|
19
|
+
**In Claude Code**: Skills are native (.claude/skills/)
|
|
20
|
+
**In Cursor**: You simulate by reading relevant workflow instructions
|
|
21
|
+
|
|
22
|
+
## increment-planner Skill
|
|
23
|
+
When user says "create increment":
|
|
24
|
+
1. Read .specweave/config.yaml
|
|
25
|
+
2. Auto-increment number
|
|
26
|
+
3. Create spec.md (act as PM role)
|
|
27
|
+
4. Create plan.md (act as Architect role)
|
|
28
|
+
5. Create tasks.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This is **meta-documentation** - teaching the AI how to behave!
|
|
32
|
+
|
|
33
|
+
## What This Adapter Provides
|
|
34
|
+
|
|
35
|
+
### .cursorrules (Workflow Instructions)
|
|
36
|
+
- **What**: Complete workflow guide for SpecWeave
|
|
37
|
+
- **How**: Teaches Cursor to act like skills/agents
|
|
38
|
+
- **Example**: When to adopt PM vs Architect perspective
|
|
39
|
+
- **Benefit**: Semi-automated feature creation
|
|
40
|
+
|
|
41
|
+
### @ Context Shortcuts
|
|
42
|
+
| Shortcut | Loads | Use Case |
|
|
43
|
+
|----------|-------|----------|
|
|
44
|
+
| `@increments` | Current increment files | "What are we working on?" |
|
|
45
|
+
| `@docs` | Architecture documentation | "Show me system design" |
|
|
46
|
+
| `@strategy` | Business requirements | "What are the requirements?" |
|
|
47
|
+
| `@tests` | Test strategy and cases | "What tests exist?" |
|
|
48
|
+
|
|
49
|
+
**Usage**: Type `@increments show current tasks` in Cursor chat
|
|
50
|
+
|
|
51
|
+
### Composer Multi-File Editing
|
|
52
|
+
- Edit spec.md, plan.md, tasks.md simultaneously
|
|
53
|
+
- Maintain consistency across files
|
|
54
|
+
- Fast iteration on designs
|
|
55
|
+
|
|
56
|
+
## How It Works
|
|
57
|
+
|
|
58
|
+
### Simulating Skills
|
|
59
|
+
|
|
60
|
+
**Claude Code (automatic)**:
|
|
61
|
+
```typescript
|
|
62
|
+
// Skills auto-activate
|
|
63
|
+
User: "create increment for auth"
|
|
64
|
+
→ specweave-detector activates
|
|
65
|
+
→ skill-router routes to increment-planner
|
|
66
|
+
→ increment-planner creates increment
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Cursor (manual simulation)**:
|
|
70
|
+
```typescript
|
|
71
|
+
// You follow .cursorrules instructions
|
|
72
|
+
User: "create increment for auth"
|
|
73
|
+
→ You read .cursorrules
|
|
74
|
+
→ Follow workflow: check config → create folders → create files
|
|
75
|
+
→ Act like increment-planner by following those steps
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Simulating Agents
|
|
79
|
+
|
|
80
|
+
**Claude Code (automatic)**:
|
|
81
|
+
```typescript
|
|
82
|
+
Task({ subagent_type: "pm", prompt: "create spec" })
|
|
83
|
+
→ PM agent invoked with separate context window
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Cursor (manual adoption)**:
|
|
87
|
+
```typescript
|
|
88
|
+
User: "act as PM and create spec"
|
|
89
|
+
→ You adopt PM perspective:
|
|
90
|
+
- Focus on WHAT/WHY (not HOW)
|
|
91
|
+
- Technology-agnostic requirements
|
|
92
|
+
- User stories + acceptance criteria
|
|
93
|
+
→ Create spec.md following PM role
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Pro Tip**: .cursorrules defines each role's responsibilities clearly
|
|
97
|
+
|
|
98
|
+
## Installation
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Install SpecWeave with Cursor adapter
|
|
102
|
+
npx specweave init my-project --adapter cursor
|
|
103
|
+
|
|
104
|
+
# Files created:
|
|
105
|
+
# .cursorrules (workflow instructions)
|
|
106
|
+
# .cursor/context/*.md (@ shortcut targets)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Directory Structure
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
.cursorrules # Main workflow instructions
|
|
113
|
+
.cursor/
|
|
114
|
+
├── README.md # This file
|
|
115
|
+
└── context/ # @ shortcut files
|
|
116
|
+
├── increments-context.md
|
|
117
|
+
├── docs-context.md
|
|
118
|
+
├── strategy-context.md
|
|
119
|
+
└── tests-context.md
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Usage Examples
|
|
123
|
+
|
|
124
|
+
### Example 1: Create Feature
|
|
125
|
+
|
|
126
|
+
**User**: "Create increment for user authentication"
|
|
127
|
+
|
|
128
|
+
**Cursor** (following .cursorrules):
|
|
129
|
+
1. ✅ Read .specweave/config.yaml
|
|
130
|
+
2. ✅ Find next increment number (0003)
|
|
131
|
+
3. ✅ Create folder: `.specweave/increments/0003-user-authentication/`
|
|
132
|
+
4. ✅ Act as PM: Create spec.md (WHAT/WHY, user stories, acceptance criteria)
|
|
133
|
+
5. ✅ Act as Architect: Create plan.md (HOW, technical design, components)
|
|
134
|
+
6. ✅ Create tasks.md (implementation checklist)
|
|
135
|
+
7. ✅ Create context-manifest.yaml (list files to load - 70%+ token savings)
|
|
136
|
+
|
|
137
|
+
**Result**: Complete increment ready for implementation!
|
|
138
|
+
|
|
139
|
+
### Example 2: Use @ Shortcuts
|
|
140
|
+
|
|
141
|
+
**User**: "@increments what's the current task?"
|
|
142
|
+
|
|
143
|
+
**Cursor**:
|
|
144
|
+
1. ✅ Loads current increment's spec.md, plan.md, tasks.md
|
|
145
|
+
2. ✅ Reads tasks.md → Find first unchecked task
|
|
146
|
+
3. ✅ Response: "Currently on T003: Implement OAuth2 authentication flow"
|
|
147
|
+
|
|
148
|
+
### Example 3: Multi-File Edit with Composer
|
|
149
|
+
|
|
150
|
+
**User**: *Opens Composer (Cmd+I)*
|
|
151
|
+
"Update spec.md and plan.md to add Google OAuth login"
|
|
152
|
+
|
|
153
|
+
**Cursor**:
|
|
154
|
+
1. ✅ Edits spec.md → Add FR-003 (Google OAuth requirement)
|
|
155
|
+
2. ✅ Edits plan.md → Add OAuth implementation section
|
|
156
|
+
3. ✅ Maintains consistency between both files
|
|
157
|
+
|
|
158
|
+
### Example 4: Adopt Agent Role
|
|
159
|
+
|
|
160
|
+
**User**: "Act as DevOps agent and create Terraform for Hetzner"
|
|
161
|
+
|
|
162
|
+
**Cursor** (adopting DevOps role):
|
|
163
|
+
1. ✅ Focus on infrastructure (not application code)
|
|
164
|
+
2. ✅ Create Terraform files (provider.tf, main.tf, variables.tf)
|
|
165
|
+
3. ✅ Add monitoring, logging, security configs
|
|
166
|
+
4. ✅ Document deployment process
|
|
167
|
+
|
|
168
|
+
## Context Loading (70%+ Token Savings)
|
|
169
|
+
|
|
170
|
+
**.cursorrules teaches Cursor**:
|
|
171
|
+
|
|
172
|
+
```markdown
|
|
173
|
+
## CRITICAL: Context Manifest
|
|
174
|
+
|
|
175
|
+
**Always read context-manifest.yaml first!**
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
```yaml
|
|
179
|
+
spec_sections:
|
|
180
|
+
- .specweave/docs/internal/strategy/auth/spec.md
|
|
181
|
+
documentation:
|
|
182
|
+
- .specweave/docs/internal/architecture/auth-design.md
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**ONLY load these 2 files**, not entire .specweave/docs/ folder!
|
|
186
|
+
|
|
187
|
+
**Why?**
|
|
188
|
+
- Full specs: 500+ pages (50k tokens)
|
|
189
|
+
- Manifest files: 50 pages (5k tokens)
|
|
190
|
+
- Savings: 90% = 45k tokens saved!
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Comparison: Cursor vs Claude Code
|
|
194
|
+
|
|
195
|
+
| Feature | Claude Code | Cursor |
|
|
196
|
+
|---------|-------------|--------|
|
|
197
|
+
| **Skills** | Native auto-activation | Simulated via .cursorrules |
|
|
198
|
+
| **Agents** | Separate context windows | Manual role adoption |
|
|
199
|
+
| **Hooks** | Auto-execute on events | Not available |
|
|
200
|
+
| **Commands** | Native slash commands | Workflow instructions |
|
|
201
|
+
| **Context** | MCP protocol | Manual loading via @ shortcuts |
|
|
202
|
+
| **File Access** | Native tools | Native (Composer) |
|
|
203
|
+
| **Automation** | Full | Semi |
|
|
204
|
+
|
|
205
|
+
**Cursor = Good experience** (70-80% of Claude Code's capabilities)
|
|
206
|
+
|
|
207
|
+
## Limitations
|
|
208
|
+
|
|
209
|
+
❌ **No auto-activation** - Must explicitly request workflows
|
|
210
|
+
❌ **No separate context windows** - All context shared
|
|
211
|
+
❌ **No hooks** - Can't auto-update docs on events
|
|
212
|
+
⚠️ **Manual role adoption** - Must say "act as PM"
|
|
213
|
+
|
|
214
|
+
✅ **But Composer + @ shortcuts provide great UX!**
|
|
215
|
+
|
|
216
|
+
## Tips & Tricks
|
|
217
|
+
|
|
218
|
+
### 1. Always Mention Context-Manifest
|
|
219
|
+
"Read context-manifest.yaml and load only files listed there"
|
|
220
|
+
|
|
221
|
+
### 2. Be Explicit About Roles
|
|
222
|
+
"Act as PM agent and create spec" (not just "create spec")
|
|
223
|
+
|
|
224
|
+
### 3. Use @ Shortcuts
|
|
225
|
+
Faster than typing full file paths
|
|
226
|
+
|
|
227
|
+
### 4. Use Composer for Multi-File Edits
|
|
228
|
+
Cmd+I → Edit multiple files at once
|
|
229
|
+
|
|
230
|
+
### 5. Reference .cursorrules
|
|
231
|
+
If Cursor forgets workflow: "Follow the workflow in .cursorrules"
|
|
232
|
+
|
|
233
|
+
## Related Documentation
|
|
234
|
+
|
|
235
|
+
- [SPECWEAVE.md](../../SPECWEAVE.md) - Complete development guide
|
|
236
|
+
- [.cursorrules](.cursorrules) - Cursor workflow instructions (READ THIS!)
|
|
237
|
+
- [Adapter Architecture](../README.md) - Multi-tool design philosophy
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
**Status**: Active (v0.2.0-beta.1+)
|
|
242
|
+
**Market Share**: ~30% (Cursor users)
|
|
243
|
+
**Priority**: P1 (high impact adapter)
|