Skip to content

Commit 44ef11a

Browse files
authored
feat(integrations): add omp support (#3107)
* feat(integrations): add omp support * Update updated_at timestamp * refactor(integrations): delegate omp build_exec_args to base, register in issue templates Inherit MarkdownIntegration.build_exec_args so omp picks up shared CLI contract changes (requires_cli gating, extra-args ordering, --model handling) automatically; only specialize the --mode json flag. Also add Oh My Pi / omp to the issue-template agent lists so test_issue_template_agent_lists_match_runtime_integrations passes. * fix(integrations): use --print + positional prompt for omp argv OMP's CLI parser treats `-p`/`--print` as a boolean (one-shot mode) and consumes the prompt as a positional message; the previous inherited `-p <prompt>` shape worked by accident only because `-p` ignores its next token. Build the argv explicitly with flags first and the prompt as a trailing positional, matching upstream args.ts.
1 parent 034fbfc commit 44ef11a

12 files changed

Lines changed: 101 additions & 5 deletions

File tree

.github/ISSUE_TEMPLATE/agent_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ body:
88
value: |
99
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
1010
11-
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, iFlow CLI, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, Windsurf, ZCode, Zed
11+
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, iFlow CLI, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, Windsurf, ZCode, Zed
1212
1313
- type: input
1414
id: agent-name

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ body:
8585
- Kiro CLI
8686
- Lingma
8787
- Mistral Vibe
88+
- Oh My Pi
8889
- opencode
8990
- Pi Coding Agent
9091
- Qoder CLI

.github/ISSUE_TEMPLATE/feature_request.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ body:
7979
- Kiro CLI
8080
- Lingma
8181
- Mistral Vibe
82+
- Oh My Pi
8283
- opencode
8384
- Pi Coding Agent
8485
- Qoder CLI

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ specify init . --force --integration copilot
403403
specify init --here --force --integration copilot
404404
```
405405

406-
The CLI will check if you have Claude Code, Gemini CLI, Cursor CLI, Qwen CLI, opencode, Codex CLI, Qoder CLI, Tabnine CLI, Kiro CLI, Pi, Forge, Goose, Mistral Vibe, or ZCode installed. If you do not, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
406+
The CLI will check if you have Claude Code, Gemini CLI, Cursor CLI, Qwen CLI, opencode, Codex CLI, Qoder CLI, Tabnine CLI, Kiro CLI, Pi, Oh My Pi, Forge, Goose, Mistral Vibe, or ZCode installed. If you do not, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
407407

408408
```bash
409409
specify init <project_name> --integration copilot --ignore-agent-tools

docs/installation.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## Prerequisites
44

55
- **Linux/macOS** (or Windows; PowerShell scripts now supported without WSL)
6-
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Codebuddy CLI](https://www.codebuddy.ai/cli), [Gemini CLI](https://github.com/google-gemini/gemini-cli), or [Pi Coding Agent](https://pi.dev)
6+
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Codebuddy CLI](https://www.codebuddy.ai/cli), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Pi Coding Agent](https://pi.dev), or [Oh My Pi](https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent)
77
- [uv](https://docs.astral.sh/uv/) for package management (recommended) or [pipx](https://pipx.pypa.io/) for persistent installation
88
- [Python 3.11+](https://www.python.org/downloads/)
99
- [Git](https://git-scm.com/downloads) _(optional — required only when the git extension is enabled)_
@@ -51,6 +51,7 @@ specify init <project_name> --integration gemini
5151
specify init <project_name> --integration copilot
5252
specify init <project_name> --integration codebuddy
5353
specify init <project_name> --integration pi
54+
specify init <project_name> --integration omp
5455
```
5556

5657
### Specify Script Type (Shell vs PowerShell)

docs/reference/integrations.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
2929
| [Kiro CLI](https://kiro.dev/docs/cli/) | `kiro-cli` | Kiro CLI does not substitute `$ARGUMENTS` in file-based prompts, so Spec Kit ships a prose fallback at render time (see [Manage prompts](https://kiro.dev/docs/cli/chat/manage-prompts/) and issue [#1926](https://github.com/github/spec-kit/issues/1926)). Alias: `--integration kiro` |
3030
| [Lingma](https://lingma.aliyun.com/) | `lingma` | Skills-based integration; skills are installed automatically |
3131
| [Mistral Vibe](https://github.com/mistralai/mistral-vibe) | `vibe` | |
32+
| [Oh My Pi](https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent) | `omp` | Installs slash commands into `.omp/commands` |
3233
| [opencode](https://opencode.ai/) | `opencode` | |
3334
| [Pi Coding Agent](https://pi.dev) | `pi` | Pi doesn't have MCP support out of the box, so `taskstoissues` won't work as intended. MCP support can be added via [extensions](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent#extensions) |
3435
| [Qoder CLI](https://qoder.com/cli) | `qodercli` | |

docs/upgrade.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ Alternatively, run the `/speckit.specify` command which creates `.specify/featur
308308
ls -la .gemini/commands/ # Gemini
309309
ls -la .cursor/skills/ # Cursor
310310
ls -la .pi/prompts/ # Pi Coding Agent
311+
ls -la .omp/commands/ # Oh My Pi
311312
```
312313

313314
3. **Check agent-specific setup:**
@@ -427,7 +428,7 @@ The `specify` CLI tool is used for:
427428
- **Upgrades:** `specify init --here --force` to update templates and commands
428429
- **Diagnostics:** `specify check` to verify tool installation
429430

430-
Once you've run `specify init`, the slash commands (like `/speckit.specify`, `/speckit.plan`, etc.) are **permanently installed** in your project's agent folder (`.claude/`, `.github/prompts/`, `.pi/prompts/`, etc.). Your AI coding agent reads these command files directly—no need to run `specify` again.
431+
Once you've run `specify init`, the slash commands (like `/speckit.specify`, `/speckit.plan`, etc.) are **permanently installed** in your project's agent folder (`.claude/`, `.github/prompts/`, `.pi/prompts/`, `.omp/commands/`, etc.). Your AI coding agent reads these command files directly—no need to run `specify` again.
431432

432433
**If your agent isn't recognizing slash commands:**
433434

@@ -442,6 +443,9 @@ Once you've run `specify init`, the slash commands (like `/speckit.specify`, `/s
442443

443444
# For Pi
444445
ls -la .pi/prompts/
446+
447+
# For Oh My Pi
448+
ls -la .omp/commands/
445449
```
446450

447451
2. **Restart your IDE/editor completely** (not just reload window)

integrations/catalog.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schema_version": "1.0",
3-
"updated_at": "2026-06-22T00:00:00Z",
3+
"updated_at": "2026-06-23T00:00:00Z",
44
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/integrations/catalog.json",
55
"integrations": {
66
"claude": {
@@ -255,6 +255,15 @@
255255
"repository": "https://github.com/github/spec-kit",
256256
"tags": ["cli"]
257257
},
258+
"omp": {
259+
"id": "omp",
260+
"name": "Oh My Pi",
261+
"version": "1.0.0",
262+
"description": "Oh My Pi (omp) terminal coding agent prompt-based integration",
263+
"author": "spec-kit-core",
264+
"repository": "https://github.com/github/spec-kit",
265+
"tags": ["cli"]
266+
},
258267
"iflow": {
259268
"id": "iflow",
260269
"name": "iFlow CLI",

src/specify_cli/integrations/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def _register_builtins() -> None:
7070
from .kimi import KimiIntegration
7171
from .kiro_cli import KiroCliIntegration
7272
from .lingma import LingmaIntegration
73+
from .omp import OmpIntegration
7374
from .opencode import OpencodeIntegration
7475
from .pi import PiIntegration
7576
from .qodercli import QodercliIntegration
@@ -108,6 +109,7 @@ def _register_builtins() -> None:
108109
_register(KimiIntegration())
109110
_register(KiroCliIntegration())
110111
_register(LingmaIntegration())
112+
_register(OmpIntegration())
111113
_register(OpencodeIntegration())
112114
_register(PiIntegration())
113115
_register(QodercliIntegration())
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"""Oh My Pi (omp) coding agent integration."""
2+
3+
from __future__ import annotations
4+
5+
from ..base import MarkdownIntegration
6+
7+
8+
class OmpIntegration(MarkdownIntegration):
9+
key = "omp"
10+
config = {
11+
"name": "Oh My Pi",
12+
"folder": ".omp/",
13+
"commands_subdir": "commands",
14+
"install_url": "https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent",
15+
"requires_cli": True,
16+
}
17+
registrar_config = {
18+
"dir": ".omp/commands",
19+
"format": "markdown",
20+
"args": "$ARGUMENTS",
21+
"extension": ".md",
22+
}
23+
context_file = "AGENTS.md"
24+
25+
def build_exec_args(
26+
self,
27+
prompt: str,
28+
*,
29+
model: str | None = None,
30+
output_json: bool = True,
31+
) -> list[str] | None:
32+
# Diverges from MarkdownIntegration.build_exec_args because OMP's
33+
# CLI parser treats `-p`/`--print` as a boolean (one-shot mode) and
34+
# consumes the prompt as a positional argument — see args.ts in
35+
# can1357/oh-my-pi. JSON output is selected via `--mode json`.
36+
if not self.config or not self.config.get("requires_cli"):
37+
return None
38+
args = [self._resolve_executable(), "--print"]
39+
self._apply_extra_args_env_var(args)
40+
if model:
41+
args.extend(["--model", model])
42+
if output_json:
43+
args.extend(["--mode", "json"])
44+
args.append(prompt)
45+
return args

0 commit comments

Comments
 (0)