bros-harness 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/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +183 -0
- package/SECURITY.md +16 -0
- package/assets/agents.manifest.json +55 -0
- package/assets/commands.manifest.json +35 -0
- package/assets/docs.manifest.json +20 -0
- package/assets/import-report.md +25 -0
- package/assets/manifest.json +799 -0
- package/assets/opencode/agents/README.md +3 -0
- package/assets/opencode/agents/bro-build.md +256 -0
- package/assets/opencode/agents/bro-design.md +77 -0
- package/assets/opencode/agents/bro-docs.md +72 -0
- package/assets/opencode/agents/bro-explore.md +143 -0
- package/assets/opencode/agents/bro-ops.md +195 -0
- package/assets/opencode/agents/bro-shield.md +77 -0
- package/assets/opencode/agents/bro-test.md +204 -0
- package/assets/opencode/agents/bro-ui.md +135 -0
- package/assets/opencode/agents/mighty-bro.md +252 -0
- package/assets/opencode/commands/README.md +3 -0
- package/assets/opencode/commands/bros-assemble.md +32 -0
- package/assets/opencode/commands/bros-build.md +58 -0
- package/assets/opencode/commands/bros-plan.md +83 -0
- package/assets/opencode/commands/bros-review.md +38 -0
- package/assets/opencode/commands/bros-status.md +26 -0
- package/assets/opencode/docs/README.md +3 -0
- package/assets/opencode/docs/bros-builtin-skills.md +63 -0
- package/assets/opencode/docs/bros-harness.md +194 -0
- package/assets/opencode/skills/README.md +3 -0
- package/assets/opencode/skills/agent-architecture-audit/SKILL.md +256 -0
- package/assets/opencode/skills/agent-harness-construction/.openskills.json +7 -0
- package/assets/opencode/skills/agent-harness-construction/SKILL.md +73 -0
- package/assets/opencode/skills/agent-introspection-debugging/.openskills.json +7 -0
- package/assets/opencode/skills/agent-introspection-debugging/SKILL.md +153 -0
- package/assets/opencode/skills/api-design/.openskills.json +7 -0
- package/assets/opencode/skills/api-design/agents/openai.yaml +7 -0
- package/assets/opencode/skills/architecture-decision-records/.openskills.json +7 -0
- package/assets/opencode/skills/architecture-decision-records/SKILL.md +179 -0
- package/assets/opencode/skills/article-writing/.openskills.json +7 -0
- package/assets/opencode/skills/article-writing/SKILL.md +79 -0
- package/assets/opencode/skills/article-writing/agents/openai.yaml +7 -0
- package/assets/opencode/skills/automation-audit-ops/.openskills.json +7 -0
- package/assets/opencode/skills/automation-audit-ops/SKILL.md +142 -0
- package/assets/opencode/skills/backend-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/backend-patterns/SKILL.md +561 -0
- package/assets/opencode/skills/backend-patterns/agents/openai.yaml +7 -0
- package/assets/opencode/skills/benchmark/.openskills.json +7 -0
- package/assets/opencode/skills/benchmark/SKILL.md +93 -0
- package/assets/opencode/skills/bros-orchestrate/SKILL.md +455 -0
- package/assets/opencode/skills/browser-qa/.openskills.json +7 -0
- package/assets/opencode/skills/browser-qa/SKILL.md +87 -0
- package/assets/opencode/skills/canary-watch/.openskills.json +7 -0
- package/assets/opencode/skills/canary-watch/SKILL.md +107 -0
- package/assets/opencode/skills/code-review-expert/SKILL.md +155 -0
- package/assets/opencode/skills/code-review-expert/agents/agent.yaml +7 -0
- package/assets/opencode/skills/code-review-expert/references/code-quality-checklist.md +130 -0
- package/assets/opencode/skills/code-review-expert/references/removal-plan.md +52 -0
- package/assets/opencode/skills/code-review-expert/references/security-checklist.md +118 -0
- package/assets/opencode/skills/code-review-expert/references/solid-checklist.md +65 -0
- package/assets/opencode/skills/code-tour/.openskills.json +7 -0
- package/assets/opencode/skills/code-tour/SKILL.md +236 -0
- package/assets/opencode/skills/coding-standards/.openskills.json +7 -0
- package/assets/opencode/skills/coding-standards/SKILL.md +549 -0
- package/assets/opencode/skills/coding-standards/agents/openai.yaml +7 -0
- package/assets/opencode/skills/context-budget/.openskills.json +7 -0
- package/assets/opencode/skills/context-budget/SKILL.md +135 -0
- package/assets/opencode/skills/database-migrations/.openskills.json +7 -0
- package/assets/opencode/skills/database-migrations/SKILL.md +429 -0
- package/assets/opencode/skills/deployment-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/deployment-patterns/SKILL.md +427 -0
- package/assets/opencode/skills/design-system/.openskills.json +7 -0
- package/assets/opencode/skills/design-system/SKILL.md +82 -0
- package/assets/opencode/skills/docker-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/docker-patterns/SKILL.md +364 -0
- package/assets/opencode/skills/documentation-lookup/.openskills.json +7 -0
- package/assets/opencode/skills/documentation-lookup/SKILL.md +90 -0
- package/assets/opencode/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/assets/opencode/skills/e2e-testing/.openskills.json +7 -0
- package/assets/opencode/skills/e2e-testing/SKILL.md +326 -0
- package/assets/opencode/skills/e2e-testing/agents/openai.yaml +7 -0
- package/assets/opencode/skills/error-handling/SKILL.md +376 -0
- package/assets/opencode/skills/frontend-design/.openskills.json +7 -0
- package/assets/opencode/skills/frontend-design/SKILL.md +145 -0
- package/assets/opencode/skills/frontend-design-direction/SKILL.md +92 -0
- package/assets/opencode/skills/frontend-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/frontend-patterns/SKILL.md +642 -0
- package/assets/opencode/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/assets/opencode/skills/gateguard/.openskills.json +7 -0
- package/assets/opencode/skills/gateguard/SKILL.md +125 -0
- package/assets/opencode/skills/git-master/SKILL.md +60 -0
- package/assets/opencode/skills/golang-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/golang-patterns/SKILL.md +674 -0
- package/assets/opencode/skills/golang-testing/.openskills.json +7 -0
- package/assets/opencode/skills/golang-testing/SKILL.md +720 -0
- package/assets/opencode/skills/grafana-dashboard-design/SKILL.md +65 -0
- package/assets/opencode/skills/hexagonal-architecture/.openskills.json +7 -0
- package/assets/opencode/skills/hexagonal-architecture/SKILL.md +276 -0
- package/assets/opencode/skills/java-coding-standards/.openskills.json +7 -0
- package/assets/opencode/skills/java-coding-standards/SKILL.md +383 -0
- package/assets/opencode/skills/jpa-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/jpa-patterns/SKILL.md +151 -0
- package/assets/opencode/skills/knowledge-ops/.openskills.json +7 -0
- package/assets/opencode/skills/knowledge-ops/SKILL.md +154 -0
- package/assets/opencode/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/assets/opencode/skills/mysql-patterns/SKILL.md +412 -0
- package/assets/opencode/skills/nestjs-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/nestjs-patterns/SKILL.md +230 -0
- package/assets/opencode/skills/nextjs-turbopack/.openskills.json +7 -0
- package/assets/opencode/skills/nextjs-turbopack/SKILL.md +57 -0
- package/assets/opencode/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/assets/opencode/skills/parallel-execution-optimizer/SKILL.md +72 -0
- package/assets/opencode/skills/postgres-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/postgres-patterns/SKILL.md +147 -0
- package/assets/opencode/skills/prisma-patterns/SKILL.md +371 -0
- package/assets/opencode/skills/product-capability/.openskills.json +7 -0
- package/assets/opencode/skills/product-capability/SKILL.md +141 -0
- package/assets/opencode/skills/product-lens/.openskills.json +7 -0
- package/assets/opencode/skills/product-lens/SKILL.md +92 -0
- package/assets/opencode/skills/production-audit/SKILL.md +206 -0
- package/assets/opencode/skills/python-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/python-patterns/SKILL.md +750 -0
- package/assets/opencode/skills/python-testing/.openskills.json +7 -0
- package/assets/opencode/skills/python-testing/SKILL.md +816 -0
- package/assets/opencode/skills/redis-patterns/SKILL.md +403 -0
- package/assets/opencode/skills/requirements-clarity/README.md +260 -0
- package/assets/opencode/skills/requirements-clarity/SKILL.md +324 -0
- package/assets/opencode/skills/rust-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/rust-patterns/SKILL.md +499 -0
- package/assets/opencode/skills/rust-testing/.openskills.json +7 -0
- package/assets/opencode/skills/rust-testing/SKILL.md +500 -0
- package/assets/opencode/skills/safety-guard/.openskills.json +7 -0
- package/assets/opencode/skills/safety-guard/SKILL.md +75 -0
- package/assets/opencode/skills/search-first/.openskills.json +7 -0
- package/assets/opencode/skills/search-first/SKILL.md +181 -0
- package/assets/opencode/skills/security-review/.openskills.json +7 -0
- package/assets/opencode/skills/security-review/agents/openai.yaml +7 -0
- package/assets/opencode/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/assets/opencode/skills/security-scan/.openskills.json +7 -0
- package/assets/opencode/skills/security-scan/SKILL.md +165 -0
- package/assets/opencode/skills/springboot-patterns/.openskills.json +7 -0
- package/assets/opencode/skills/springboot-patterns/SKILL.md +314 -0
- package/assets/opencode/skills/springboot-tdd/.openskills.json +7 -0
- package/assets/opencode/skills/springboot-tdd/SKILL.md +158 -0
- package/assets/opencode/skills/springboot-verification/.openskills.json +7 -0
- package/assets/opencode/skills/springboot-verification/SKILL.md +231 -0
- package/assets/opencode/skills/strategic-compact/.openskills.json +7 -0
- package/assets/opencode/skills/strategic-compact/SKILL.md +131 -0
- package/assets/opencode/skills/strategic-compact/agents/openai.yaml +7 -0
- package/assets/opencode/skills/strategic-compact/suggest-compact.sh +54 -0
- package/assets/opencode/skills/tdd-workflow/.openskills.json +7 -0
- package/assets/opencode/skills/tdd-workflow/SKILL.md +463 -0
- package/assets/opencode/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/assets/opencode/skills/verification-loop/.openskills.json +7 -0
- package/assets/opencode/skills/verification-loop/SKILL.md +126 -0
- package/assets/opencode/skills/verification-loop/agents/openai.yaml +7 -0
- package/assets/opencode/skills/vite-patterns/SKILL.md +449 -0
- package/assets/opencode/skills/web-doc-search/SKILL.md +51 -0
- package/assets/opencode/templates/README.md +3 -0
- package/assets/opencode/templates/bros/adr.md +39 -0
- package/assets/opencode/templates/bros/delivery-report.md +71 -0
- package/assets/opencode/templates/bros/explorer-evidence-packet.md +51 -0
- package/assets/opencode/templates/bros/prd.md +72 -0
- package/assets/opencode/templates/bros/security-review.md +48 -0
- package/assets/opencode/templates/bros/status-board.md +33 -0
- package/assets/opencode/templates/bros/task-packet.md +94 -0
- package/assets/opencode/templates/bros/test-strategy.md +57 -0
- package/assets/opencode/templates/bros/ui-implementation-packet.md +64 -0
- package/assets/skills.manifest.json +650 -0
- package/assets/templates.manifest.json +55 -0
- package/bin/bros.mjs +122 -0
- package/docs/compatibility.md +9 -0
- package/docs/installation.md +66 -0
- package/docs/integrations/claude.md +5 -0
- package/docs/integrations/codex.md +5 -0
- package/docs/integrations/opencode.md +39 -0
- package/docs/migration/from-local-opencode-config.md +10 -0
- package/docs/release-process.md +11 -0
- package/docs/repository-structure.md +15 -0
- package/docs/roadmap.md +20 -0
- package/docs/security.md +18 -0
- package/docs/testing.md +9 -0
- package/examples/opencode/README.md +11 -0
- package/examples/opencode/opencode.example.jsonc +4 -0
- package/package.json +43 -0
- package/scripts/validate-assets.mjs +22 -0
- package/scripts/verify-no-secrets.mjs +38 -0
- package/src/plugin.mjs +98 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-introspection-debugging
|
|
3
|
+
description: Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Agent Introspection Debugging
|
|
8
|
+
|
|
9
|
+
Use this skill when an agent run is failing repeatedly, consuming tokens without progress, looping on the same tools, or drifting away from the intended task.
|
|
10
|
+
|
|
11
|
+
This is a workflow skill, not a hidden runtime. It teaches the agent to debug itself systematically before escalating to a human.
|
|
12
|
+
|
|
13
|
+
## When to Activate
|
|
14
|
+
|
|
15
|
+
- Maximum tool call / loop-limit failures
|
|
16
|
+
- Repeated retries with no forward progress
|
|
17
|
+
- Context growth or prompt drift that starts degrading output quality
|
|
18
|
+
- File-system or environment state mismatch between expectation and reality
|
|
19
|
+
- Tool failures that are likely recoverable with diagnosis and a smaller corrective action
|
|
20
|
+
|
|
21
|
+
## Scope Boundaries
|
|
22
|
+
|
|
23
|
+
Activate this skill for:
|
|
24
|
+
- capturing failure state before retrying blindly
|
|
25
|
+
- diagnosing common agent-specific failure patterns
|
|
26
|
+
- applying contained recovery actions
|
|
27
|
+
- producing a structured human-readable debug report
|
|
28
|
+
|
|
29
|
+
Do not use this skill as the primary source for:
|
|
30
|
+
- feature verification after code changes; use `verification-loop`
|
|
31
|
+
- framework-specific debugging when a narrower ECC skill already exists
|
|
32
|
+
- runtime promises the current harness cannot enforce automatically
|
|
33
|
+
|
|
34
|
+
## Four-Phase Loop
|
|
35
|
+
|
|
36
|
+
### Phase 1: Failure Capture
|
|
37
|
+
|
|
38
|
+
Before trying to recover, record the failure precisely.
|
|
39
|
+
|
|
40
|
+
Capture:
|
|
41
|
+
- error type, message, and stack trace when available
|
|
42
|
+
- last meaningful tool call sequence
|
|
43
|
+
- what the agent was trying to do
|
|
44
|
+
- current context pressure: repeated prompts, oversized pasted logs, duplicated plans, or runaway notes
|
|
45
|
+
- current environment assumptions: cwd, branch, relevant service state, expected files
|
|
46
|
+
|
|
47
|
+
Minimum capture template:
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
## Failure Capture
|
|
51
|
+
- Session / task:
|
|
52
|
+
- Goal in progress:
|
|
53
|
+
- Error:
|
|
54
|
+
- Last successful step:
|
|
55
|
+
- Last failed tool / command:
|
|
56
|
+
- Repeated pattern seen:
|
|
57
|
+
- Environment assumptions to verify:
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Phase 2: Root-Cause Diagnosis
|
|
61
|
+
|
|
62
|
+
Match the failure to a known pattern before changing anything.
|
|
63
|
+
|
|
64
|
+
| Pattern | Likely Cause | Check |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| Maximum tool calls / repeated same command | loop or no-exit observer path | inspect the last N tool calls for repetition |
|
|
67
|
+
| Context overflow / degraded reasoning | unbounded notes, repeated plans, oversized logs | inspect recent context for duplication and low-signal bulk |
|
|
68
|
+
| `ECONNREFUSED` / timeout | service unavailable or wrong port | verify service health, URL, and port assumptions |
|
|
69
|
+
| `429` / quota exhaustion | retry storm or missing backoff | count repeated calls and inspect retry spacing |
|
|
70
|
+
| file missing after write / stale diff | race, wrong cwd, or branch drift | re-check path, cwd, git status, and actual file existence |
|
|
71
|
+
| tests still failing after “fix” | wrong hypothesis | isolate the exact failing test and re-derive the bug |
|
|
72
|
+
|
|
73
|
+
Diagnosis questions:
|
|
74
|
+
- is this a logic failure, state failure, environment failure, or policy failure?
|
|
75
|
+
- did the agent lose the real objective and start optimizing the wrong subtask?
|
|
76
|
+
- is the failure deterministic or transient?
|
|
77
|
+
- what is the smallest reversible action that would validate the diagnosis?
|
|
78
|
+
|
|
79
|
+
### Phase 3: Contained Recovery
|
|
80
|
+
|
|
81
|
+
Recover with the smallest action that changes the diagnosis surface.
|
|
82
|
+
|
|
83
|
+
Safe recovery actions:
|
|
84
|
+
- stop repeated retries and restate the hypothesis
|
|
85
|
+
- trim low-signal context and keep only the active goal, blockers, and evidence
|
|
86
|
+
- re-check the actual filesystem / branch / process state
|
|
87
|
+
- narrow the task to one failing command, one file, or one test
|
|
88
|
+
- switch from speculative reasoning to direct observation
|
|
89
|
+
- escalate to a human when the failure is high-risk or externally blocked
|
|
90
|
+
|
|
91
|
+
Do not claim unsupported auto-healing actions like “reset agent state” or “update harness config” unless you are actually doing them through real tools in the current environment.
|
|
92
|
+
|
|
93
|
+
Contained recovery checklist:
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
## Recovery Action
|
|
97
|
+
- Diagnosis chosen:
|
|
98
|
+
- Smallest action taken:
|
|
99
|
+
- Why this is safe:
|
|
100
|
+
- What evidence would prove the fix worked:
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Phase 4: Introspection Report
|
|
104
|
+
|
|
105
|
+
End with a report that makes the recovery legible to the next agent or human.
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
## Agent Self-Debug Report
|
|
109
|
+
- Session / task:
|
|
110
|
+
- Failure:
|
|
111
|
+
- Root cause:
|
|
112
|
+
- Recovery action:
|
|
113
|
+
- Result: success | partial | blocked
|
|
114
|
+
- Token / time burn risk:
|
|
115
|
+
- Follow-up needed:
|
|
116
|
+
- Preventive change to encode later:
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Recovery Heuristics
|
|
120
|
+
|
|
121
|
+
Prefer these interventions in order:
|
|
122
|
+
|
|
123
|
+
1. Restate the real objective in one sentence.
|
|
124
|
+
2. Verify the world state instead of trusting memory.
|
|
125
|
+
3. Shrink the failing scope.
|
|
126
|
+
4. Run one discriminating check.
|
|
127
|
+
5. Only then retry.
|
|
128
|
+
|
|
129
|
+
Bad pattern:
|
|
130
|
+
- retrying the same action three times with slightly different wording
|
|
131
|
+
|
|
132
|
+
Good pattern:
|
|
133
|
+
- capture failure
|
|
134
|
+
- classify the pattern
|
|
135
|
+
- run one direct check
|
|
136
|
+
- change the plan only if the check supports it
|
|
137
|
+
|
|
138
|
+
## Integration with ECC
|
|
139
|
+
|
|
140
|
+
- Use `verification-loop` after recovery if code was changed.
|
|
141
|
+
- Use `continuous-learning-v2` when the failure pattern is worth turning into an instinct or later skill.
|
|
142
|
+
- Use `council` when the issue is not technical failure but decision ambiguity.
|
|
143
|
+
- Use `workspace-surface-audit` if the failure came from conflicting local state or repo drift.
|
|
144
|
+
|
|
145
|
+
## Output Standard
|
|
146
|
+
|
|
147
|
+
When this skill is active, do not end with “I fixed it” alone.
|
|
148
|
+
|
|
149
|
+
Always provide:
|
|
150
|
+
- the failure pattern
|
|
151
|
+
- the root-cause hypothesis
|
|
152
|
+
- the recovery action
|
|
153
|
+
- the evidence that the situation is now better or still blocked
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture-decision-records
|
|
3
|
+
description: Capture architectural decisions made during Claude Code sessions as structured ADRs. Auto-detects decision moments, records context, alternatives considered, and rationale. Maintains an ADR log so future developers understand why the codebase is shaped the way it is.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architecture Decision Records
|
|
8
|
+
|
|
9
|
+
Capture architectural decisions as they happen during coding sessions. Instead of decisions living only in Slack threads, PR comments, or someone's memory, this skill produces structured ADR documents that live alongside the code.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- User explicitly says "let's record this decision" or "ADR this"
|
|
14
|
+
- User chooses between significant alternatives (framework, library, pattern, database, API design)
|
|
15
|
+
- User says "we decided to..." or "the reason we're doing X instead of Y is..."
|
|
16
|
+
- User asks "why did we choose X?" (read existing ADRs)
|
|
17
|
+
- During planning phases when architectural trade-offs are discussed
|
|
18
|
+
|
|
19
|
+
## ADR Format
|
|
20
|
+
|
|
21
|
+
Use the lightweight ADR format proposed by Michael Nygard, adapted for AI-assisted development:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# ADR-NNNN: [Decision Title]
|
|
25
|
+
|
|
26
|
+
**Date**: YYYY-MM-DD
|
|
27
|
+
**Status**: proposed | accepted | deprecated | superseded by ADR-NNNN
|
|
28
|
+
**Deciders**: [who was involved]
|
|
29
|
+
|
|
30
|
+
## Context
|
|
31
|
+
|
|
32
|
+
What is the issue that we're seeing that is motivating this decision or change?
|
|
33
|
+
|
|
34
|
+
[2-5 sentences describing the situation, constraints, and forces at play]
|
|
35
|
+
|
|
36
|
+
## Decision
|
|
37
|
+
|
|
38
|
+
What is the change that we're proposing and/or doing?
|
|
39
|
+
|
|
40
|
+
[1-3 sentences stating the decision clearly]
|
|
41
|
+
|
|
42
|
+
## Alternatives Considered
|
|
43
|
+
|
|
44
|
+
### Alternative 1: [Name]
|
|
45
|
+
- **Pros**: [benefits]
|
|
46
|
+
- **Cons**: [drawbacks]
|
|
47
|
+
- **Why not**: [specific reason this was rejected]
|
|
48
|
+
|
|
49
|
+
### Alternative 2: [Name]
|
|
50
|
+
- **Pros**: [benefits]
|
|
51
|
+
- **Cons**: [drawbacks]
|
|
52
|
+
- **Why not**: [specific reason this was rejected]
|
|
53
|
+
|
|
54
|
+
## Consequences
|
|
55
|
+
|
|
56
|
+
What becomes easier or more difficult to do because of this change?
|
|
57
|
+
|
|
58
|
+
### Positive
|
|
59
|
+
- [benefit 1]
|
|
60
|
+
- [benefit 2]
|
|
61
|
+
|
|
62
|
+
### Negative
|
|
63
|
+
- [trade-off 1]
|
|
64
|
+
- [trade-off 2]
|
|
65
|
+
|
|
66
|
+
### Risks
|
|
67
|
+
- [risk and mitigation]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Workflow
|
|
71
|
+
|
|
72
|
+
### Capturing a New ADR
|
|
73
|
+
|
|
74
|
+
When a decision moment is detected:
|
|
75
|
+
|
|
76
|
+
1. **Initialize (first time only)** — if `docs/adr/` does not exist, ask the user for confirmation before creating the directory, a `README.md` seeded with the index table header (see ADR Index Format below), and a blank `template.md` for manual use. Do not create files without explicit consent.
|
|
77
|
+
2. **Identify the decision** — extract the core architectural choice being made
|
|
78
|
+
3. **Gather context** — what problem prompted this? What constraints exist?
|
|
79
|
+
4. **Document alternatives** — what other options were considered? Why were they rejected?
|
|
80
|
+
5. **State consequences** — what are the trade-offs? What becomes easier/harder?
|
|
81
|
+
6. **Assign a number** — scan existing ADRs in `docs/adr/` and increment
|
|
82
|
+
7. **Confirm and write** — present the draft ADR to the user for review. Only write to `docs/adr/NNNN-decision-title.md` after explicit approval. If the user declines, discard the draft without writing any files.
|
|
83
|
+
8. **Update the index** — append to `docs/adr/README.md`
|
|
84
|
+
|
|
85
|
+
### Reading Existing ADRs
|
|
86
|
+
|
|
87
|
+
When a user asks "why did we choose X?":
|
|
88
|
+
|
|
89
|
+
1. Check if `docs/adr/` exists — if not, respond: "No ADRs found in this project. Would you like to start recording architectural decisions?"
|
|
90
|
+
2. If it exists, scan `docs/adr/README.md` index for relevant entries
|
|
91
|
+
3. Read matching ADR files and present the Context and Decision sections
|
|
92
|
+
4. If no match is found, respond: "No ADR found for that decision. Would you like to record one now?"
|
|
93
|
+
|
|
94
|
+
### ADR Directory Structure
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
docs/
|
|
98
|
+
└── adr/
|
|
99
|
+
├── README.md ← index of all ADRs
|
|
100
|
+
├── 0001-use-nextjs.md
|
|
101
|
+
├── 0002-postgres-over-mongo.md
|
|
102
|
+
├── 0003-rest-over-graphql.md
|
|
103
|
+
└── template.md ← blank template for manual use
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### ADR Index Format
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
# Architecture Decision Records
|
|
110
|
+
|
|
111
|
+
| ADR | Title | Status | Date |
|
|
112
|
+
|-----|-------|--------|------|
|
|
113
|
+
| [0001](0001-use-nextjs.md) | Use Next.js as frontend framework | accepted | 2026-01-15 |
|
|
114
|
+
| [0002](0002-postgres-over-mongo.md) | PostgreSQL over MongoDB for primary datastore | accepted | 2026-01-20 |
|
|
115
|
+
| [0003](0003-rest-over-graphql.md) | REST API over GraphQL | accepted | 2026-02-01 |
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Decision Detection Signals
|
|
119
|
+
|
|
120
|
+
Watch for these patterns in conversation that indicate an architectural decision:
|
|
121
|
+
|
|
122
|
+
**Explicit signals**
|
|
123
|
+
- "Let's go with X"
|
|
124
|
+
- "We should use X instead of Y"
|
|
125
|
+
- "The trade-off is worth it because..."
|
|
126
|
+
- "Record this as an ADR"
|
|
127
|
+
|
|
128
|
+
**Implicit signals** (suggest recording an ADR — do not auto-create without user confirmation)
|
|
129
|
+
- Comparing two frameworks or libraries and reaching a conclusion
|
|
130
|
+
- Making a database schema design choice with stated rationale
|
|
131
|
+
- Choosing between architectural patterns (monolith vs microservices, REST vs GraphQL)
|
|
132
|
+
- Deciding on authentication/authorization strategy
|
|
133
|
+
- Selecting deployment infrastructure after evaluating alternatives
|
|
134
|
+
|
|
135
|
+
## What Makes a Good ADR
|
|
136
|
+
|
|
137
|
+
### Do
|
|
138
|
+
- **Be specific** — "Use Prisma ORM" not "use an ORM"
|
|
139
|
+
- **Record the why** — the rationale matters more than the what
|
|
140
|
+
- **Include rejected alternatives** — future developers need to know what was considered
|
|
141
|
+
- **State consequences honestly** — every decision has trade-offs
|
|
142
|
+
- **Keep it short** — an ADR should be readable in 2 minutes
|
|
143
|
+
- **Use present tense** — "We use X" not "We will use X"
|
|
144
|
+
|
|
145
|
+
### Don't
|
|
146
|
+
- Record trivial decisions — variable naming or formatting choices don't need ADRs
|
|
147
|
+
- Write essays — if the context section exceeds 10 lines, it's too long
|
|
148
|
+
- Omit alternatives — "we just picked it" is not a valid rationale
|
|
149
|
+
- Backfill without marking it — if recording a past decision, note the original date
|
|
150
|
+
- Let ADRs go stale — superseded decisions should reference their replacement
|
|
151
|
+
|
|
152
|
+
## ADR Lifecycle
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
proposed → accepted → [deprecated | superseded by ADR-NNNN]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- **proposed**: decision is under discussion, not yet committed
|
|
159
|
+
- **accepted**: decision is in effect and being followed
|
|
160
|
+
- **deprecated**: decision is no longer relevant (e.g., feature removed)
|
|
161
|
+
- **superseded**: a newer ADR replaces this one (always link the replacement)
|
|
162
|
+
|
|
163
|
+
## Categories of Decisions Worth Recording
|
|
164
|
+
|
|
165
|
+
| Category | Examples |
|
|
166
|
+
|----------|---------|
|
|
167
|
+
| **Technology choices** | Framework, language, database, cloud provider |
|
|
168
|
+
| **Architecture patterns** | Monolith vs microservices, event-driven, CQRS |
|
|
169
|
+
| **API design** | REST vs GraphQL, versioning strategy, auth mechanism |
|
|
170
|
+
| **Data modeling** | Schema design, normalization decisions, caching strategy |
|
|
171
|
+
| **Infrastructure** | Deployment model, CI/CD pipeline, monitoring stack |
|
|
172
|
+
| **Security** | Auth strategy, encryption approach, secret management |
|
|
173
|
+
| **Testing** | Test framework, coverage targets, E2E vs integration balance |
|
|
174
|
+
| **Process** | Branching strategy, review process, release cadence |
|
|
175
|
+
|
|
176
|
+
## Integration with Other Skills
|
|
177
|
+
|
|
178
|
+
- **Planner agent**: when the planner proposes architecture changes, suggest creating an ADR
|
|
179
|
+
- **Code reviewer agent**: flag PRs that introduce architectural changes without a corresponding ADR
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: article-writing
|
|
3
|
+
description: Write articles, guides, blog posts, tutorials, newsletter issues, and other long-form content in a distinctive voice derived from supplied examples or brand guidance. Use when the user wants polished written content longer than a paragraph, especially when voice consistency, structure, and credibility matter.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Article Writing
|
|
8
|
+
|
|
9
|
+
Write long-form content that sounds like an actual person with a point of view, not an LLM smoothing itself into paste.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- drafting blog posts, essays, launch posts, guides, tutorials, or newsletter issues
|
|
14
|
+
- turning notes, transcripts, or research into polished articles
|
|
15
|
+
- matching an existing founder, operator, or brand voice from examples
|
|
16
|
+
- tightening structure, pacing, and evidence in already-written long-form copy
|
|
17
|
+
|
|
18
|
+
## Core Rules
|
|
19
|
+
|
|
20
|
+
1. Lead with the concrete thing: artifact, example, output, anecdote, number, screenshot, or code.
|
|
21
|
+
2. Explain after the example, not before.
|
|
22
|
+
3. Keep sentences tight unless the source voice is intentionally expansive.
|
|
23
|
+
4. Use proof instead of adjectives.
|
|
24
|
+
5. Never invent facts, credibility, or customer evidence.
|
|
25
|
+
|
|
26
|
+
## Voice Handling
|
|
27
|
+
|
|
28
|
+
If the user wants a specific voice, run `brand-voice` first and reuse its `VOICE PROFILE`.
|
|
29
|
+
Do not duplicate a second style-analysis pass here unless the user explicitly asks for one.
|
|
30
|
+
|
|
31
|
+
If no voice references are given, default to a sharp operator voice: concrete, unsentimental, useful.
|
|
32
|
+
|
|
33
|
+
## Banned Patterns
|
|
34
|
+
|
|
35
|
+
Delete and rewrite any of these:
|
|
36
|
+
- "In today's rapidly evolving landscape"
|
|
37
|
+
- "game-changer", "cutting-edge", "revolutionary"
|
|
38
|
+
- "here's why this matters" as a standalone bridge
|
|
39
|
+
- fake vulnerability arcs
|
|
40
|
+
- a closing question added only to juice engagement
|
|
41
|
+
- biography padding that does not move the argument
|
|
42
|
+
- generic AI throat-clearing that delays the point
|
|
43
|
+
|
|
44
|
+
## Writing Process
|
|
45
|
+
|
|
46
|
+
1. Clarify the audience and purpose.
|
|
47
|
+
2. Build a hard outline with one job per section.
|
|
48
|
+
3. Start sections with proof, artifact, conflict, or example.
|
|
49
|
+
4. Expand only where the next sentence earns space.
|
|
50
|
+
5. Cut anything that sounds templated, overexplained, or self-congratulatory.
|
|
51
|
+
|
|
52
|
+
## Structure Guidance
|
|
53
|
+
|
|
54
|
+
### Technical Guides
|
|
55
|
+
|
|
56
|
+
- open with what the reader gets
|
|
57
|
+
- use code, commands, screenshots, or concrete output in major sections
|
|
58
|
+
- end with actionable takeaways, not a soft recap
|
|
59
|
+
|
|
60
|
+
### Essays / Opinion
|
|
61
|
+
|
|
62
|
+
- start with tension, contradiction, or a specific observation
|
|
63
|
+
- keep one argument thread per section
|
|
64
|
+
- make opinions answer to evidence
|
|
65
|
+
|
|
66
|
+
### Newsletters
|
|
67
|
+
|
|
68
|
+
- keep the first screen doing real work
|
|
69
|
+
- do not front-load diary filler
|
|
70
|
+
- use section labels only when they improve scanability
|
|
71
|
+
|
|
72
|
+
## Quality Gate
|
|
73
|
+
|
|
74
|
+
Before delivering:
|
|
75
|
+
- factual claims are backed by provided sources
|
|
76
|
+
- generic AI transitions are gone
|
|
77
|
+
- the voice matches the supplied examples or the agreed `VOICE PROFILE`
|
|
78
|
+
- every section adds something new
|
|
79
|
+
- formatting matches the intended medium
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Article Writing"
|
|
3
|
+
short_description: "Write long-form content in a supplied voice without sounding templated"
|
|
4
|
+
brand_color: "#B45309"
|
|
5
|
+
default_prompt: "Draft a sharp long-form article from these notes and examples"
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: true
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: automation-audit-ops
|
|
3
|
+
description: Evidence-first automation inventory and overlap audit workflow for ECC. Use when the user wants to know which jobs, hooks, connectors, MCP servers, or wrappers are live, broken, redundant, or missing before fixing anything.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Automation Audit Ops
|
|
8
|
+
|
|
9
|
+
Use this when the user asks what automations are live, which jobs are broken, where overlap exists, or what tooling and connectors are actually doing useful work right now.
|
|
10
|
+
|
|
11
|
+
This is an audit-first operator skill. The job is to produce an evidence-backed inventory and a keep / merge / cut / fix-next recommendation set before rewriting anything.
|
|
12
|
+
|
|
13
|
+
## Skill Stack
|
|
14
|
+
|
|
15
|
+
Pull these ECC-native skills into the workflow when relevant:
|
|
16
|
+
|
|
17
|
+
- `workspace-surface-audit` for connector, MCP, hook, and app inventory
|
|
18
|
+
- `knowledge-ops` when the audit needs to reconcile live repo truth with durable context
|
|
19
|
+
- `github-ops` when the answer depends on CI, scheduled workflows, issues, or PR automation
|
|
20
|
+
- `ecc-tools-cost-audit` when the real problem is webhook fanout, queued jobs, or billing burn in the sibling app repo
|
|
21
|
+
- `research-ops` when local inventory must be compared against current platform support or public docs
|
|
22
|
+
- `verification-loop` for proving post-fix state instead of relying on assumed recovery
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- user asks "what automations do I have", "what is live", "what is broken", or "what overlaps"
|
|
27
|
+
- the task spans cron jobs, GitHub Actions, local hooks, MCP servers, connectors, wrappers, or app integrations
|
|
28
|
+
- the user wants to know what was ported from another agent system and what still needs to be rebuilt inside ECC
|
|
29
|
+
- the workspace has accumulated multiple ways to do the same thing and the user wants one canonical lane
|
|
30
|
+
|
|
31
|
+
## Guardrails
|
|
32
|
+
|
|
33
|
+
- start read-only unless the user explicitly asked for fixes
|
|
34
|
+
- separate:
|
|
35
|
+
- configured
|
|
36
|
+
- authenticated
|
|
37
|
+
- recently verified
|
|
38
|
+
- stale or broken
|
|
39
|
+
- missing entirely
|
|
40
|
+
- do not claim a tool is live just because a skill or config references it
|
|
41
|
+
- do not merge or delete overlapping surfaces until the evidence table exists
|
|
42
|
+
|
|
43
|
+
## Workflow
|
|
44
|
+
|
|
45
|
+
### 1. Inventory the real surface
|
|
46
|
+
|
|
47
|
+
Read the current live surface before theorizing:
|
|
48
|
+
|
|
49
|
+
- repo hooks and local hook scripts
|
|
50
|
+
- GitHub Actions and scheduled workflows
|
|
51
|
+
- MCP configs and enabled servers
|
|
52
|
+
- connector- or app-backed integrations
|
|
53
|
+
- wrapper scripts and repo-specific automation entrypoints
|
|
54
|
+
|
|
55
|
+
Group them by surface:
|
|
56
|
+
|
|
57
|
+
- local runtime
|
|
58
|
+
- repo CI / automation
|
|
59
|
+
- connected external systems
|
|
60
|
+
- messaging / notifications
|
|
61
|
+
- billing / customer operations
|
|
62
|
+
- research / monitoring
|
|
63
|
+
|
|
64
|
+
### 2. Classify each item by live state
|
|
65
|
+
|
|
66
|
+
For every surfaced automation, mark:
|
|
67
|
+
|
|
68
|
+
- configured
|
|
69
|
+
- authenticated
|
|
70
|
+
- recently verified
|
|
71
|
+
- stale or broken
|
|
72
|
+
- missing
|
|
73
|
+
|
|
74
|
+
Then classify the problem type:
|
|
75
|
+
|
|
76
|
+
- active breakage
|
|
77
|
+
- auth outage
|
|
78
|
+
- stale status
|
|
79
|
+
- overlap or redundancy
|
|
80
|
+
- missing capability
|
|
81
|
+
|
|
82
|
+
### 3. Trace the proof path
|
|
83
|
+
|
|
84
|
+
Back every important claim with a concrete source:
|
|
85
|
+
|
|
86
|
+
- file path
|
|
87
|
+
- workflow run
|
|
88
|
+
- hook log
|
|
89
|
+
- config entry
|
|
90
|
+
- recent command output
|
|
91
|
+
- exact failure signature
|
|
92
|
+
|
|
93
|
+
If the current state is ambiguous, say so directly instead of pretending the audit is complete.
|
|
94
|
+
|
|
95
|
+
### 4. End with keep / merge / cut / fix-next
|
|
96
|
+
|
|
97
|
+
For each overlapping or suspect surface, return one call:
|
|
98
|
+
|
|
99
|
+
- keep
|
|
100
|
+
- merge
|
|
101
|
+
- cut
|
|
102
|
+
- fix next
|
|
103
|
+
|
|
104
|
+
The value is in collapsing noisy automation into one canonical ECC lane, not in preserving every historical path.
|
|
105
|
+
|
|
106
|
+
## Output Format
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
CURRENT SURFACE
|
|
110
|
+
- automation
|
|
111
|
+
- source
|
|
112
|
+
- live state
|
|
113
|
+
- proof
|
|
114
|
+
|
|
115
|
+
FINDINGS
|
|
116
|
+
- active breakage
|
|
117
|
+
- overlap
|
|
118
|
+
- stale status
|
|
119
|
+
- missing capability
|
|
120
|
+
|
|
121
|
+
RECOMMENDATION
|
|
122
|
+
- keep
|
|
123
|
+
- merge
|
|
124
|
+
- cut
|
|
125
|
+
- fix next
|
|
126
|
+
|
|
127
|
+
NEXT ECC MOVE
|
|
128
|
+
- exact skill / hook / workflow / app lane to strengthen
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Pitfalls
|
|
132
|
+
|
|
133
|
+
- do not answer from memory when the live inventory can be read
|
|
134
|
+
- do not treat "present in config" as "working"
|
|
135
|
+
- do not fix lower-value redundancy before naming the broken high-signal path
|
|
136
|
+
- do not widen the task into a repo rewrite if the user asked for inventory first
|
|
137
|
+
|
|
138
|
+
## Verification
|
|
139
|
+
|
|
140
|
+
- important claims cite a live proof path
|
|
141
|
+
- each surfaced automation is labeled with a clear live-state category
|
|
142
|
+
- the final recommendation distinguishes keep / merge / cut / fix-next
|