oh-my-githubcopilot 1.4.1 → 1.8.0-alpha.f50f59a
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/.claude-plugin/plugin.json +36 -6
- package/.mcp.json +17 -0
- package/AGENTS.md +78 -9
- package/CHANGELOG.md +199 -1
- package/README.de.md +112 -26
- package/README.es.md +115 -29
- package/README.fr.md +114 -28
- package/README.it.md +114 -28
- package/README.ja.md +112 -26
- package/README.ko.md +112 -26
- package/README.md +96 -95
- package/README.pt.md +116 -30
- package/README.ru.md +116 -30
- package/README.tr.md +115 -29
- package/README.vi.md +116 -30
- package/README.zh.md +112 -26
- package/agents/analyst.agent.md +27 -0
- package/agents/architect.agent.md +24 -0
- package/agents/code-reviewer.agent.md +24 -0
- package/agents/critic.agent.md +24 -0
- package/agents/debugger.agent.md +24 -0
- package/agents/designer.agent.md +24 -0
- package/agents/document-specialist.agent.md +24 -0
- package/agents/executor.agent.md +27 -0
- package/agents/explorer.agent.md +23 -0
- package/agents/git-master.agent.md +24 -0
- package/agents/orchestrator.agent.md +26 -0
- package/agents/planner.agent.md +24 -0
- package/agents/qa-tester.agent.md +24 -0
- package/agents/researcher.agent.md +18 -0
- package/agents/reviewer.agent.md +23 -0
- package/agents/scientist.agent.md +20 -0
- package/agents/security-reviewer.agent.md +20 -0
- package/agents/simplifier.agent.md +20 -0
- package/agents/test-engineer.agent.md +20 -0
- package/agents/tester.agent.md +20 -0
- package/agents/tracer.agent.md +24 -0
- package/agents/verifier.agent.md +19 -0
- package/agents/writer.agent.md +24 -0
- package/bin/omp-statusline.mjs +179 -0
- package/bin/omp-statusline.mjs.map +7 -0
- package/bin/omp-statusline.sh +21 -0
- package/bin/omp.mjs +709 -16
- package/bin/omp.mjs.map +4 -4
- package/dist/hooks/hud-emitter.mjs +268 -82
- package/dist/hooks/hud-emitter.mjs.map +4 -4
- package/dist/hooks/keyword-detector.mjs +100 -23
- package/dist/hooks/keyword-detector.mjs.map +2 -2
- package/dist/hooks/model-router.mjs +1 -1
- package/dist/hooks/model-router.mjs.map +1 -1
- package/dist/hooks/stop-continuation.mjs +1 -1
- package/dist/hooks/stop-continuation.mjs.map +1 -1
- package/dist/hooks/token-tracker.mjs +2 -1
- package/dist/hooks/token-tracker.mjs.map +2 -2
- package/dist/mcp/server.mjs +85 -53
- package/dist/mcp/server.mjs.map +4 -4
- package/dist/skills/setup.mjs +39 -27
- package/dist/skills/setup.mjs.map +4 -4
- package/hooks/hooks.json +39 -45
- package/package.json +9 -4
- package/plugin.json +71 -0
- package/skills/ai-slop-cleaner/SKILL.md +137 -0
- package/skills/autopilot/SKILL.md +6 -0
- package/skills/configure-notifications/SKILL.md +6 -0
- package/skills/deep-interview/SKILL.md +6 -0
- package/skills/doctor/SKILL.md +188 -0
- package/skills/ecomode/SKILL.md +6 -0
- package/skills/graph-context/SKILL.md +119 -0
- package/skills/graph-provider/SKILL.md +6 -0
- package/skills/graphify/SKILL.md +6 -0
- package/skills/graphwiki/SKILL.md +6 -0
- package/skills/hud/SKILL.md +6 -0
- package/skills/improve-codebase-architecture/SKILL.md +214 -0
- package/skills/interactive-menu/SKILL.md +102 -0
- package/skills/interview/SKILL.md +203 -0
- package/skills/learner/SKILL.md +6 -0
- package/skills/mcp-setup/SKILL.md +6 -0
- package/skills/note/SKILL.md +6 -0
- package/skills/notifications/SKILL.md +190 -0
- package/skills/omp-doctor/SKILL.md +146 -0
- package/skills/omp-plan/SKILL.md +219 -2
- package/skills/omp-reference/SKILL.md +174 -0
- package/skills/omp-setup/SKILL.md +15 -1
- package/skills/pipeline/SKILL.md +6 -0
- package/skills/psm/SKILL.md +6 -0
- package/skills/ralph/SKILL.md +6 -0
- package/skills/ralplan/SKILL.md +148 -0
- package/skills/release/SKILL.md +6 -0
- package/skills/research/SKILL.md +149 -0
- package/skills/session/SKILL.md +220 -0
- package/skills/setup/SKILL.md +6 -0
- package/skills/skillify/SKILL.md +66 -0
- package/skills/spending/SKILL.md +6 -0
- package/skills/swarm/SKILL.md +6 -0
- package/skills/swe-bench/SKILL.md +6 -0
- package/skills/tdd/SKILL.md +246 -0
- package/skills/team/SKILL.md +6 -0
- package/skills/trace/SKILL.md +6 -0
- package/skills/ultrawork/SKILL.md +6 -0
- package/skills/wiki/SKILL.md +6 -0
- package/src/agents/analyst.md +0 -103
- package/src/agents/architect.md +0 -169
- package/src/agents/code-reviewer.md +0 -135
- package/src/agents/critic.md +0 -196
- package/src/agents/debugger.md +0 -132
- package/src/agents/designer.md +0 -103
- package/src/agents/document-specialist.md +0 -111
- package/src/agents/executor.md +0 -120
- package/src/agents/explorer.md +0 -98
- package/src/agents/git-master.md +0 -92
- package/src/agents/orchestrator.md +0 -125
- package/src/agents/planner.md +0 -106
- package/src/agents/qa-tester.md +0 -129
- package/src/agents/researcher.md +0 -102
- package/src/agents/reviewer.md +0 -100
- package/src/agents/scientist.md +0 -150
- package/src/agents/security-reviewer.md +0 -132
- package/src/agents/simplifier.md +0 -109
- package/src/agents/test-engineer.md +0 -124
- package/src/agents/tester.md +0 -102
- package/src/agents/tracer.md +0 -160
- package/src/agents/verifier.md +0 -100
- package/src/agents/writer.md +0 -96
package/skills/ecomode/SKILL.md
CHANGED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: graph-context
|
|
3
|
+
description: Load codebase context from knowledge graph instead of scanning raw files
|
|
4
|
+
invocation: auto (injected by session-start when graph provider is configured)
|
|
5
|
+
autoinvoke: true
|
|
6
|
+
---
|
|
7
|
+
# Skill: Graph Context
|
|
8
|
+
|
|
9
|
+
## Metadata
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|-------|-------|
|
|
13
|
+
| **ID** | `graph-context` |
|
|
14
|
+
| **Keywords** | `graph-context:`, `/graph-context` |
|
|
15
|
+
| **Tier** | Context Tool |
|
|
16
|
+
| **Source** | `src/skills/graph-context.mts` |
|
|
17
|
+
|
|
18
|
+
## Description
|
|
19
|
+
|
|
20
|
+
Load codebase context from a knowledge graph instead of scanning raw files. Auto-injected at session start when a graph provider is configured. Dramatically reduces token cost for codebase exploration.
|
|
21
|
+
|
|
22
|
+
## Cross-Reference: graph-provider
|
|
23
|
+
|
|
24
|
+
For engine selection (graphify vs graphwiki) and provider management, use the `graph-provider` skill (`/omp:graph-provider`). Graph-context uses the provider configured there. Relationship:
|
|
25
|
+
|
|
26
|
+
| Skill | Role |
|
|
27
|
+
|-------|------|
|
|
28
|
+
| `graph-provider` | Manages which engine is active; set/switch/build/query |
|
|
29
|
+
| `graph-context` | Reads context from the active provider at session start |
|
|
30
|
+
|
|
31
|
+
Provider configuration is stored in `.omp/config.json` under `graph.provider`. Resolution order: local > global > default (`graphwiki`).
|
|
32
|
+
|
|
33
|
+
## Interface
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
interface SkillInput {
|
|
37
|
+
trigger: string;
|
|
38
|
+
args: string[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface SkillOutput {
|
|
42
|
+
status: "ok" | "error";
|
|
43
|
+
message: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function activate(input: SkillInput): Promise<SkillOutput>
|
|
47
|
+
export function deactivate(): void
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Implementation
|
|
51
|
+
|
|
52
|
+
Spawns `bin/omp.mjs graph-context [args]`. No persistent resources are maintained.
|
|
53
|
+
|
|
54
|
+
## Provider: graphwiki
|
|
55
|
+
|
|
56
|
+
If `graphwiki-out/` exists:
|
|
57
|
+
|
|
58
|
+
1. Read `graphwiki-out/GRAPH_REPORT.md` for project overview (~1-2K tokens)
|
|
59
|
+
2. Use `graphwiki path <nodeA> <nodeB>` for structural queries (0 extra tokens)
|
|
60
|
+
3. Read `graphwiki-out/wiki/index.md` to find relevant pages (~1-3K tokens)
|
|
61
|
+
4. Read targeted wiki pages (~2-5K each, max 3 pages per query)
|
|
62
|
+
5. Only read raw source files if wiki page is missing or confidence is low
|
|
63
|
+
|
|
64
|
+
### Commands
|
|
65
|
+
|
|
66
|
+
| Command | Use When |
|
|
67
|
+
|---------|----------|
|
|
68
|
+
| `graphwiki query "<question>"` | General questions about the codebase |
|
|
69
|
+
| `graphwiki path <nodeA> <nodeB>` | How two modules/concepts connect |
|
|
70
|
+
| `graphwiki status` | Check graph health and drift score |
|
|
71
|
+
| `graphwiki lint` | Find contradictions in the graph |
|
|
72
|
+
| `graphwiki build . --update` | After changing files (incremental) |
|
|
73
|
+
| `graphwiki build . --resume` | Resume a crashed/interrupted build |
|
|
74
|
+
| `graphwiki ingest <file>` | Add a new file to the graph |
|
|
75
|
+
| `graphwiki benchmark "<question>"` | Measure token cost of a query |
|
|
76
|
+
|
|
77
|
+
### Hard Constraints
|
|
78
|
+
- **NEVER** modify files in `raw/` (immutable source files)
|
|
79
|
+
- **NEVER** modify files in `graphwiki-out/` (auto-generated output)
|
|
80
|
+
- Maximum 3 wiki pages per query (token budget)
|
|
81
|
+
|
|
82
|
+
## Provider: graphify
|
|
83
|
+
|
|
84
|
+
If `graphify-out/` exists:
|
|
85
|
+
|
|
86
|
+
1. Read `graphify-out/GRAPH_REPORT.md` for project overview
|
|
87
|
+
2. Use `graphify query "<question>"` for targeted lookups
|
|
88
|
+
3. Use `graphify path "<nodeA>" "<nodeB>"` for structural connections
|
|
89
|
+
4. Read `graphify-out/graph.json` only for programmatic traversal
|
|
90
|
+
5. Only read raw source files if graph data is insufficient
|
|
91
|
+
|
|
92
|
+
### Commands
|
|
93
|
+
|
|
94
|
+
| Command | Use When |
|
|
95
|
+
|---------|----------|
|
|
96
|
+
| `/graphify query "<question>"` | General codebase questions (BFS) |
|
|
97
|
+
| `/graphify query "<question>" --dfs` | Trace a specific path (DFS) |
|
|
98
|
+
| `/graphify path "<nodeA>" "<nodeB>"` | Shortest path between two concepts |
|
|
99
|
+
| `/graphify explain "<node>"` | Understand what a specific node does |
|
|
100
|
+
| `/graphify .` | Full rebuild of the knowledge graph |
|
|
101
|
+
| `/graphify . --update` | Incremental rebuild (changed files only) |
|
|
102
|
+
| `/graphify . --wiki` | Generate agent-crawlable wiki output |
|
|
103
|
+
| `/graphify add <url>` | Fetch and add a URL to the graph |
|
|
104
|
+
| `/graphify . --watch` | Auto-rebuild on file changes |
|
|
105
|
+
| `/graphify . --mcp` | Start MCP stdio server for agent access |
|
|
106
|
+
|
|
107
|
+
### Hard Constraints
|
|
108
|
+
- **NEVER** modify files in `graphify-out/` (auto-generated output)
|
|
109
|
+
- `graphify-out/graph.json` is for programmatic traversal only. Use query/path commands.
|
|
110
|
+
|
|
111
|
+
## Token Budget
|
|
112
|
+
|
|
113
|
+
The entire point of using a graph provider is to avoid re-reading raw source files every session. A 50-file codebase costs ~100K+ tokens to read raw. The graph reduces this to ~2-5K tokens per query.
|
|
114
|
+
|
|
115
|
+
Do NOT fall back to reading raw files unless the graph explicitly lacks the information needed.
|
|
116
|
+
|
|
117
|
+
## State
|
|
118
|
+
|
|
119
|
+
Provider selection is stored in `.omp/config.json`. No session-level state is maintained by this skill.
|
package/skills/graphify/SKILL.md
CHANGED
package/skills/hud/SKILL.md
CHANGED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: improve-codebase-architecture
|
|
3
|
+
description: Deep exploration and architectural improvement via organic friction detection
|
|
4
|
+
triggers:
|
|
5
|
+
- /omp:improve-codebase-architecture
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# improve-codebase-architecture
|
|
9
|
+
|
|
10
|
+
Deep architectural analysis of a codebase with the goal of making the system easier to change. This skill works by following friction, not by applying rigid rules.
|
|
11
|
+
|
|
12
|
+
Route to **omp architect** for deep analysis and **omp planner** for sequencing implementation. Scope-bound all proposals to the files and modules with confirmed friction — do not propose changes to areas the investigation did not touch.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## <Do_Not_Use_When>
|
|
17
|
+
|
|
18
|
+
- **You need a specific bug fixed** -- Use a targeted debugging skill instead. This skill is about structure and long-term maintainability, not fixing individual bugs.
|
|
19
|
+
- **The codebase is new or small (< 5 files)** -- A codebase this young has not accumulated enough friction to reveal its real problems. Wait until the system has been modified several times.
|
|
20
|
+
- **You need an immediate hotfix deployed** -- Architectural changes require testing and verification. If the fix is urgent, do the hotfix first and schedule the architecture work.
|
|
21
|
+
- **The team is in crisis mode** -- Crisis mode prioritizes shipping over quality. Do architectural work between crises, not during them.
|
|
22
|
+
- **You are asked to "just add a feature"** -- If the task is narrowly scoped, it should be handled directly without this skill. Only engage when there is a sense that the system is fighting back or that something is fundamentally hard.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## <Scope_Bounding_Constraints>
|
|
27
|
+
|
|
28
|
+
These constraints are mandatory. Violating them turns architectural analysis into architecture astronautics.
|
|
29
|
+
|
|
30
|
+
- **Start from evidence, not intuition** — Only propose changes for modules where friction was directly observed or measured.
|
|
31
|
+
- **Bound proposals to touched modules** — Do not expand scope to modules not investigated. If friction in module A implies a problem in module B, investigate B before proposing changes to it.
|
|
32
|
+
- **RFC before code** — No implementation changes without a filed RFC. The RFC is the deliverable; implementation is a follow-up task.
|
|
33
|
+
- **One RFC per friction point** — Do not bundle unrelated architectural changes into a single proposal.
|
|
34
|
+
- **Stop at 30% threshold** — If the friction points to a problem requiring changes across more than 30% of the codebase, escalate to a dedicated architecture review before making any changes.
|
|
35
|
+
- **Respect ownership boundaries** — Do not propose changes to modules owned by other teams without their involvement.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## <Tool_Usage>
|
|
40
|
+
|
|
41
|
+
### Entry Points
|
|
42
|
+
|
|
43
|
+
| Trigger | When to Use |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `/omp:improve-codebase-architecture` | General request to analyze and improve a codebase's structure |
|
|
46
|
+
|
|
47
|
+
### Agent Routing
|
|
48
|
+
|
|
49
|
+
- **omp architect** — Route for deep analysis of module interfaces, dependency graphs, and coupling patterns. Use for parallel interface design.
|
|
50
|
+
- **omp planner** — Route for sequencing the implementation of approved RFCs into a safe, incremental plan.
|
|
51
|
+
- **omp explore** — Map the file structure and module boundaries before analysis begins.
|
|
52
|
+
|
|
53
|
+
### Sub-Agent Orchestration (Parallel Interface Design)
|
|
54
|
+
|
|
55
|
+
Spawn multiple sub-agents simultaneously, each with a different constraint perspective. This is the core technique for designing better module interfaces.
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Agent A: Minimize the interface surface
|
|
59
|
+
- Goal: Reduce parameters, simplify signatures
|
|
60
|
+
- Ask: "What is the smallest interface that still fulfills the contract?"
|
|
61
|
+
|
|
62
|
+
Agent B: Maximize flexibility / ease of change
|
|
63
|
+
- Goal: Identify where changes cascade, minimize blast radius
|
|
64
|
+
- Ask: "What would I need to change to swap this dependency?"
|
|
65
|
+
|
|
66
|
+
Agent C: Optimize for the common case
|
|
67
|
+
- Goal: Make the happy path effortless
|
|
68
|
+
- Ask: "What does this code do most of the time, and how do we make that the default?"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Workflow:**
|
|
72
|
+
1. Run all agents in parallel.
|
|
73
|
+
2. Collect proposals from each.
|
|
74
|
+
3. Compare interface shapes, tradeoffs, and constraints.
|
|
75
|
+
4. Synthesize the best aspects of each design.
|
|
76
|
+
5. Document the chosen approach with rationale.
|
|
77
|
+
|
|
78
|
+
### Codebase Investigation Tools
|
|
79
|
+
|
|
80
|
+
- **omp explore agent** -- Map the file structure and module boundaries.
|
|
81
|
+
- **ast_grep_search** -- Find structural patterns (e.g., functions with many parameters, large classes).
|
|
82
|
+
- **Grep** -- Track import/export chains to understand coupling.
|
|
83
|
+
- **Read** -- Deep-dive into specific modules identified as friction points.
|
|
84
|
+
- **lsp_workspace_symbols** -- Understand public API surfaces of modules.
|
|
85
|
+
|
|
86
|
+
### Output Format
|
|
87
|
+
|
|
88
|
+
After analysis, produce a GitHub Issue RFC using this template:
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
## Problem: [what's wrong]
|
|
92
|
+
## Proposal: [what to change]
|
|
93
|
+
## Alternatives Considered: [other options]
|
|
94
|
+
## Consequences: [what happens if we do this]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## <Why_This_Exists>
|
|
100
|
+
|
|
101
|
+
Most codebases degrade silently. Features are added, conditions accumulate, abstractions pile on top of abstractions. Eventually, every team reaches a point where changing one thing breaks three others -- and nobody knows why.
|
|
102
|
+
|
|
103
|
+
This skill exists because **friction is a signal, not a noise**. When a developer hits resistance while trying to make a change, that resistance reveals the architecture's true shape. The goal is to listen to that friction, trace it to its root cause, and propose changes that make the system easier to work with -- not by applying external rules, but by following what the code is already telling you.
|
|
104
|
+
|
|
105
|
+
The core ideas come from John Ousterhout's *A Philosophy of Software Design*:
|
|
106
|
+
- **Deep modules** hide complexity behind small, focused interfaces.
|
|
107
|
+
- **Shallow modules** expose as much complexity as they contain -- making them cognitive burdens.
|
|
108
|
+
- **Organic exploration** means trusting the difficulty you encounter, rather than applying a checklist.
|
|
109
|
+
|
|
110
|
+
This skill is also a direct response to the failure mode of "architecture astronauts" -- people who design grand systems upfront without reacting to what the code actually needs. The approach here is the opposite: start from real friction and let the architecture emerge from the evidence.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## <Examples>
|
|
115
|
+
|
|
116
|
+
### Example 1: Detecting a Shallow Module
|
|
117
|
+
|
|
118
|
+
A team has a `UserManager` class with 47 methods. It is imported everywhere. The LSP shows it in 200+ files.
|
|
119
|
+
|
|
120
|
+
**What the friction tells you:**
|
|
121
|
+
- Changing any behavior in `UserManager` risks breaking many unrelated callers.
|
|
122
|
+
- The class has become a "god class" -- it knows too much and is depended on by too much.
|
|
123
|
+
|
|
124
|
+
**Organic response:**
|
|
125
|
+
- Identify cohesive subgroups of functionality within `UserManager`.
|
|
126
|
+
- Extract those subgroups into focused modules with narrow interfaces.
|
|
127
|
+
- Keep `UserManager` as a facade with a small, stable interface.
|
|
128
|
+
|
|
129
|
+
**Proposal (RFC snippet):**
|
|
130
|
+
```markdown
|
|
131
|
+
## Problem: UserManager is a shallow module with 47 methods imported by 200+ files.
|
|
132
|
+
Any change to it risks cascading failures across the codebase.
|
|
133
|
+
|
|
134
|
+
## Proposal: Extract three cohesive sub-modules (AuthManager, ProfileManager, PreferencesManager)
|
|
135
|
+
and replace UserManager's responsibilities with delegation to these new modules.
|
|
136
|
+
Keep UserManager as a thin facade with no more than 5 public methods.
|
|
137
|
+
|
|
138
|
+
## Alternatives Considered:
|
|
139
|
+
- Keep UserManager and add deprecation warnings (does not reduce coupling)
|
|
140
|
+
- Create a single new class replacing UserManager (too large a change, hard to review)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Example 2: Following Friction to Find a Design Problem
|
|
144
|
+
|
|
145
|
+
A developer tries to add a new log level and discovers that the logging system has 6 different configuration locations, each with different precedence rules.
|
|
146
|
+
|
|
147
|
+
**What the friction tells you:**
|
|
148
|
+
- Configuration is not centralized -- it has spread across layers.
|
|
149
|
+
- The "easy" thing (add a log level) is hard because the concern is not owned in one place.
|
|
150
|
+
|
|
151
|
+
**Organic response:**
|
|
152
|
+
- Map all 6 configuration sites.
|
|
153
|
+
- Identify which are dead, which are active, and which should be canonical.
|
|
154
|
+
- Propose a single configuration boundary and migrate consumers to it.
|
|
155
|
+
|
|
156
|
+
### Example 3: Parallel Interface Design
|
|
157
|
+
|
|
158
|
+
A team needs to redesign the `CacheManager` interface. Instead of one agent designing it in isolation, three agents work simultaneously:
|
|
159
|
+
|
|
160
|
+
- **Agent A (minimize surface):** Proposes a single `get(key)` / `set(key, value)` interface, with TTL as a property set once at initialization.
|
|
161
|
+
- **Agent B (maximize flexibility):** Proposes a strategy pattern with swappable `CacheStrategy` objects and a `CacheBackend` interface for swapping implementations.
|
|
162
|
+
- **Agent C (optimize common case):** Proposes an annotation-based approach where developers mark methods with `@Cacheable` and the system handles everything transparently.
|
|
163
|
+
|
|
164
|
+
**Synthesis:** Agent A's surface is too small (loses TTL control at runtime). Agent C is too magical (hard to debug). Agent B's strategy pattern is the best foundation, but the interface is tightened to 4 methods instead of 8.
|
|
165
|
+
|
|
166
|
+
### Example 4: Four Dependency Categories in Practice
|
|
167
|
+
|
|
168
|
+
When evaluating how to test a module, classify its dependencies:
|
|
169
|
+
|
|
170
|
+
| Module | Dependency | Category | Testing Strategy |
|
|
171
|
+
|---|---|---|---|
|
|
172
|
+
| `UserService` | `UserRepository` (local SQLite) | Local-substitutable | Inject a mock repository |
|
|
173
|
+
| `UserService` | `EmailClient` (external SendGrid) | True external | Use a test SMTP server or mock |
|
|
174
|
+
| `AuthService` | `SessionStore` (in-process Map) | In-process | Test directly with real instance |
|
|
175
|
+
| `PaymentService` | `PaymentGateway` (remote, owned adapter) | Remote-but-owned | Use a test payment gateway adapter |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## <Escalation_And_Stop_Conditions>
|
|
180
|
+
|
|
181
|
+
### Escalate when:
|
|
182
|
+
|
|
183
|
+
- **Architectural problem is systemic** -- If the friction you found points to a problem that would require changes across more than 30% of the codebase, escalate to a dedicated architecture review before making changes.
|
|
184
|
+
- **Cross-team ownership** -- If the modules involved are owned by different teams, the RFC must involve those teams. Do not propose changes that affect code you do not own.
|
|
185
|
+
- **Performance is a concern** -- Architectural improvements sometimes introduce indirection that affects latency. If performance constraints exist, document them in the RFC and involve a performance-conscious reviewer.
|
|
186
|
+
- **Database schema changes** -- Schema changes have high migration costs. Escalate schema changes to a senior architect or DBA review.
|
|
187
|
+
|
|
188
|
+
### Stop conditions (do not proceed):
|
|
189
|
+
|
|
190
|
+
- **The codebase does not have tests** -- Architectural changes without test coverage are uncontrolled experiments. Stop and escalate to establishing test infrastructure first.
|
|
191
|
+
- **The team disagrees on the direction** -- If stakeholders have conflicting priorities or views on the proposed changes, stop and reach consensus through structured discussion before proceeding.
|
|
192
|
+
- **Cost of change exceeds benefit** -- If the estimated cost of the refactor is greater than the estimated benefit (measured in future developer-hours saved), stop and document the tradeoff.
|
|
193
|
+
- **A better design cannot be agreed upon** -- If three parallel agents produce incompatible designs and no synthesis is possible, stop and escalate with all three proposals documented.
|
|
194
|
+
|
|
195
|
+
### Normal completion:
|
|
196
|
+
|
|
197
|
+
- A GitHub Issue RFC is filed with the problem analysis, proposal, alternatives, and consequences.
|
|
198
|
+
- If implementation is in scope, omp planner creates a follow-up task for the actual refactor.
|
|
199
|
+
- The notepad is updated with key learnings from the exploration.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## <Final_Checklist>
|
|
204
|
+
|
|
205
|
+
- [ ] **Friction-first**: Did you start from a real friction point (hard-to-change code, cascading breakage, unexpected coupling) rather than from a heuristic checklist?
|
|
206
|
+
- [ ] **Shallow module detection**: Did you identify modules whose interface complexity approaches their implementation complexity?
|
|
207
|
+
- [ ] **Sub-agent parallel design**: If proposing a new module interface, did you run parallel agents with different constraints? Are all three constraint perspectives represented in the proposal?
|
|
208
|
+
- [ ] **Deep module validation**: Does the proposed design for each new module have a small, focused interface hiding a rich implementation?
|
|
209
|
+
- [ ] **Dependency categorization**: Did you classify each dependency into one of the four categories (in-process, local-substitutable, remote-but-owned, true external)? Is the testing strategy appropriate for each category?
|
|
210
|
+
- [ ] **RFC completeness**: Does the GitHub Issue RFC include all four sections (Problem, Proposal, Alternatives Considered, Consequences)?
|
|
211
|
+
- [ ] **No over-engineering**: Did you avoid introducing abstractions for single-use logic? Is the change proportional to the friction it resolves?
|
|
212
|
+
- [ ] **Scope bounded**: Are all proposals limited to modules where friction was directly observed?
|
|
213
|
+
- [ ] **Consensus tracked**: If the changes affect multiple teams, is there evidence of review or agreement from each team?
|
|
214
|
+
- [ ] **Notepad updated**: Are key learnings and architectural decisions appended to the notepad for future reference?
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interactive-menu
|
|
3
|
+
description: Pattern for presenting numbered choices to the user in OMP's conversational TUI
|
|
4
|
+
invocation: none (referenced by commands that need selection)
|
|
5
|
+
autoinvoke: false
|
|
6
|
+
---
|
|
7
|
+
# Skill: Interactive Menu
|
|
8
|
+
|
|
9
|
+
## Metadata
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|-------|-------|
|
|
13
|
+
| **ID** | `interactive-menu` |
|
|
14
|
+
| **Keywords** | `interactive-menu:`, `/interactive-menu` |
|
|
15
|
+
| **Tier** | UI Pattern |
|
|
16
|
+
| **Source** | `src/skills/interactive-menu.mts` |
|
|
17
|
+
|
|
18
|
+
## Description
|
|
19
|
+
|
|
20
|
+
OMP does not have a native menu widget. Use this conversational pattern when a command needs user selection.
|
|
21
|
+
|
|
22
|
+
## Interface
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
interface SkillInput {
|
|
26
|
+
trigger: string;
|
|
27
|
+
args: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface SkillOutput {
|
|
31
|
+
status: "ok" | "error";
|
|
32
|
+
message: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export async function activate(input: SkillInput): Promise<SkillOutput>
|
|
36
|
+
export function deactivate(): void
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Implementation
|
|
40
|
+
|
|
41
|
+
Spawns `bin/omp.mjs interactive-menu [args]`. No persistent resources are maintained.
|
|
42
|
+
|
|
43
|
+
## Format
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
{Title}
|
|
47
|
+
|
|
48
|
+
{Optional context line}
|
|
49
|
+
|
|
50
|
+
1. {Option A} -- {description}
|
|
51
|
+
2. {Option B} -- {description}
|
|
52
|
+
3. {Option C} -- {description}
|
|
53
|
+
4. Type something else
|
|
54
|
+
|
|
55
|
+
Your choice:
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Rules
|
|
59
|
+
|
|
60
|
+
1. Present options as a numbered list. Keep descriptions to one line each.
|
|
61
|
+
2. Always include a "Type something else" option as the last item.
|
|
62
|
+
3. Wait for user input. Do not assume a choice.
|
|
63
|
+
4. Accept the number ("1") or the option name ("graphwiki") as valid input.
|
|
64
|
+
5. If the user types something not in the list (via the last option), validate it against allowed values. If invalid, re-present the menu with an error message.
|
|
65
|
+
6. After selection, confirm what was set: "Set graph.provider to graphwiki (local)."
|
|
66
|
+
7. Maximum 6 options. If more choices exist, group them or paginate.
|
|
67
|
+
8. Do not use emoji, decorative borders, or ASCII art. Clean text only.
|
|
68
|
+
|
|
69
|
+
## Example: Graph Provider
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Graph Provider
|
|
73
|
+
|
|
74
|
+
Current: graphwiki (from local config)
|
|
75
|
+
|
|
76
|
+
1. graphwiki -- TypeScript knowledge graph with wiki compilation
|
|
77
|
+
2. graphify -- Python knowledge graph with community detection
|
|
78
|
+
3. none -- Disable graph context
|
|
79
|
+
4. Type something else
|
|
80
|
+
|
|
81
|
+
Your choice:
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
User types: 2
|
|
85
|
+
|
|
86
|
+
Agent responds: "Set graph.provider to graphify (local). Install graphify if not already: pip install graphify"
|
|
87
|
+
|
|
88
|
+
## Example: Orchestration Mode
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Orchestration Mode
|
|
92
|
+
|
|
93
|
+
Current: ralph
|
|
94
|
+
|
|
95
|
+
1. ralph -- Persistence loop with architect verification
|
|
96
|
+
2. autopilot -- Full autonomous pipeline
|
|
97
|
+
3. ultrawork -- Parallel execution
|
|
98
|
+
4. ultraqa -- QA cycling
|
|
99
|
+
5. Type something else
|
|
100
|
+
|
|
101
|
+
Your choice:
|
|
102
|
+
```
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interview
|
|
3
|
+
description: Socratic interview and ambiguity scoring. Use for "interview", "question", "socratic", and "ambiguity".
|
|
4
|
+
trigger: "interview:, /interview, /omp:interview"
|
|
5
|
+
autoinvoke: false
|
|
6
|
+
---
|
|
7
|
+
# Skill: Interview
|
|
8
|
+
|
|
9
|
+
## Metadata
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|-------|-------|
|
|
13
|
+
| **ID** | `interview` |
|
|
14
|
+
| **Keywords** | `interview:`, `/interview` |
|
|
15
|
+
| **Tier** | Planning Tool |
|
|
16
|
+
| **Source** | `src/skills/interview.mts` |
|
|
17
|
+
|
|
18
|
+
## Description
|
|
19
|
+
|
|
20
|
+
Conduct Socratic interviews to expose ambiguity and deepen understanding. Scores ambiguity across categories (Terminology, Scope, Process, Outcome) and surfaces remaining questions and next steps.
|
|
21
|
+
|
|
22
|
+
## Differentiation from deep-interview
|
|
23
|
+
|
|
24
|
+
| Aspect | interview | deep-interview |
|
|
25
|
+
|--------|-----------|----------------|
|
|
26
|
+
| **Purpose** | General Socratic inquiry — expose ambiguity in any problem or plan | Pre-execution gating — mathematical ambiguity scoring before autonomous work begins |
|
|
27
|
+
| **Gating** | Does not block execution; produces a report | Gates entry into ralph/autopilot until score falls below threshold |
|
|
28
|
+
| **Trigger style** | On-demand, conversational | Pipeline step, usually auto-invoked before execution modes |
|
|
29
|
+
| **Output** | Structured interview report with ambiguity table | Pass/fail ambiguity gate + resolved requirements doc |
|
|
30
|
+
|
|
31
|
+
Use `interview` when you want a Socratic exploration of a topic. Use `deep-interview` when you need to gate autonomous execution until ambiguity is resolved.
|
|
32
|
+
|
|
33
|
+
## Interface
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
interface SkillInput {
|
|
37
|
+
trigger: string;
|
|
38
|
+
args: string[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface SkillOutput {
|
|
42
|
+
status: "ok" | "error";
|
|
43
|
+
message: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function activate(input: SkillInput): Promise<SkillOutput>
|
|
47
|
+
export function deactivate(): void
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Implementation
|
|
51
|
+
|
|
52
|
+
Spawns `bin/omp.mjs interview [args]`. No persistent resources are maintained.
|
|
53
|
+
|
|
54
|
+
## When to Use
|
|
55
|
+
|
|
56
|
+
- Unclear requirements
|
|
57
|
+
- Complex problems
|
|
58
|
+
- Before major decisions
|
|
59
|
+
- Identifying blind spots
|
|
60
|
+
- Challenge assumptions
|
|
61
|
+
|
|
62
|
+
## Interview Process
|
|
63
|
+
|
|
64
|
+
### 1. Establish Context
|
|
65
|
+
- What is the problem?
|
|
66
|
+
- What do we think we know?
|
|
67
|
+
- What's the goal?
|
|
68
|
+
|
|
69
|
+
### 2. Probe Assumptions
|
|
70
|
+
- What are we assuming?
|
|
71
|
+
- Why are we assuming this?
|
|
72
|
+
- What if we're wrong?
|
|
73
|
+
|
|
74
|
+
### 3. Explore Evidence
|
|
75
|
+
- What evidence do we have?
|
|
76
|
+
- How strong is it?
|
|
77
|
+
- What's missing?
|
|
78
|
+
|
|
79
|
+
### 4. Test Alternatives
|
|
80
|
+
- What else could be true?
|
|
81
|
+
- What other explanations exist?
|
|
82
|
+
- What would disprove this?
|
|
83
|
+
|
|
84
|
+
### 5. Assess Uncertainty
|
|
85
|
+
- What don't we know?
|
|
86
|
+
- How confident are we?
|
|
87
|
+
- What would change our view?
|
|
88
|
+
|
|
89
|
+
## Question Types
|
|
90
|
+
|
|
91
|
+
### Clarifying
|
|
92
|
+
- "What do you mean by X?"
|
|
93
|
+
- "Can you give an example?"
|
|
94
|
+
- "How is this different from Y?"
|
|
95
|
+
|
|
96
|
+
### Assumption Probing
|
|
97
|
+
- "What are you assuming here?"
|
|
98
|
+
- "Why assume X rather than Y?"
|
|
99
|
+
- "What if that assumption is wrong?"
|
|
100
|
+
|
|
101
|
+
### Evidence Evaluation
|
|
102
|
+
- "What evidence supports this?"
|
|
103
|
+
- "How would we know if this is wrong?"
|
|
104
|
+
- "What's the strongest evidence?"
|
|
105
|
+
|
|
106
|
+
### Alternative Exploration
|
|
107
|
+
- "What other approaches exist?"
|
|
108
|
+
- "What would happen if we did X instead?"
|
|
109
|
+
- "What's the best alternative and why?"
|
|
110
|
+
|
|
111
|
+
### Implications Testing
|
|
112
|
+
- "If this is true, what else must be true?"
|
|
113
|
+
- "What would follow from this?"
|
|
114
|
+
- "What are the consequences?"
|
|
115
|
+
|
|
116
|
+
## Ambiguity Scoring
|
|
117
|
+
|
|
118
|
+
Rate ambiguity on scale:
|
|
119
|
+
|
|
120
|
+
| Score | Level | Description |
|
|
121
|
+
|-------|-------|-------------|
|
|
122
|
+
| 1 | Clear | No ambiguity, single interpretation |
|
|
123
|
+
| 2 | Minor | Slight ambiguity, mostly clear |
|
|
124
|
+
| 3 | Moderate | Notable ambiguity, needs clarification |
|
|
125
|
+
| 4 | Significant | Major ambiguity, multiple interpretations |
|
|
126
|
+
| 5 | Severe | Fundamental ambiguity, needs resolution |
|
|
127
|
+
|
|
128
|
+
### Ambiguity Categories
|
|
129
|
+
|
|
130
|
+
**Terminology**
|
|
131
|
+
- Undefined terms
|
|
132
|
+
- Multiple meanings
|
|
133
|
+
- Jargon without explanation
|
|
134
|
+
|
|
135
|
+
**Scope**
|
|
136
|
+
- Boundary unclear
|
|
137
|
+
- Inclusion/exclusion fuzzy
|
|
138
|
+
- Overlap undefined
|
|
139
|
+
|
|
140
|
+
**Process**
|
|
141
|
+
- Steps missing
|
|
142
|
+
- Order ambiguous
|
|
143
|
+
- Responsibilities unclear
|
|
144
|
+
|
|
145
|
+
**Outcome**
|
|
146
|
+
- Success undefined
|
|
147
|
+
- Metrics absent
|
|
148
|
+
- Trade-offs unstated
|
|
149
|
+
|
|
150
|
+
## Output Format
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
## Interview: {topic}
|
|
154
|
+
|
|
155
|
+
### Opening Context
|
|
156
|
+
{what we discussed}
|
|
157
|
+
|
|
158
|
+
### Key Exchanges
|
|
159
|
+
|
|
160
|
+
#### Exchange 1: {subject}
|
|
161
|
+
**Q:** {question}
|
|
162
|
+
**A:** {answer}
|
|
163
|
+
**Ambiguity:** {score} - {notes}
|
|
164
|
+
|
|
165
|
+
#### Exchange 2: {subject}
|
|
166
|
+
...
|
|
167
|
+
|
|
168
|
+
### Assumptions Exposed
|
|
169
|
+
- **{assumption}** — {questioning}
|
|
170
|
+
- **{assumption}** — {questioning}
|
|
171
|
+
|
|
172
|
+
### Evidence Gaps
|
|
173
|
+
- **{gap}** — {what's missing}
|
|
174
|
+
- **{gap}** — {what's missing}
|
|
175
|
+
|
|
176
|
+
### Alternative Views
|
|
177
|
+
- **{alternative}** — {description}
|
|
178
|
+
- **{alternative}** — {description}
|
|
179
|
+
|
|
180
|
+
### Ambiguity Summary
|
|
181
|
+
| Category | Score | Key Issues |
|
|
182
|
+
|----------|-------|------------|
|
|
183
|
+
| Terminology | {n} | {issues} |
|
|
184
|
+
| Scope | {n} | {issues} |
|
|
185
|
+
| Process | {n} | {issues} |
|
|
186
|
+
| Outcome | {n} | {issues} |
|
|
187
|
+
| **Overall** | **{n}** | **{summary}** |
|
|
188
|
+
|
|
189
|
+
### Remaining Questions
|
|
190
|
+
1. {question}
|
|
191
|
+
2. {question}
|
|
192
|
+
|
|
193
|
+
### Next Steps
|
|
194
|
+
{how to resolve remaining ambiguity}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Constraints
|
|
198
|
+
|
|
199
|
+
- Ask genuine questions
|
|
200
|
+
- Follow the thread
|
|
201
|
+
- Don't lead the witness
|
|
202
|
+
- Document all ambiguity
|
|
203
|
+
- Don't resolve prematurely
|