fraim-framework 2.0.55 → 2.0.57

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 (120) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/src/cli/commands/init-project.js +10 -4
  3. package/dist/src/cli/setup/mcp-config-generator.js +23 -15
  4. package/dist/src/local-mcp-server/stdio-server.js +207 -0
  5. package/dist/src/utils/validate-workflows.js +101 -0
  6. package/dist/src/utils/workflow-parser.js +81 -0
  7. package/package.json +16 -11
  8. package/registry/scripts/pdf-styles.css +172 -0
  9. package/registry/scripts/prep-issue.sh +46 -4
  10. package/registry/scripts/profile-server.ts +131 -130
  11. package/registry/stubs/workflows/customer-development/user-survey-dispatch.md +1 -1
  12. package/registry/stubs/workflows/customer-development/users-to-target.md +1 -1
  13. package/registry/stubs/workflows/product-building/design.md +1 -1
  14. package/registry/stubs/workflows/product-building/implement.md +1 -1
  15. package/Claude.md +0 -1
  16. package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
  17. package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
  18. package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
  19. package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
  20. package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
  21. package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
  22. package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
  23. package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
  24. package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
  25. package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
  26. package/dist/registry/ai-manager-rules/retrospective.md +0 -116
  27. package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
  28. package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
  29. package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
  30. package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
  31. package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
  32. package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
  33. package/dist/registry/providers/ado.json +0 -19
  34. package/dist/registry/providers/github.json +0 -19
  35. package/dist/registry/scripts/cleanup-branch.js +0 -287
  36. package/dist/registry/scripts/evaluate-code-quality.js +0 -66
  37. package/dist/registry/scripts/exec-with-timeout.js +0 -142
  38. package/dist/registry/scripts/generate-engagement-emails.js +0 -705
  39. package/dist/registry/scripts/newsletter-helpers.js +0 -671
  40. package/dist/registry/scripts/profile-server.js +0 -388
  41. package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
  42. package/dist/registry/scripts/send-newsletter-simple.js +0 -85
  43. package/dist/registry/scripts/send-thank-you-emails.js +0 -54
  44. package/dist/registry/scripts/validate-openapi-limits.js +0 -311
  45. package/dist/registry/scripts/validate-test-coverage.js +0 -262
  46. package/dist/registry/scripts/verify-test-coverage.js +0 -66
  47. package/dist/scripts/build-stub-registry.js +0 -108
  48. package/dist/src/ai-manager/ai-manager.js +0 -482
  49. package/dist/src/ai-manager/phase-flow.js +0 -357
  50. package/dist/src/ai-manager/types.js +0 -5
  51. package/dist/src/fraim-mcp-server.js +0 -1885
  52. package/dist/tests/debug-tools.js +0 -80
  53. package/dist/tests/shared-server-utils.js +0 -57
  54. package/dist/tests/test-add-ide.js +0 -283
  55. package/dist/tests/test-ai-coach-edge-cases.js +0 -420
  56. package/dist/tests/test-ai-coach-mcp-integration.js +0 -450
  57. package/dist/tests/test-ai-coach-performance.js +0 -328
  58. package/dist/tests/test-ai-coach-phase-content.js +0 -264
  59. package/dist/tests/test-ai-coach-workflows.js +0 -514
  60. package/dist/tests/test-cli.js +0 -228
  61. package/dist/tests/test-client-scripts-validation.js +0 -167
  62. package/dist/tests/test-complete-setup-flow.js +0 -110
  63. package/dist/tests/test-config-system.js +0 -279
  64. package/dist/tests/test-debug-session.js +0 -134
  65. package/dist/tests/test-end-to-end-hybrid-validation.js +0 -328
  66. package/dist/tests/test-enhanced-session-init.js +0 -188
  67. package/dist/tests/test-first-run-journey.js +0 -368
  68. package/dist/tests/test-fraim-issues.js +0 -59
  69. package/dist/tests/test-genericization.js +0 -44
  70. package/dist/tests/test-hybrid-script-execution.js +0 -340
  71. package/dist/tests/test-ide-detector.js +0 -46
  72. package/dist/tests/test-improved-setup.js +0 -121
  73. package/dist/tests/test-mcp-config-generator.js +0 -99
  74. package/dist/tests/test-mcp-connection.js +0 -107
  75. package/dist/tests/test-mcp-issue-integration.js +0 -156
  76. package/dist/tests/test-mcp-lifecycle-methods.js +0 -240
  77. package/dist/tests/test-mcp-shared-server.js +0 -308
  78. package/dist/tests/test-mcp-template-processing.js +0 -160
  79. package/dist/tests/test-modular-issue-tracking.js +0 -165
  80. package/dist/tests/test-node-compatibility.js +0 -95
  81. package/dist/tests/test-npm-install.js +0 -68
  82. package/dist/tests/test-package-size.js +0 -108
  83. package/dist/tests/test-pr-review-workflow.js +0 -307
  84. package/dist/tests/test-prep-issue.js +0 -129
  85. package/dist/tests/test-productivity-integration.js +0 -157
  86. package/dist/tests/test-script-location-independence.js +0 -198
  87. package/dist/tests/test-script-sync.js +0 -557
  88. package/dist/tests/test-server-utils.js +0 -32
  89. package/dist/tests/test-session-rehydration.js +0 -148
  90. package/dist/tests/test-setup-integration.js +0 -98
  91. package/dist/tests/test-setup-scenarios.js +0 -322
  92. package/dist/tests/test-standalone.js +0 -143
  93. package/dist/tests/test-stub-registry.js +0 -136
  94. package/dist/tests/test-sync-stubs.js +0 -143
  95. package/dist/tests/test-sync-version-update.js +0 -93
  96. package/dist/tests/test-telemetry.js +0 -193
  97. package/dist/tests/test-token-validator.js +0 -30
  98. package/dist/tests/test-user-journey.js +0 -236
  99. package/dist/tests/test-users-to-target-workflow.js +0 -253
  100. package/dist/tests/test-utils.js +0 -109
  101. package/dist/tests/test-wizard.js +0 -71
  102. package/dist/tests/test-workflow-discovery.js +0 -242
  103. package/labels.json +0 -52
  104. package/registry/agent-guardrails.md +0 -63
  105. package/registry/fraim.md +0 -48
  106. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-customer-profiling.md +0 -11
  107. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase1-survey-scoping.md +0 -11
  108. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-platform-discovery.md +0 -11
  109. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase2-survey-build-linkedin.md +0 -11
  110. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-prospect-qualification.md +0 -11
  111. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase3-survey-build-reddit.md +0 -11
  112. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-inventory-compilation.md +0 -11
  113. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase4-survey-build-x.md +0 -11
  114. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase5-survey-build-facebook.md +0 -11
  115. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase6-survey-build-custom.md +0 -11
  116. package/registry/stubs/workflows/customer-development/ai-coach-phases/phase7-survey-dispatch.md +0 -11
  117. package/registry/stubs/workflows/customer-development/templates/customer-persona-template.md +0 -11
  118. package/registry/stubs/workflows/customer-development/templates/search-strategy-template.md +0 -11
  119. package/setup.js +0 -171
  120. package/tsconfig.json +0 -23
@@ -1,242 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tests for dynamic workflow discovery in MCP server
4
- * Ensures workflows from all categories can be found without hardcoded category lists
5
- */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const node_test_1 = require("node:test");
11
- const node_assert_1 = __importDefault(require("node:assert"));
12
- const shared_server_utils_js_1 = require("./shared-server-utils.js");
13
- (0, node_test_1.describe)('Workflow Discovery', () => {
14
- (0, node_test_1.before)(async () => {
15
- // Wait for the test server to be ready
16
- await (0, shared_server_utils_js_1.waitForServer)();
17
- });
18
- (0, node_test_1.describe)('Dynamic Category Discovery', () => {
19
- (0, node_test_1.it)('should find workflows from product-building category', async () => {
20
- const axios = require('axios');
21
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
22
- jsonrpc: '2.0',
23
- id: 1,
24
- method: 'tools/call',
25
- params: {
26
- name: 'get_fraim_workflow',
27
- arguments: { workflow: 'spec' }
28
- }
29
- });
30
- node_assert_1.default.strictEqual(response.status, 200);
31
- node_assert_1.default.ok(response.data.result);
32
- node_assert_1.default.ok(response.data.result.content);
33
- node_assert_1.default.ok(Array.isArray(response.data.result.content));
34
- const content = response.data.result.content[0];
35
- node_assert_1.default.strictEqual(content.type, 'text');
36
- node_assert_1.default.ok(content.text.includes('Workflow: spec'));
37
- node_assert_1.default.ok(content.text.includes('workflows/product-building/spec.md'));
38
- });
39
- (0, node_test_1.it)('should find workflows from compliance category', async () => {
40
- const axios = require('axios');
41
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
42
- jsonrpc: '2.0',
43
- id: 2,
44
- method: 'tools/call',
45
- params: {
46
- name: 'get_fraim_workflow',
47
- arguments: { workflow: 'detect-compliance-requirements' }
48
- }
49
- });
50
- node_assert_1.default.strictEqual(response.status, 200);
51
- node_assert_1.default.ok(response.data.result);
52
- node_assert_1.default.ok(response.data.result.content);
53
- const content = response.data.result.content[0];
54
- node_assert_1.default.strictEqual(content.type, 'text');
55
- node_assert_1.default.ok(content.text.includes('Workflow: detect-compliance-requirements'));
56
- node_assert_1.default.ok(content.text.includes('workflows/compliance/detect-compliance-requirements.md'));
57
- node_assert_1.default.ok(content.text.includes('Detect Compliance Requirements'));
58
- });
59
- (0, node_test_1.it)('should find workflows from brainstorming category', async () => {
60
- const axios = require('axios');
61
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
62
- jsonrpc: '2.0',
63
- id: 3,
64
- method: 'tools/call',
65
- params: {
66
- name: 'get_fraim_workflow',
67
- arguments: { workflow: 'blue-sky-brainstorming' }
68
- }
69
- });
70
- node_assert_1.default.strictEqual(response.status, 200);
71
- node_assert_1.default.ok(response.data.result);
72
- node_assert_1.default.ok(response.data.result.content);
73
- const content = response.data.result.content[0];
74
- node_assert_1.default.strictEqual(content.type, 'text');
75
- node_assert_1.default.ok(content.text.includes('Workflow: blue-sky-brainstorming'));
76
- node_assert_1.default.ok(content.text.includes('workflows/brainstorming/blue-sky-brainstorming.md'));
77
- });
78
- (0, node_test_1.it)('should find workflows from learning category', async () => {
79
- const axios = require('axios');
80
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
81
- jsonrpc: '2.0',
82
- id: 4,
83
- method: 'tools/call',
84
- params: {
85
- name: 'get_fraim_workflow',
86
- arguments: { workflow: 'synthesize-learnings' }
87
- }
88
- });
89
- node_assert_1.default.strictEqual(response.status, 200);
90
- node_assert_1.default.ok(response.data.result);
91
- node_assert_1.default.ok(response.data.result.content);
92
- const content = response.data.result.content[0];
93
- node_assert_1.default.strictEqual(content.type, 'text');
94
- node_assert_1.default.ok(content.text.includes('Workflow: synthesize-learnings'));
95
- node_assert_1.default.ok(content.text.includes('workflows/learning/synthesize-learnings.md'));
96
- });
97
- (0, node_test_1.it)('should find workflows from replicate category', async () => {
98
- const axios = require('axios');
99
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
100
- jsonrpc: '2.0',
101
- id: 5,
102
- method: 'tools/call',
103
- params: {
104
- name: 'get_fraim_workflow',
105
- arguments: { workflow: 'replicate-discovery' }
106
- }
107
- });
108
- node_assert_1.default.strictEqual(response.status, 200);
109
- node_assert_1.default.ok(response.data.result);
110
- node_assert_1.default.ok(response.data.result.content);
111
- const content = response.data.result.content[0];
112
- node_assert_1.default.strictEqual(content.type, 'text');
113
- node_assert_1.default.ok(content.text.includes('Workflow: replicate-discovery'));
114
- node_assert_1.default.ok(content.text.includes('workflows/replicate/replicate-discovery.md'));
115
- });
116
- (0, node_test_1.it)('should find workflows from marketing category', async () => {
117
- const axios = require('axios');
118
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
119
- jsonrpc: '2.0',
120
- id: 6,
121
- method: 'tools/call',
122
- params: {
123
- name: 'get_fraim_workflow',
124
- arguments: { workflow: 'create-modern-website' }
125
- }
126
- });
127
- node_assert_1.default.strictEqual(response.status, 200);
128
- node_assert_1.default.ok(response.data.result);
129
- node_assert_1.default.ok(response.data.result.content);
130
- const content = response.data.result.content[0];
131
- node_assert_1.default.strictEqual(content.type, 'text');
132
- node_assert_1.default.ok(content.text.includes('Workflow: create-modern-website'));
133
- node_assert_1.default.ok(content.text.includes('workflows/marketing/create-modern-website.md'));
134
- });
135
- });
136
- (0, node_test_1.describe)('Error Handling', () => {
137
- (0, node_test_1.it)('should return helpful error for non-existent workflow', async () => {
138
- const axios = require('axios');
139
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
140
- jsonrpc: '2.0',
141
- id: 7,
142
- method: 'tools/call',
143
- params: {
144
- name: 'get_fraim_workflow',
145
- arguments: { workflow: 'non-existent-workflow' }
146
- }
147
- });
148
- node_assert_1.default.strictEqual(response.status, 200);
149
- node_assert_1.default.ok(response.data.result);
150
- node_assert_1.default.ok(response.data.result.content);
151
- const content = response.data.result.content[0];
152
- node_assert_1.default.strictEqual(content.type, 'text');
153
- node_assert_1.default.ok(content.text.includes('Workflow "non-existent-workflow" not found'));
154
- node_assert_1.default.ok(content.text.includes('Available workflows:'));
155
- });
156
- (0, node_test_1.it)('should handle workflow names with .md extension', async () => {
157
- const axios = require('axios');
158
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
159
- jsonrpc: '2.0',
160
- id: 8,
161
- method: 'tools/call',
162
- params: {
163
- name: 'get_fraim_workflow',
164
- arguments: { workflow: 'spec.md' }
165
- }
166
- });
167
- node_assert_1.default.strictEqual(response.status, 200);
168
- node_assert_1.default.ok(response.data.result);
169
- node_assert_1.default.ok(response.data.result.content);
170
- const content = response.data.result.content[0];
171
- node_assert_1.default.strictEqual(content.type, 'text');
172
- node_assert_1.default.ok(content.text.includes('Workflow: spec'));
173
- node_assert_1.default.ok(content.text.includes('workflows/product-building/spec.md'));
174
- });
175
- });
176
- (0, node_test_1.describe)('Regression Prevention', () => {
177
- (0, node_test_1.it)('should discover all workflow categories dynamically', async () => {
178
- const axios = require('axios');
179
- // Test that we can find workflows from multiple categories without hardcoding
180
- const testCases = [
181
- { workflow: 'spec', expectedCategory: 'product-building' },
182
- { workflow: 'detect-compliance-requirements', expectedCategory: 'compliance' },
183
- { workflow: 'blue-sky-brainstorming', expectedCategory: 'brainstorming' },
184
- { workflow: 'synthesize-learnings', expectedCategory: 'learning' },
185
- { workflow: 'replicate-discovery', expectedCategory: 'replicate' },
186
- { workflow: 'create-modern-website', expectedCategory: 'marketing' }
187
- ];
188
- for (const testCase of testCases) {
189
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
190
- jsonrpc: '2.0',
191
- id: 100 + testCases.indexOf(testCase),
192
- method: 'tools/call',
193
- params: {
194
- name: 'get_fraim_workflow',
195
- arguments: { workflow: testCase.workflow }
196
- }
197
- });
198
- node_assert_1.default.strictEqual(response.status, 200, `Failed to find workflow: ${testCase.workflow}`);
199
- node_assert_1.default.ok(response.data.result, `No result for workflow: ${testCase.workflow}`);
200
- node_assert_1.default.ok(response.data.result.content, `No content for workflow: ${testCase.workflow}`);
201
- const content = response.data.result.content[0];
202
- node_assert_1.default.strictEqual(content.type, 'text');
203
- node_assert_1.default.ok(content.text.includes(`workflows/${testCase.expectedCategory}/${testCase.workflow}.md`), `Expected workflow ${testCase.workflow} to be found in category ${testCase.expectedCategory}, but got: ${content.text.substring(0, 200)}`);
204
- }
205
- });
206
- (0, node_test_1.it)('should not fail when new categories are added', async () => {
207
- // This test documents the expected behavior:
208
- // When new workflow categories are added to the registry,
209
- // they should be automatically discoverable without code changes
210
- const axios = require('axios');
211
- // Get list of all workflows to verify dynamic discovery is working
212
- const response = await axios.post((0, shared_server_utils_js_1.getMcpEndpoint)(), {
213
- jsonrpc: '2.0',
214
- id: 200,
215
- method: 'tools/call',
216
- params: {
217
- name: 'list_fraim_workflows'
218
- }
219
- });
220
- node_assert_1.default.strictEqual(response.status, 200);
221
- node_assert_1.default.ok(response.data.result);
222
- node_assert_1.default.ok(response.data.result.content);
223
- const content = response.data.result.content[0];
224
- node_assert_1.default.strictEqual(content.type, 'text');
225
- // Verify that multiple categories are listed
226
- const expectedCategories = [
227
- 'bootstrap',
228
- 'brainstorming',
229
- 'business-development',
230
- 'compliance',
231
- 'customer-development',
232
- 'learning',
233
- 'marketing',
234
- 'product-building',
235
- 'replicate'
236
- ];
237
- for (const category of expectedCategories) {
238
- node_assert_1.default.ok(content.text.includes(category), `Expected category "${category}" to be listed in workflows, but got: ${content.text.substring(0, 500)}`);
239
- }
240
- });
241
- });
242
- });
package/labels.json DELETED
@@ -1,52 +0,0 @@
1
- [
2
- {
3
- "name": "phase:spec",
4
- "color": "008672",
5
- "description": "Specification creation phase"
6
- },
7
- {
8
- "name": "phase:design",
9
- "color": "0075ca",
10
- "description": "Design and RFC creation phase"
11
- },
12
- {
13
- "name": "phase:impl",
14
- "color": "7057ff",
15
- "description": "Implementation and development phase"
16
- },
17
- {
18
- "name": "phase:tests",
19
- "color": "008672",
20
- "description": "Testing and validation phase"
21
- },
22
- {
23
- "name": "status:wip",
24
- "color": "fbca04",
25
- "description": "Work in progress"
26
- },
27
- {
28
- "name": "status:needs-review",
29
- "color": "fbca04",
30
- "description": "Ready for review"
31
- },
32
- {
33
- "name": "status:complete",
34
- "color": "0e8a16",
35
- "description": "Work completed"
36
- },
37
- {
38
- "name": "ai-agent:cursor",
39
- "color": "c5def5",
40
- "description": "Assigned to Cursor"
41
- },
42
- {
43
- "name": "ai-agent:claude",
44
- "color": "c5def5",
45
- "description": "Assigned to Claude"
46
- },
47
- {
48
- "name": "ai-agent:windsurf",
49
- "color": "c5def5",
50
- "description": "Assigned to Windsurf"
51
- }
52
- ]
@@ -1,63 +0,0 @@
1
- # AI Agent Guardrails
2
-
3
- This file references the centralized rules located in `rules/` to ensure consistency across all AI platforms.
4
-
5
- ## SUCCESS CRITERIA (THE "FRAIM 5")
6
- **Source**: Retrieve via `get_fraim_file({ path: "rules/agent-success-criteria.md" })`
7
-
8
- All agents are evaluated on:
9
- 1. **Integrity (100 pts)**: Honesty above all.
10
- 2. **Correctness (50 pts)**: Architecture & tests.
11
- 3. **Completeness (30 pts)**: Thoroughness.
12
- 4. **Independence (20 pts)**: Smart decisions.
13
- 5. **Speed (10 pts)**: Velocity.
14
-
15
- ## Referenced Rules
16
-
17
- ### 0. Integrity
18
- **Source**: Retrieve via `get_fraim_file({ path: "rules/integrity-and-test-ethics.md" })`
19
-
20
- THIS IS THE MOST CRITICAL RULE. Be ethical, truthful, honest above all.
21
-
22
- ### 1. Simplicity
23
- **Source**: Retrieve via `get_fraim_file({ path: "rules/simplicity.md" })`
24
-
25
- Keep solutions simple and focused, avoid over-engineering. Focus on the assigned issue only and don't make unrelated changes.
26
-
27
- ### 2. Communication
28
- **Source**: Retrieve via `get_fraim_file({ path: "rules/communication.md" })`
29
-
30
- Establish clear communication patterns and progress reporting standards for effective coordination between agents and stakeholders.
31
-
32
- ### 3. Architecture
33
- **Source**: Read local architecture document (path from `.fraim/config.json` `customizations.architectureDoc`)
34
-
35
- Maintain clean architectural boundaries by using BAML (LLM) for natural-language understanding and TypeScript for deterministic work.
36
-
37
- ### 4. Continuous Learning
38
- **Source**: Retrieve via `get_fraim_file({ path: "rules/continuous-learning.md" })`
39
-
40
- Prevent repeating past mistakes by systematically learning from retrospectives, RFCs, and historical issue patterns.
41
-
42
- ### 5. Agent Testing Guidelines
43
- **Source**: Retrieve via `get_fraim_file({ path: "rules/agent-testing-guidelines.md" })`
44
-
45
- Comprehensive testing and validation requirements with concrete evidence. Ensures all work is thoroughly validated before completion.
46
-
47
- ### 6. Local Development
48
- **Source**: Retrieve via `get_fraim_file({ path: "rules/local-development.md" })`
49
-
50
- Local development guidelines and workspace safety. Enables safe parallel development through strict workspace separation.
51
-
52
- ### 7. Software Development Lifecycle
53
- **Source**: Retrieve via `get_fraim_file({ path: "rules/software-development-lifecycle.md" })`
54
-
55
- ### 9. Merge Requirements
56
- **Source**: Retrieve via `get_fraim_file({ path: "rules/merge-requirements.md" })`
57
-
58
- Enforces a strict `git rebase` workflow to ensure feature branches are up-to-date with `master` before merging, maintaining a clean and stable history.
59
-
60
- ### 10. Best practices while debuggin
61
- **Source**: Retrieve via `get_fraim_file({ path: "rules/successful-debugging-patterns.md" })`
62
-
63
- Patterns on debugging issues systematically and converting learnings into test cases
package/registry/fraim.md DELETED
@@ -1,48 +0,0 @@
1
- # FRAIM - Agent Instructions
2
-
3
- ## What is FRAIM?
4
-
5
- FRAIM provides workflows, rules, templates, and scripts for AI agents. Use it to get structured guidance for development and customer development tasks.
6
-
7
- ## How to Use FRAIM
8
-
9
- ### 1. Initialize First
10
- **Always call `@fraim_mcp init` at the start of your session.** This loads all rules and available workflows.
11
-
12
- ### 2. Get Workflows
13
- Use `@fraim_mcp` with a natural language description:
14
- - `@fraim_mcp write a spec for issue #631`
15
- - `@fraim_mcp design a new feature`
16
- - `@fraim_mcp implement a bug fix`
17
- - `@fraim_mcp write tests`
18
-
19
- FRAIM returns a complete package:
20
- - Workflow file with step-by-step instructions
21
- - Templates to fill out
22
- - Scripts to run
23
- - Rules you must follow
24
-
25
- ### 3. Follow the Package
26
- 1. Read the workflow file
27
- 2. Use the provided templates (don't create from scratch)
28
- 3. Run the provided scripts
29
- 4. Follow all rules (they are mandatory)
30
-
31
- ## Available Tools
32
-
33
- - `@fraim_mcp init` - Initialize and get all rules
34
- - `@fraim_mcp <workflow description>` - Get workflow package
35
- - `@fraim_mcp get <path>` - Get specific file (e.g., `workflows/spec.md`)
36
- - `@fraim_mcp list files` - Browse available files
37
- - `@fraim_mcp search <keyword>` - Find content by keyword
38
-
39
- ## Key Rules (All Active)
40
-
41
- - **Integrity**: Be ethical, truthful, honest
42
- - **Simplicity**: Keep solutions simple, avoid over-engineering
43
- - **Communication**: Provide clear progress updates
44
- - **Testing**: Comprehensive testing requirements (see agent-testing-guidelines.md)
45
- - **Code Quality**: Never use `as any`, follow debugging patterns
46
- - **PR Workflow**: Complete PR lifecycle handling
47
-
48
- **All rules are mandatory. Read them carefully when provided in workflow packages.**
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase1-customer-profiling
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase1-customer-profiling")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase1-survey-scoping
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase1-survey-scoping")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase2-platform-discovery
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase2-platform-discovery")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase2-survey-build-linkedin
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase2-survey-build-linkedin")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase3-prospect-qualification
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase3-prospect-qualification")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase3-survey-build-reddit
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase3-survey-build-reddit")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase4-inventory-compilation
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase4-inventory-compilation")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase4-survey-build-x
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase4-survey-build-x")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase5-survey-build-facebook
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase5-survey-build-facebook")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase6-survey-build-custom
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase6-survey-build-custom")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: phase7-survey-dispatch
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("phase7-survey-dispatch")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: customer-persona-template
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("customer-persona-template")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.
@@ -1,11 +0,0 @@
1
- # FRAIM Workflow: search-strategy-template
2
-
3
- > [!IMPORTANT]
4
- > This is a **FRAIM-managed workflow stub**.
5
- > To load the full context (rules, templates, and execution steps), ask your AI agent to:
6
- > `@fraim get_fraim_workflow("search-strategy-template")`
7
- >
8
- > DO NOT EXECUTE.
9
-
10
- ## Intent
11
- No intent defined.