oh-my-githubcopilot 1.5.7 → 1.8.0-alpha.afa30a7

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.
@@ -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
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: notifications
3
+ description: Send and manage runtime notifications across Telegram, Discord, Slack, and Email channels
4
+ trigger: "notifications:, /notifications, /omp:notifications"
5
+ autoinvoke: false
6
+ ---
7
+ # Skill: Notifications
8
+
9
+ ## Metadata
10
+
11
+ | Field | Value |
12
+ |-------|-------|
13
+ | **ID** | `notifications` |
14
+ | **Keywords** | `notifications:`, `/notifications` |
15
+ | **Tier** | Developer Tool |
16
+ | **Source** | `src/skills/notifications.mts` |
17
+
18
+ ## Description
19
+
20
+ Send and manage notification delivery across multiple channels (Telegram, Discord, Slack, Email). Handles immediate alerts, digests, and escalation patterns at runtime.
21
+
22
+ ## Differentiation from configure-notifications
23
+
24
+ | Aspect | notifications | configure-notifications |
25
+ |--------|---------------|-------------------------|
26
+ | **Purpose** | Runtime notification delivery, channel management, testing, escalation | One-time setup of notification credentials and integrations |
27
+ | **Scope** | Send alerts, manage preferences, configure digest schedules, escalate | Configure webhook URLs and tokens |
28
+ | **Use when** | You need to act on notifications or manage delivery rules | You are setting up a new integration for the first time |
29
+
30
+ ## Interface
31
+
32
+ ```typescript
33
+ interface SkillInput {
34
+ trigger: string;
35
+ args: string[];
36
+ }
37
+
38
+ interface SkillOutput {
39
+ status: "ok" | "error";
40
+ message: string;
41
+ }
42
+
43
+ export async function activate(input: SkillInput): Promise<SkillOutput>
44
+ export function deactivate(): void
45
+ ```
46
+
47
+ ## Implementation
48
+
49
+ Spawns `bin/omp.mjs notifications [args]`. No persistent resources are maintained.
50
+
51
+ ## When to Use
52
+
53
+ - Setting up alerts
54
+ - Configuring notification channels
55
+ - Managing notification preferences
56
+ - Troubleshooting missing alerts
57
+
58
+ ## Notification Channels
59
+
60
+ ### Telegram
61
+ - Fast delivery
62
+ - Supports markdown
63
+ - Group chats
64
+ - Bot integration
65
+
66
+ ### Discord
67
+ - Webhook-based
68
+ - Rich embeds
69
+ - Channels and roles
70
+ - High volume
71
+
72
+ ### Slack
73
+ - Channel-based
74
+ - App integration
75
+ - Threaded
76
+ - Enterprise friendly
77
+
78
+ ### Email
79
+ - Universal
80
+ - SMTP based
81
+ - Digest options
82
+ - Fallback option
83
+
84
+ ## Configuration
85
+
86
+ ### Telegram Setup
87
+ ```yaml
88
+ telegram:
89
+ bot_token: {token}
90
+ chat_id: {chat_id}
91
+ parse_mode: markdown
92
+ ```
93
+
94
+ ### Discord Setup
95
+ ```yaml
96
+ discord:
97
+ webhook_url: {url}
98
+ username: {bot_name}
99
+ embed_color: {hex}
100
+ ```
101
+
102
+ ### Slack Setup
103
+ ```yaml
104
+ slack:
105
+ webhook_url: {url}
106
+ channel: {channel}
107
+ username: {bot_name}
108
+ ```
109
+
110
+ ## Notification Types
111
+
112
+ ### Immediate
113
+ - Errors and failures
114
+ - Critical alerts
115
+ - Completion notifications
116
+ - Mentions and replies
117
+
118
+ ### Digest
119
+ - Summary of activity
120
+ - Batch reports
121
+ - Periodic updates
122
+ - Non-urgent changes
123
+
124
+ ### Escalation
125
+ - Alert escalation
126
+ - No response follow-up
127
+ - Priority boosts
128
+ - Emergency alerts
129
+
130
+ ## Commands
131
+
132
+ ### Configure Channel
133
+ ```
134
+ /omp:notifications configure {channel}
135
+ ```
136
+
137
+ ### Test Notification
138
+ ```
139
+ /omp:notifications test {channel}
140
+ ```
141
+
142
+ ### List Channels
143
+ ```
144
+ /omp:notifications list
145
+ ```
146
+
147
+ ### Set Preferences
148
+ ```
149
+ /omp:notifications set {type} {channel}
150
+ ```
151
+
152
+ ## Output Format
153
+
154
+ ```
155
+ ## Notifications: {project}
156
+
157
+ ### Configured Channels
158
+ | Channel | Status | Last Test |
159
+ |---------|--------|-----------|
160
+ | Telegram | OK | {date} |
161
+ | Discord | OK | {date} |
162
+
163
+ ### Notification Preferences
164
+
165
+ #### Immediate
166
+ | Event | Channel | Enabled |
167
+ |-------|---------|---------|
168
+ | Error | Telegram | yes |
169
+ | Complete | Discord | yes |
170
+
171
+ #### Digest
172
+ | Schedule | Channel | Enabled |
173
+ |---------|---------|---------|
174
+ | Daily | Email | yes |
175
+
176
+ ### Recent Notifications
177
+ - **{time}** — {event} -> {channel}
178
+
179
+ ### Configuration Files
180
+ - `.omp/notifications/config.yaml`
181
+ - `.omp/notifications/templates/`
182
+ ```
183
+
184
+ ## Constraints
185
+
186
+ - Test after configuration
187
+ - Don't over-notify
188
+ - Respect quiet hours
189
+ - Secure sensitive tokens
190
+ - Provide unsubscribe