oh-my-githubcopilot 1.4.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.
Files changed (86) hide show
  1. package/.claude-plugin/plugin.json +41 -0
  2. package/AGENTS.md +107 -0
  3. package/CHANGELOG.md +104 -0
  4. package/LICENSE +190 -0
  5. package/README.de.md +53 -0
  6. package/README.es.md +53 -0
  7. package/README.fr.md +53 -0
  8. package/README.it.md +53 -0
  9. package/README.ja.md +53 -0
  10. package/README.ko.md +53 -0
  11. package/README.md +139 -0
  12. package/README.pt.md +53 -0
  13. package/README.ru.md +53 -0
  14. package/README.tr.md +53 -0
  15. package/README.vi.md +53 -0
  16. package/README.zh.md +53 -0
  17. package/bin/omp.mjs +59 -0
  18. package/bin/omp.mjs.map +7 -0
  19. package/dist/hooks/delegation-enforcer.mjs +96 -0
  20. package/dist/hooks/delegation-enforcer.mjs.map +7 -0
  21. package/dist/hooks/hud-emitter.mjs +167 -0
  22. package/dist/hooks/hud-emitter.mjs.map +7 -0
  23. package/dist/hooks/keyword-detector.mjs +134 -0
  24. package/dist/hooks/keyword-detector.mjs.map +7 -0
  25. package/dist/hooks/model-router.mjs +79 -0
  26. package/dist/hooks/model-router.mjs.map +7 -0
  27. package/dist/hooks/stop-continuation.mjs +83 -0
  28. package/dist/hooks/stop-continuation.mjs.map +7 -0
  29. package/dist/hooks/token-tracker.mjs +181 -0
  30. package/dist/hooks/token-tracker.mjs.map +7 -0
  31. package/dist/mcp/server.mjs +28492 -0
  32. package/dist/mcp/server.mjs.map +7 -0
  33. package/dist/skills/mcp-setup.mjs +42 -0
  34. package/dist/skills/mcp-setup.mjs.map +7 -0
  35. package/dist/skills/setup.mjs +38 -0
  36. package/dist/skills/setup.mjs.map +7 -0
  37. package/hooks/hooks.json +47 -0
  38. package/package.json +70 -0
  39. package/skills/autopilot/SKILL.md +35 -0
  40. package/skills/configure-notifications/SKILL.md +35 -0
  41. package/skills/deep-interview/SKILL.md +35 -0
  42. package/skills/ecomode/SKILL.md +35 -0
  43. package/skills/graph-provider/SKILL.md +77 -0
  44. package/skills/graphify/SKILL.md +51 -0
  45. package/skills/graphwiki/SKILL.md +66 -0
  46. package/skills/hud/SKILL.md +35 -0
  47. package/skills/learner/SKILL.md +35 -0
  48. package/skills/mcp-setup/SKILL.md +34 -0
  49. package/skills/note/SKILL.md +35 -0
  50. package/skills/omp-plan/SKILL.md +35 -0
  51. package/skills/omp-setup/SKILL.md +37 -0
  52. package/skills/pipeline/SKILL.md +35 -0
  53. package/skills/psm/SKILL.md +35 -0
  54. package/skills/ralph/SKILL.md +35 -0
  55. package/skills/release/SKILL.md +35 -0
  56. package/skills/setup/SKILL.md +43 -0
  57. package/skills/spending/SKILL.md +86 -0
  58. package/skills/swarm/SKILL.md +35 -0
  59. package/skills/swe-bench/SKILL.md +35 -0
  60. package/skills/team/SKILL.md +35 -0
  61. package/skills/trace/SKILL.md +35 -0
  62. package/skills/ultrawork/SKILL.md +35 -0
  63. package/skills/wiki/SKILL.md +35 -0
  64. package/src/agents/analyst.md +103 -0
  65. package/src/agents/architect.md +169 -0
  66. package/src/agents/code-reviewer.md +135 -0
  67. package/src/agents/critic.md +196 -0
  68. package/src/agents/debugger.md +132 -0
  69. package/src/agents/designer.md +103 -0
  70. package/src/agents/document-specialist.md +111 -0
  71. package/src/agents/executor.md +120 -0
  72. package/src/agents/explorer.md +98 -0
  73. package/src/agents/git-master.md +92 -0
  74. package/src/agents/orchestrator.md +125 -0
  75. package/src/agents/planner.md +106 -0
  76. package/src/agents/qa-tester.md +129 -0
  77. package/src/agents/researcher.md +102 -0
  78. package/src/agents/reviewer.md +100 -0
  79. package/src/agents/scientist.md +150 -0
  80. package/src/agents/security-reviewer.md +132 -0
  81. package/src/agents/simplifier.md +109 -0
  82. package/src/agents/test-engineer.md +124 -0
  83. package/src/agents/tester.md +102 -0
  84. package/src/agents/tracer.md +160 -0
  85. package/src/agents/verifier.md +100 -0
  86. package/src/agents/writer.md +96 -0
@@ -0,0 +1,42 @@
1
+ // src/skills/mcp-setup.mts
2
+ import { spawn } from "child_process";
3
+ async function activateMcpSetupSkill(input) {
4
+ const args = input?.args ?? [];
5
+ const isInteractive = args.includes("--interactive") || args.length === 0;
6
+ const spawnArgs = ["setup", "--mcp-only"];
7
+ if (!isInteractive) {
8
+ spawnArgs.push("--non-interactive");
9
+ }
10
+ for (const arg of args) {
11
+ if (arg !== "--interactive" && !spawnArgs.includes(arg)) {
12
+ spawnArgs.push(arg);
13
+ }
14
+ }
15
+ return new Promise((resolve) => {
16
+ const child = spawn("omp", spawnArgs, { stdio: "inherit" });
17
+ child.on("close", (code) => {
18
+ if (code === 0) {
19
+ resolve({
20
+ status: "ok",
21
+ message: "MCP configuration complete.",
22
+ hud: "MCP servers configured."
23
+ });
24
+ } else {
25
+ resolve({
26
+ status: "error",
27
+ message: `MCP configuration exited with code ${code}.`
28
+ });
29
+ }
30
+ });
31
+ child.on("error", (err) => {
32
+ resolve({
33
+ status: "error",
34
+ message: `Failed to spawn omp: ${err.message}`
35
+ });
36
+ });
37
+ });
38
+ }
39
+ export {
40
+ activateMcpSetupSkill
41
+ };
42
+ //# sourceMappingURL=mcp-setup.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/skills/mcp-setup.mts"],
4
+ "sourcesContent": ["/**\n * MCP Setup Skill\n *\n * ID: mcp-setup\n * Keywords: mcp-setup:, /mcp\n * Phase: MCP configuration only (Phase 2)\n *\n * This skill is lazy-loaded \u2014 it is not loaded until triggered.\n */\n\nimport { spawn } from \"child_process\";\n\nexport interface McpSetupSkillInput {\n args?: string[];\n}\n\nexport interface McpSetupSkillOutput {\n status: \"ok\" | \"error\";\n message: string;\n hud?: string;\n}\n\n/**\n * Activate the MCP configuration phase.\n * Uses --mcp-only --non-interactive for programmatic invocation,\n * or interactive mode if no args provided.\n */\nexport async function activateMcpSetupSkill(\n input?: McpSetupSkillInput\n): Promise<McpSetupSkillOutput> {\n const args = input?.args ?? [];\n\n // Detect interactive vs programmatic mode\n const isInteractive = args.includes(\"--interactive\") || args.length === 0;\n\n const spawnArgs = [\"setup\", \"--mcp-only\"];\n if (!isInteractive) {\n spawnArgs.push(\"--non-interactive\");\n }\n // Pass through any other args\n for (const arg of args) {\n if (arg !== \"--interactive\" && !spawnArgs.includes(arg)) {\n spawnArgs.push(arg);\n }\n }\n\n return new Promise((resolve) => {\n const child = spawn(\"omp\", spawnArgs, { stdio: \"inherit\" });\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve({\n status: \"ok\",\n message: \"MCP configuration complete.\",\n hud: \"MCP servers configured.\",\n });\n } else {\n resolve({\n status: \"error\",\n message: `MCP configuration exited with code ${code}.`,\n });\n }\n });\n child.on(\"error\", (err) => {\n resolve({\n status: \"error\",\n message: `Failed to spawn omp: ${err.message}`,\n });\n });\n });\n}\n"],
5
+ "mappings": ";AAUA,SAAS,aAAa;AAiBtB,eAAsB,sBACpB,OAC8B;AAC9B,QAAM,OAAO,OAAO,QAAQ,CAAC;AAG7B,QAAM,gBAAgB,KAAK,SAAS,eAAe,KAAK,KAAK,WAAW;AAExE,QAAM,YAAY,CAAC,SAAS,YAAY;AACxC,MAAI,CAAC,eAAe;AAClB,cAAU,KAAK,mBAAmB;AAAA,EACpC;AAEA,aAAW,OAAO,MAAM;AACtB,QAAI,QAAQ,mBAAmB,CAAC,UAAU,SAAS,GAAG,GAAG;AACvD,gBAAU,KAAK,GAAG;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,MAAM,OAAO,WAAW,EAAE,OAAO,UAAU,CAAC;AAC1D,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,KAAK;AAAA,QACP,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ;AAAA,UACN,QAAQ;AAAA,UACR,SAAS,sCAAsC,IAAI;AAAA,QACrD,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,wBAAwB,IAAI,OAAO;AAAA,MAC9C,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,38 @@
1
+ // src/skills/setup.mts
2
+ async function activate(input2) {
3
+ const { spawn } = await import("child_process");
4
+ const isNonInteractive = input2.args.includes("--non-interactive");
5
+ const isMcpOnly = input2.args.includes("--mcp-only");
6
+ const isSkipMcp = input2.args.includes("--skip-mcp");
7
+ const baseArgs = ["bin/omp.mjs", "setup"];
8
+ if (isMcpOnly) baseArgs.push("--mcp-only");
9
+ if (isSkipMcp) baseArgs.push("--skip-mcp");
10
+ if (isNonInteractive) baseArgs.push("--non-interactive");
11
+ return new Promise((resolve) => {
12
+ const child = spawn("node", baseArgs, { stdio: "inherit" });
13
+ child.on("close", (code) => {
14
+ if (code === 0) {
15
+ resolve({ status: "ok", message: "OMP setup complete." });
16
+ } else {
17
+ resolve({ status: "error", message: `Setup exited with code ${code}` });
18
+ }
19
+ });
20
+ child.on("error", (err) => {
21
+ resolve({ status: "error", message: `Failed to spawn omp setup: ${err.message}` });
22
+ });
23
+ });
24
+ }
25
+ var input = JSON.parse(await readStdin());
26
+ var output = await activate(input);
27
+ console.log(JSON.stringify(output));
28
+ async function readStdin() {
29
+ const chunks = [];
30
+ for await (const chunk of process.stdin) {
31
+ chunks.push(chunk);
32
+ }
33
+ return chunks.join("");
34
+ }
35
+ export {
36
+ activate
37
+ };
38
+ //# sourceMappingURL=setup.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/skills/setup.mts"],
4
+ "sourcesContent": ["/**\n * setup skill\n *\n * Orchestrates both phases of the OMP setup wizard:\n * Phase 1: Base OMP setup (SQLite DB, directory structure, first-run guidance)\n * Phase 2: MCP server configuration\n *\n * Invoked via `/setup` or `setup:` keyword.\n * For MCP-only setup, use the `mcp-setup` skill instead.\n */\n\nexport interface SkillInput {\n trigger: string;\n args: string[];\n}\n\nexport interface SkillOutput {\n status: \"ok\" | \"error\";\n message: string;\n}\n\nexport async function activate(input: SkillInput): Promise<SkillOutput> {\n const { spawn } = await import(\"child_process\");\n\n const isNonInteractive = input.args.includes(\"--non-interactive\");\n const isMcpOnly = input.args.includes(\"--mcp-only\");\n const isSkipMcp = input.args.includes(\"--skip-mcp\");\n\n const baseArgs = [\"bin/omp.mjs\", \"setup\"];\n if (isMcpOnly) baseArgs.push(\"--mcp-only\");\n if (isSkipMcp) baseArgs.push(\"--skip-mcp\");\n if (isNonInteractive) baseArgs.push(\"--non-interactive\");\n\n return new Promise((resolve) => {\n const child = spawn(\"node\", baseArgs, { stdio: \"inherit\" });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve({ status: \"ok\", message: \"OMP setup complete.\" });\n } else {\n resolve({ status: \"error\", message: `Setup exited with code ${code}` });\n }\n });\n\n child.on(\"error\", (err) => {\n resolve({ status: \"error\", message: `Failed to spawn omp setup: ${err.message}` });\n });\n });\n}\n\n// Standalone entry point\nconst input: SkillInput = JSON.parse(await readStdin());\nconst output = await activate(input);\nconsole.log(JSON.stringify(output));\n\nasync function readStdin(): Promise<string> {\n const chunks: string[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n return chunks.join(\"\");\n}\n"],
5
+ "mappings": ";AAqBA,eAAsB,SAASA,QAAyC;AACtE,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAE9C,QAAM,mBAAmBA,OAAM,KAAK,SAAS,mBAAmB;AAChE,QAAM,YAAYA,OAAM,KAAK,SAAS,YAAY;AAClD,QAAM,YAAYA,OAAM,KAAK,SAAS,YAAY;AAElD,QAAM,WAAW,CAAC,eAAe,OAAO;AACxC,MAAI,UAAW,UAAS,KAAK,YAAY;AACzC,MAAI,UAAW,UAAS,KAAK,YAAY;AACzC,MAAI,iBAAkB,UAAS,KAAK,mBAAmB;AAEvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,MAAM,QAAQ,UAAU,EAAE,OAAO,UAAU,CAAC;AAE1D,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ,EAAE,QAAQ,MAAM,SAAS,sBAAsB,CAAC;AAAA,MAC1D,OAAO;AACL,gBAAQ,EAAE,QAAQ,SAAS,SAAS,0BAA0B,IAAI,GAAG,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ,EAAE,QAAQ,SAAS,SAAS,8BAA8B,IAAI,OAAO,GAAG,CAAC;AAAA,IACnF,CAAC;AAAA,EACH,CAAC;AACH;AAGA,IAAM,QAAoB,KAAK,MAAM,MAAM,UAAU,CAAC;AACtD,IAAM,SAAS,MAAM,SAAS,KAAK;AACnC,QAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAElC,eAAe,YAA6B;AAC1C,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,QAAQ,OAAO;AACvC,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO,OAAO,KAAK,EAAE;AACvB;",
6
+ "names": ["input"]
7
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "schemaVersion": "1.0",
3
+ "hooks": [
4
+ {
5
+ "id": "keyword-detector",
6
+ "entry": "./dist/hooks/keyword-detector.mjs",
7
+ "trigger": "UserPromptSubmitted",
8
+ "timeoutMs": 200,
9
+ "priority": 100
10
+ },
11
+ {
12
+ "id": "delegation-enforcer",
13
+ "entry": "./dist/hooks/delegation-enforcer.mjs",
14
+ "trigger": "PreToolUse",
15
+ "timeoutMs": 200,
16
+ "priority": 90
17
+ },
18
+ {
19
+ "id": "model-router",
20
+ "entry": "./dist/hooks/model-router.mjs",
21
+ "trigger": "PreToolUse",
22
+ "timeoutMs": 200,
23
+ "priority": 80
24
+ },
25
+ {
26
+ "id": "token-tracker",
27
+ "entry": "./dist/hooks/token-tracker.mjs",
28
+ "trigger": "PostToolUse",
29
+ "timeoutMs": 200,
30
+ "priority": 70
31
+ },
32
+ {
33
+ "id": "hud-emitter",
34
+ "entry": "./dist/hooks/hud-emitter.mjs",
35
+ "trigger": "PostToolUse",
36
+ "timeoutMs": 200,
37
+ "priority": 60
38
+ },
39
+ {
40
+ "id": "stop-continuation",
41
+ "entry": "./dist/hooks/stop-continuation.mjs",
42
+ "trigger": "PostToolUse",
43
+ "timeoutMs": 200,
44
+ "priority": 50
45
+ }
46
+ ]
47
+ }
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "oh-my-githubcopilot",
3
+ "version": "1.4.0",
4
+ "description": "Multi-agent orchestration for GitHub Copilot CLI. 23 agents, 25 skills, parallel execution, HUD, PSM, SWE-bench.",
5
+ "author": {
6
+ "name": "r3dlex"
7
+ },
8
+ "repository": "https://github.com/r3dlex/oh-my-githubcopilot",
9
+ "license": "Apache-2.0",
10
+ "keywords": [
11
+ "orchestration",
12
+ "multi-agent",
13
+ "autopilot",
14
+ "swe-bench",
15
+ "hud",
16
+ "copilot-cli"
17
+ ],
18
+ "type": "module",
19
+ "main": "dist/index.mjs",
20
+ "bin": {
21
+ "omp": "./bin/omp.mjs"
22
+ },
23
+ "files": [
24
+ "dist/",
25
+ "bin/",
26
+ "skills/",
27
+ "hooks/",
28
+ "src/agents/",
29
+ ".claude-plugin/",
30
+ "AGENTS.md",
31
+ "CHANGELOG.md",
32
+ "LICENSE"
33
+ ],
34
+ "scripts": {
35
+ "build": "node --import tsx esbuild.config.mts",
36
+ "dev": "node --import tsx --watch esbuild.config.mts",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:coverage": "vitest run --coverage",
40
+ "lint": "eslint src/",
41
+ "format": "prettier --write src/",
42
+ "typecheck": "tsc --noEmit",
43
+ "sync-claude-plugin": "cp .github/plugin/plugin.json .claude-plugin/plugin.json",
44
+ "prepublishOnly": "npm run build && npm run sync-claude-plugin",
45
+ "archgate:init": "npx archgate init --editor claude",
46
+ "archgate:check": "npx archgate check"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.0.0",
50
+ "better-sqlite3": "^11.0.0",
51
+ "simple-git": "^3.0.0",
52
+ "yaml": "^2.0.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/better-sqlite3": "^7.0.0",
56
+ "@types/node": "^22.0.0",
57
+ "@vitest/coverage-v8": "^2.1.9",
58
+ "archgate": "^0.27.0",
59
+ "esbuild": "^0.24.0",
60
+ "eslint": "^9.0.0",
61
+ "prettier": "^3.0.0",
62
+ "tsx": "^4.0.0",
63
+ "typescript": "^5.6.0",
64
+ "typescript-eslint": "^8.58.1",
65
+ "vitest": "^2.0.0"
66
+ },
67
+ "engines": {
68
+ "node": ">=22.0.0"
69
+ }
70
+ }
@@ -0,0 +1,35 @@
1
+ # Skill: Autopilot
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `autopilot` |
8
+ | **Keywords** | `autopilot:`, `/autopilot` |
9
+ | **Tier** | Execution Mode |
10
+ | **Source** | `src/skills/autopilot.mts` |
11
+
12
+ ## Description
13
+
14
+ Autonomous end-to-end execution from idea to working code. Handles routing, delegation, and verification internally.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Activates the `autopilot` orchestration mode by spawning `bin/omp.mjs autopilot [args]`. No persistent resources are maintained.
@@ -0,0 +1,35 @@
1
+ # Skill: Configure-Notifications
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `configure-notifications` |
8
+ | **Keywords** | `configure-notifications:`, `/configure-notifications` |
9
+ | **Tier** | Developer Tool |
10
+ | **Source** | `src/skills/configure-notifications.mts` |
11
+
12
+ ## Description
13
+
14
+ Configure notification integrations: Telegram, Discord, Slack.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Spawns `bin/omp.mjs configure-notifications [args]`. No persistent resources are maintained.
@@ -0,0 +1,35 @@
1
+ # Skill: Deep-Interview
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `deep-interview` |
8
+ | **Keywords** | `deep interview:`, `/deep-interview` |
9
+ | **Tier** | Planning Tool |
10
+ | **Source** | `src/skills/deep-interview.mts` |
11
+
12
+ ## Description
13
+
14
+ Socratic deep interview with mathematical ambiguity gating before autonomous execution.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Spawns `bin/omp.mjs deep-interview [args]`. No persistent resources are maintained.
@@ -0,0 +1,35 @@
1
+ # Skill: Ecomode
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `ecomode` |
8
+ | **Keywords** | `eco:`, `/eco`, `ecomode:` |
9
+ | **Tier** | Execution Mode |
10
+ | **Source** | `src/skills/ecomode.mts` |
11
+
12
+ ## Description
13
+
14
+ Token budget mode. Prioritizes task completion over exploration. Suppresses verbose output.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Activates the `ecomode` token-budget mode by spawning `bin/omp.mjs ecomode [args]`. No persistent resources are maintained.
@@ -0,0 +1,77 @@
1
+ # Skill: Graph Provider
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `graph-provider` |
8
+ | **Keywords** | `graph:`, `/graph-provider` |
9
+ | **Tier** | developer |
10
+ | **Source** | `src/skills/graph-provider.mts` |
11
+
12
+ ## Description
13
+
14
+ Manage and use the active graph provider (graphify or graphwiki). Delegates to whichever adapter is configured, allowing users to switch between providers, build graphs, and query the active knowledge graph.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ action: 'get' | 'set' | 'list' | 'build' | 'status' | 'clean' | 'query';
21
+ provider?: string;
22
+ question?: string;
23
+ options?: { incremental?: boolean };
24
+ }
25
+
26
+ interface SkillOutput {
27
+ status: "ok" | "error";
28
+ message: string;
29
+ data?: unknown;
30
+ }
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Manages the active graph provider configuration stored in `.omp/config.json`. Routes actions to the configured provider adapter (graphify or graphwiki). Provides a unified interface for graph operations across multiple provider implementations.
36
+
37
+ ## Actions
38
+
39
+ ### get
40
+ Show the currently active graph provider.
41
+
42
+ ### set <provider>
43
+ Switch the active graph provider (saved to local .omp/config.json).
44
+
45
+ ```
46
+ graph: set graphwiki
47
+ graph: set graphify
48
+ ```
49
+
50
+ ### list
51
+ List all available graph providers.
52
+
53
+ ### build [--incremental]
54
+ Build the knowledge graph using the active provider.
55
+
56
+ ### status
57
+ Show whether the active provider's graph exists.
58
+
59
+ ### clean
60
+ Remove the active provider's output directory.
61
+
62
+ ### query <question>
63
+ Query the graph (graphwiki provider only).
64
+
65
+ ## Configuration
66
+
67
+ Add to `.omp/config.json` or `~/.omp/config.json`:
68
+
69
+ ```json
70
+ {
71
+ "graph": {
72
+ "provider": "graphwiki"
73
+ }
74
+ }
75
+ ```
76
+
77
+ Resolution: local > global > default (`graphwiki`).
@@ -0,0 +1,51 @@
1
+ # Skill: Graphify
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `graphify` |
8
+ | **Keywords** | `graph build`, `build graph`, `/graphify`, `/omp:graphify` |
9
+ | **Tier** | developer |
10
+ | **Source** | `src/skills/graphify.mts` |
11
+
12
+ ## Description
13
+
14
+ Build and manage a knowledge graph of the codebase using the graphify CLI. Reduces token usage by 70x+ per query by replacing raw file searches with graph lookups. This OMP plugin skill is scoped to `/omp:graphify` in OMP sessions. The standalone `~/.claude/skills/graphify` skill (`/graphify`) is for standalone Claude Code sessions — no conflict.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ action: 'build' | 'status' | 'clean';
21
+ options?: { incremental?: boolean };
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ data?: {
28
+ nodeCount?: number;
29
+ edgeCount?: number;
30
+ communityCount?: number;
31
+ outputPath?: string;
32
+ };
33
+ }
34
+ ```
35
+
36
+ ## Implementation
37
+
38
+ Invokes the `graphify` CLI tool to analyze the workspace and generate a knowledge graph stored in `graphify-out/graph.json`. Provides status reporting on graph size and last modified time, and can incrementally update existing graphs.
39
+
40
+ ## Actions
41
+
42
+ ### build [--incremental]
43
+ Build the knowledge graph for the current workspace using `graphify`.
44
+ Reports: node count, edge count, community count, output path.
45
+ Install: `pip install graphify`
46
+
47
+ ### status
48
+ Show whether graphify-out/graph.json exists, its size, and last modified time.
49
+
50
+ ### clean
51
+ Remove the graphify-out/ directory.
@@ -0,0 +1,66 @@
1
+ # Skill: GraphWiki
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `graphwiki` |
8
+ | **Keywords** | `graphwiki:`, `/graphwiki`, `/omp:graphwiki` |
9
+ | **Tier** | developer |
10
+ | **Source** | `src/skills/graphwiki.mts` |
11
+
12
+ ## Description
13
+
14
+ Direct access to graphwiki CLI for graph querying, path finding, linting, and refinement. Provides comprehensive knowledge graph management beyond the generic graph-provider interface, including zero-token path finding and structural graph analysis.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ action: 'query' | 'path' | 'lint' | 'refine' | 'build' | 'status' | 'clean';
21
+ question?: string;
22
+ from?: string;
23
+ to?: string;
24
+ options?: { review?: boolean; update?: boolean };
25
+ }
26
+
27
+ interface SkillOutput {
28
+ status: "ok" | "error";
29
+ message: string;
30
+ data?: unknown;
31
+ }
32
+ ```
33
+
34
+ ## Implementation
35
+
36
+ Provides a thin wrapper around the graphwiki CLI tool (`npm install -g graphwiki`). Routes user actions to appropriate graphwiki subcommands and parses output into structured responses.
37
+
38
+ ## Actions
39
+
40
+ ### query <question>
41
+ Query the knowledge graph with a natural language question.
42
+ Uses graphwiki's token-budget-aware query engine.
43
+
44
+ ### path <from> <to>
45
+ Find the structural path between two nodes (zero LLM tokens).
46
+
47
+ ### lint
48
+ Check the graph for orphan nodes, missing edges, and structural issues.
49
+
50
+ ### refine [--review]
51
+ Refine the graph. Add `--review` to run in review mode.
52
+
53
+ ### build [--update]
54
+ Build the knowledge graph. Add `--update` for incremental build.
55
+
56
+ ### status
57
+ Show whether graphwiki-out/graph.json exists and its output paths.
58
+
59
+ ### clean
60
+ Remove the graphwiki-out/ directory.
61
+
62
+ ## Installation
63
+
64
+ ```bash
65
+ npm install -g graphwiki
66
+ ```
@@ -0,0 +1,35 @@
1
+ # Skill: HUD
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `hud` |
8
+ | **Keywords** | `hud:`, `/hud` |
9
+ | **Tier** | Developer Tool |
10
+ | **Source** | `src/skills/hud.mts` |
11
+
12
+ ## Description
13
+
14
+ Configure HUD display options: layout, presets, display elements.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Spawns `bin/omp.mjs hud [args]`. No persistent resources are maintained.
@@ -0,0 +1,35 @@
1
+ # Skill: Learner
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `learner` |
8
+ | **Keywords** | `learner:`, `/learner` |
9
+ | **Tier** | Planning Tool |
10
+ | **Source** | `src/skills/learner.mts` |
11
+
12
+ ## Description
13
+
14
+ Extract a learned skill from the current conversation.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface SkillInput {
20
+ trigger: string;
21
+ args: string[];
22
+ }
23
+
24
+ interface SkillOutput {
25
+ status: "ok" | "error";
26
+ message: string;
27
+ }
28
+
29
+ export async function activate(input: SkillInput): Promise<SkillOutput>
30
+ export function deactivate(): void
31
+ ```
32
+
33
+ ## Implementation
34
+
35
+ Spawns `bin/omp.mjs learner [args]`. No persistent resources are maintained.
@@ -0,0 +1,34 @@
1
+ # Skill: MCP-Setup
2
+
3
+ ## Metadata
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | **ID** | `mcp-setup` |
8
+ | **Keywords** | `mcp-setup:`, `/mcp` |
9
+ | **Tier** | Developer Tool |
10
+ | **Source** | `src/skills/mcp-setup.mts` |
11
+
12
+ ## Description
13
+
14
+ MCP Setup Skill — configure MCP servers for OMP. Uses --mcp-only --non-interactive for programmatic invocation.
15
+
16
+ ## Interface
17
+
18
+ ```typescript
19
+ interface McpSetupSkillInput {
20
+ args?: string[];
21
+ }
22
+
23
+ interface McpSetupSkillOutput {
24
+ status: "ok" | "error";
25
+ message: string;
26
+ hud?: string;
27
+ }
28
+
29
+ export async function activateMcpSetupSkill(input?: McpSetupSkillInput): Promise<McpSetupSkillOutput>
30
+ ```
31
+
32
+ ## Implementation
33
+
34
+ Spawns `omp setup --mcp-only [args]` for MCP configuration. No persistent resources are maintained.