Oh My Pi (omp) Erste Schritte Tutorial
Oh My Pi (Befehlszeilenabkürzung omp) ist ein Open-Source-KI-Coding-Agent, der im Terminal läuft, von Can Bölük aus Mario Zechners Pi geforkt und stark erweitert.
Die Kernphilosophie von Oh My Pi ist:Tools sollten nicht nur "verbinden"; sie sollten bis zur Perfektion poliert sein—Jedes Tool ist auf Benchmarks abgestimmt, wobei Edit-Trefferrate, Suchgeschwindigkeit und LSP-Integration alle danach streben, in ihrer Klasse die besten zu sein.
-
Offizielle Website:omp.sh

Was ist omp?
omp ist einterminal-firstKI-Coding-Agent. Es hängt nicht von einer IDE ab; es läuft als vollwertige TUI in deinem Terminal und integriert LSP, DAP-Debugger, duale Python/JavaScript-Ausführungskerne, Subagent-Parallelität, sitzungsübergreifenden Speicher und eine Reihe von 32 benchmark-abgestimmten Tools.
Unterschiede zu anderen KI-Coding-Tools
| Dimension | Claude Code / ähnliche Tools | omp |
|---|---|---|
| Bearbeitungsformat | str_replace (fehleranfällig) | Hashline (Inhalts-Hash-Anker, resistent gegen Whitespace-Unterschiede) |
| Dateilesen | Volltext-Dump | Strukturzusammenfassung + bedarfsgesteuerte Erweiterung |
| LSP | Keine oder begrenzt | Vollständige 14 LSP-Operationen (einschließlich Umbenennen, Springen, Code-Aktionen) |
| Debugger | Keine | Vollständiges DAP: lldb, dlv, debugpy |
| Subagenten | Keine oder begrenzt | Parallele Subagenten, isolierte Workspaces, typisierte Rückgabewerte |
| Suche | Shell-aufgerufenes ripgrep | In-Process-ripgrep, kein fork/exec |
| Verhaltenskorrektur | Verlässt sich auf den Prompt | Stream-Regeln: Regex-Treffer → Injektion mitten im Token → Wiederholung |
| Sitzungsübergreifendes Gedächtnis | Keine | Hindsight-Speicherbank (Projektebene) |
| Codeausführung | Python-Sandbox | Persistente Python- + Bun-Dual-Kernel, können gegenseitig ihre Agent-Tools aufrufen |
| Tech-Stack | Reines JS/Python | ~55,000 Zeilen Rust-Kern + TypeScript |
Installation
Dieser Abschnitt behandelt die verschiedenen Möglichkeiten, omp unter macOS, Linux und Windows zu installieren.
macOS / Linux (Empfohlen)
$ curl -fsSL https://omp.sh/install | sh
Das Installationsskript erkennt automatisch, ob Bun verfügbar ist: Wenn Bun (≥ 1.3.14) vorhanden ist, wird zuerst über Bun installiert; andernfalls wird ein vorkompiliertes Binary heruntergeladen.
Homebrew (macOS / Linux)
$ brew install can1357/tap/omp
Bun (Empfohlen, neueste Version beziehen)
$ bun install -g @oh-my-pi/pi-coding-agent
Windows(PowerShell)
$ irm https://omp.sh/install.ps1 | iex
Windows unterstützt die native Ausführung ohne WSL.
Version-Pinning (mise)
$ mise use -g github:can1357/oh-my-pi
Installation überprüfen
$ omp --version
Shell-Autovervollständigung
omp generiert Vervollständigungsskripte dynamisch aus CLI-Metadaten, sodass Unterbefehle, Flags und Enum-Werte nie von der tatsächlichen CLI abweichen:
# zsh(加入 ~/.zshrc) eval "$(omp completions zsh)" # bash(加入 ~/.bashrc) eval "$(omp completions bash)" # fish omp completions fish > ~/.config/fish/completions/omp.fish
Aus dem Quellcode erstellen
$ git clone https://github.com/can1357/oh-my-pi $ cd oh-my-pi $ bun setup # 安装 Bun 工作区依赖并构建 Rust N-API 插件 $ bun dev # 启动开发版 CLI # 修改 Rust 代码后,重新构建原生插件 $ bun run build:native
Erstkonfiguration: Beim Modellanbieter anmelden
Nach dem ersten Ausführen von omp verwenden Sie /login oder /model, um Ihren KI-Anbieter zu konfigurieren.
Methode 1: OAuth-Ein-Klick-Anmeldung (kein API-Schlüssel erforderlich)
omp unterstützt die Anmeldung bei mehreren Anbietern über OAuth – der einfachste Weg:
/login # 打开交互式提供商选择器
Anbieter, die OAuth unterstützen, sind unter anderem: Anthropic, OpenAI Codex, Google Antigravity (Gemini), Perplexity, Cursor, GitHub Copilot, GitLab Duo und mehr.
Methode 2: API-Schlüssel (direkte Anbieterverbindung)
# 在环境变量里设置(推荐写入 ~/.zshrc oder ~/.bashrc) export ANTHROPIC_API_KEY="sk-ant-xxxx" export OPENAI_API_KEY="sk-xxxx" export GOOGLE_API_KEY="xxxx"
Oder direkt in omp konfigurieren:
/model # 打开模型选择器,可以在这里配置 Key
Methode 3: Coding-Plan-Abonnement
Wenn du bereits Cursor, GitHub Copilot, Kilo, Kimi Code, MiniMax Coding Plan usw. abonniert hast, kannst du direkt auf dein Abonnement zugreifen:
/login # 选择对应的 Coding Plan 提供商,OAuth 授权
Methode 4: Lokale Modelle (Ollama / LM Studio)
# 先启动 Ollama $ ollama serve # 在 omp 里选择 Ollama 提供商(key 可选) /model # 选择 Ollama,指向 http://localhost:11434
Konfigurationspfad
Die gesamte Konfiguration wird im Verzeichnis ~/.omp/ gespeichert:
~/.omp/
agent/
settings.yml # 主配置文件
models.yml # 自定义模型/提供商
keybindings.yml # 快捷键绑定
rules/ # 流规则(stream rules)
skills/ # 技能文档
Erstes Gespräch: TUI-Grundlagen
Dieser Abschnitt stellt die Vollbild-TUI-Oberfläche von omp und grundlegende Interaktionsmethoden vor.
omp starten
# 在项目目录下启动 $ cd ~/your-project $ omp
Nach dem Start wechselt omp in die Vollbild-TUI (Terminal-Benutzeroberfläche). Tool-Aufrufe werden als Karten dargestellt, und Bearbeitungsvorgänge zeigen eine Vorschau, bevor sie auf die Festplatte geschrieben werden.
Hinweis: omp verwendet das Kitty-Tastaturprotokoll. Es wird empfohlen, es in Terminals auszuführen, die dieses Protokoll unterstützen (Kitty, Ghostty, WezTerm, iTerm2), um die beste Erfahrung zu erzielen.
Grundlegende Interaktion
Geben Sie Ihre Aufgabe ein und drücken Sie die Eingabetaste zum Senden:
> Analyze the directory structure of this project and tell me what the main modules are.
omp ruft automatisch Tools wie read und search auf, um die Codebasis zu durchsuchen, und gibt eine strukturierte Zusammenfassung zurück.
Häufige Tastenbelegungen
| Taste | Funktion |
|---|---|
| Enter | Nachricht senden |
| Ctrl+J / Shift+Enter | Zeilenumbruch innerhalb der Nachricht (wird nicht gesendet) |
| Ctrl+P | Durch die verfügbaren Modelle für die aktuelle Rolle wechseln |
| Shift+Ctrl+P | In umgekehrter Reihenfolge wechseln |
| Ctrl+T | Todo-Panel ein-/ausklappen |
| Ctrl+C | Aktuelle Aufgabe unterbrechen |
| Esc | Ausstehende Bestätigung abbrechen |
| ↑ / ↓ | Historische Nachrichten / Optionen durchsuchen |
| ? | ? bei leerer Eingabe einfügen; /hotkeys verwenden, um die Liste der Tastenkürzel anzuzeigen |
Einzelausführung (nicht-interaktiver Modus)
# 一次性执行任务并退出 $ omp -p "列出所有 .ts 文件里未使用的 export" # 管道输入 $ git diff HEAD~1 | omp -p "给这个 diff 写一个精简的 commit message"
Historische Sitzungen fortsetzen
$ omp --resume # 打开会话选择器(Tab 补全可用) $ omp --resume <id> # 直接恢复指定会话
Kern-Tools im Detail erklärt
Die 32 Tools von omp sind unter einem Namespace vereint; read, search und bash sind die drei am häufigsten im Arbeitsalltag verwendeten.
read: Einheitliche Leseschnittstelle
read ist eines von omps Killer-Tools. Es liest nicht nur Dateien – es versteht die Inhaltsstruktur:
# 读文件(返回结构化摘要,而非全文 dump) read src/auth/login.ts # 读目录(返回树形结构概览) read src/ # 读 URL(返回结构化 Markdown,锚点保留) read https://docs.anthropic.com/en/api/messages # 读 arxiv 论文 PDF read https://arxiv.org/pdf/2604.10739v1 # 读 SQLite 数据库 read data/app.db # 读 GitHub PR(统一路径接口) read pr://can1357/oh-my-pi/1428 # 读 PR 的 diff read pr://can1357/oh-my-pi/1428/diff/1 # 读 GitHub Issue read issue://can1357/oh-my-pi/142
Schlüsseldesign: Für Dateien gibt read eine von Tree-sitter generiertestrukturierte Zusammenfassung(Funktionsnamen, Klassennamen, wichtige Kommentare) zurück, anstatt die gesamte Datei in den Kontext zu laden. Dies spart stark Tokens, während wichtige Informationen erhalten bleiben. Wenn detaillierter Inhalt benötigt wird, ruft der Agent read erneut auf, um bestimmte Abschnitte zu erweitern.
search: In-Process-ripgrep
# 正则搜索(无 fork/exec,直接在进程内跑)
search "useState\(" src/
# 带文件类型过滤
search "TODO:" --type ts
# 在内部 URL 上搜索(如 PR diff)
search "loginUser" pr://can1357/oh-my-pi/1063/diff
edit: Präzises Bearbeiten mit Hashline
Siehe den nächsten Abschnitt für Details. Dies ist eines der technisch anspruchsvollsten Tools von omp.
bash: Persistente Shell-Sitzung
# 执行命令(bash 会话在调用间保持存活) bash: npm test bash: git log --oneline -10 bash: cargo build --release
Das bash-Tool von omp bindet die vollständige brush-Shell ein (eine Rust-Implementierung von bash). Anstatt bei jedem Aufruf einen neuen Prozess zu forken, verwaltet es eine persistente Sitzung, in der Umgebungsvariablen und Arbeitsverzeichnis über Aufrufe hinweg erhalten bleiben.
eval: Persistente Kernel für Python + JavaScript
Siehe spätere Abschnitte für Details.
lsp: Vollständige LSP-Operationen
Siehe spätere Abschnitte für Details.
todo: Aufgabenverwaltung
omp verfügt über eine integrierte strukturierte Aufgabenliste, die Phasen und Aufgabenstatusverfolgung unterstützt. Ctrl+T schaltet die Sichtbarkeit des Todo-Panels um.
ask: Strukturierte Fragen
Wenn der Agent eine Benutzerentscheidung benötigt, ruft er ask auf, um eine interaktive Auswahl mit empfohlenen Optionen einzublenden, anstatt Fragen in die Ausgabe zu mischen.
Hashline: Präzisere Dateibearbeitung
Dies ist eine der wichtigsten technischen Innovationen von omp. Dieser Abschnitt stellt die Funktionsweise von Hashline und seine Benchmark-Ergebnisse vor.
Probleme mit herkömmlichem str_replace
Die meisten anderen Agenten verwenden das str_replace-Format, damit das Modell "alten Inhalt" + "neuen Inhalt"-Paare ausgibt. Das Problem ist:
- Das Modell neigt dazu, Leerzeichen, Zeilenumbrüche und Anführungszeichen im alten Inhalt falsch wiederzugeben
- Sobald die Datei nach der Operation des Agenten geändert wird, wird der Anker ungültig
- Fehler verursachen viele Wiederholungsversuche, wodurch mehr Tokens verbraucht werden
Hashlines Lösung
Hashline lässt das Modelleinen Inhalts-Hash verwenden, um die zu ändernden Zeilen zu identifizierenstatt diesen Inhalt erneut einzugeben:
# Hashline patch 示例(Agent 内部生成,你不需要手写)
@@{a3f2}
- const result = compute(x)
+ const result = compute(x, options)
@@{b7c1}
- return null
+ return undefined
{a3f2} ist das Hash-Präfix des Inhalts der Zielzeile. Wenn Dateiänderungen dazu führen, dass der Hash nicht mehr übereinstimmt, wird der Patchabgelehnt, anstatt stillschweigend an der falschen Stelle angewendet zu werden.
Benchmark-Ergebnisse
Gemessene Daten aus der README:
| Modell | Metrik | Wirkung |
|---|---|---|
| Grok Code Fast 1 | Erfolgsrate bei Bearbeitungen | 6.7% → 68.3% (10x Verbesserung) |
| Gemini 3 Flash | vs. str_replace | +5 Prozentpunkte, womit Googles eigene beste Implementierung übertroffen wird |
| Grok 4 Fast | Ausgabe-Token-Verbrauch | Um 61% reduziert |
| MiniMax | Bestehensrate | Um 2.1x verbessert (Gewichte und Prompt vollständig unverändert) |
ast_edit: Strukturierte Code-Umschreibung
Ein höherstufiges Bearbeitungswerkzeug im Vergleich zu Hashline; es verwendet ast-grep-Musterabgleich, gefolgt von strukturiertem Umschreiben:
# 把所有 console.log(...) 替换掉 ast_edit: console.log($X) → logger.debug($X)
ast_edit gibt zuerst einevorgeschlagene (Vorschau-)Kartezurück; erst nachdem der Agent bestätigt und resolve aufruft, wird tatsächlich auf die Festplatte geschrieben – eine atomare Operation, die entweder vollständig erfolgreich ist oder nichts ändert.
ast_grep: Strukturierte Codesuche
Unterstützt Tree-sitter-Syntaxabgleich für 50+ Sprachen:
# 找出所有没有 await 的 async 函数调用 ast_grep: "promise.then($X)"
LSP-Integration: Was die IDE weiß, weiß der Agent auch
omp integriert einen vollständigen LSP-Client (Language Server Protocol), der 14 Operationen unterstützt.
LSP-Server konfigurieren
Konfigurieren Sie im .omp/-Ordner des Projektverzeichnisses oder über den Konfigurationsassistenten von omp:
Beispiele
lsp:
servers:
typescript:
command: typescript-language-server
args: ["--stdio"]
rust-analyzer:
command: rust-analyzer
python:
command: pylsp
14 LSP-Operationen
| Aktion | Beschreibung |
|---|---|
| Diagnose | Diagnosefehler für eine Datei/einen Arbeitsbereich abrufen (wie rote Wellenlinien in der IDE) |
| hover | Typinformationen und Dokumentationskommentare für ein Symbol abrufen |
| Definition | Zur Definition springen |
| Referenzen | Alle Referenzen finden |
| rename | Symbol umbenennen (über workspace/willRenameFiles, wobei sichergestellt wird, dass Re-Exporte und Barrel-Dateien synchron aktualisiert werden) |
| code_action | Codeaktionen abrufen und ausführen (z. B. Auto-Import, Lint-Fehler beheben) |
| completion | Vervollständigungsliste abrufen |
| signature_help | Hilfe zur Funktionssignatur abrufen |
| document_symbols | Alle Symbole in einer Datei abrufen |
| workspace_symbols | Im gesamten Workspace nach Symbolen suchen |
| format | Datei formatieren |
| range_format | Ausgewählten Bereich formatieren |
| implementation | Zur Interface-Implementierung springen |
| type_definition | Zur Typdefinition springen |
Der richtige Weg zum Umbenennen
Gewöhnliche Agenten benennen um, indem sie nach Zeichenketten suchen und sie einzeln ersetzen, was leicht dazu führt, dass Vorkommen übersehen oder falsch ersetzt werden. omp macht es über das LSP-Protokoll:
> 把 formatBytes 函数重命名为 humanizeFileSize
# omp 内部执行:
lsp.references("formatBytes") → 找到 5 处引用,分布在 3 个文件
lsp.rename("formatBytes", "humanizeFileSize") → 通过 LSP workspace/willRenameFiles
search "formatBytes" → 0 matches ✓ 完成
Re-Exporte, Barrel-Dateien (index.ts) und Alias-Importe werden alle korrekt aktualisiert, weil das Umbenennen über das LSP-Protokoll statt über Textersetzung erfolgt.
Debugger-Integration (DAP)
omp implementiert einen vollständigen DAP-Client (Debug Adapter Protocol), der 28 Debug-Operationen unterstützt.
Unterstützte Debugger
| Sprache | Debugger |
|---|---|
| C / C++ / Rust | lldb-dap / codelldb |
| Go | dlv(Delve) |
| Python | debugpy |
| Node.js / TypeScript | Integrierter Inspector von Node.js |
| Allgemein | Jeder DAP-kompatible Debugger |
Typisches Szenario: Auffinden eines C-Programmabsturzes
> 这个 C 程序一直 segfault,帮我找原因
# omp 内部执行:
debug.launch("lldb-dap", "./build/demo")
debug.continue() # 运行到崩溃
debug.pause()
debug.stackTrace() # 查看调用栈
debug.scopes(frameId) # 查看局部变量
debug.evaluate("*ptr") # 评估表达式
Typisches Szenario: Untersuchung von Deadlocks bei Go-Diensten
> Go 服务挂住了,帮我看看
# omp 内部执行:
debug.attach("dlv", pid)
debug.threads() # 列出所有 goroutine
debug.stackTrace(threadId) # 查看挂住的 goroutine 调用栈
Kein verstreutes fmt.Println oder console.log mehr im Code – omp steuert direkt einen echten Debugger an.
Subagenten: Parallele Verarbeitung
Wenn eine Aufgabe in voneinander unabhängige Teilaufgaben aufgeteilt werden kann, verwendet omp das task-Tool, um parallele Subagenten zu starten, die jeweils in einem isolierten Arbeitsbereich ausgeführt werden und ein typisiertes Ergebnisobjekt zurückgeben.
Mechanismus zur Isolierung von Arbeitsbereichen
omp verwendet plattformnative Dateisystem-Snapshots, um die Arbeitsbereiche von Subagenten zu isolieren:
| Betriebssystem / Dateisystem | Isolationsmechanismus |
|---|---|
| macOS(APFS) | APFS-Clone (sofort, Zero-Copy-on-Write) |
| Linux(btrfs/zfs) | reflink |
| Linux(overlayfs) | Overlay-Mount |
| Windows | projfs / rcopy |
Jeder Subagent erhält eine unabhängige Arbeitsbereichskopie, ohne Beeinträchtigung und ohne Merge-Konflikte.
Anwendungsbeispiele
> 我有三个微服务:auth-service、api-service、worker-service.
请同时检查它们的依赖有没有已知的安全漏洞,分别出报告。
# omp 内部执行:
task(workers=[
{name: "auth", workdir: "services/auth"},
{name: "api", workdir: "services/api"},
{name: "worker", workdir: "services/worker"}
])
# 三个子 Agent 并行跑,各自输出结构化 JSON:
# { findings: [...], severity: "high", affected: ["[email protected]"] }
# 父 Agent 合并结果,汇总报告
Kommunikation zwischen Subagenten (IRC)
Parallele Subagenten können über das irc-Tool mit kurzen Nachrichten kommunizieren, um Arbeit zu koordinieren:
# 子 Agent A:
irc.send("ComponentsExports", {exports: ["Button", "Input"]})
# 子 Agent B 收到消息后调整自己的分析范围
Abrufen von Subagent-Ergebnissen
Der übergeordnete Agent kann direkt auf die strukturierte Ausgabe eines Subagenten zugreifen, indem er die Pfadsyntax verwendet:
# 读取子 Agent findings 的第一条记录的 path 字段 read agent://<subagent-id>/findings.0.path
Hindsight: Sitzungsübergreifendes Gedächtnis
Hindsight ist das projektweite Gedächtnissystem von omp, mit dem der Agent sein Verständnis der Codebasis zwischen Sitzungen behält.
Funktionsweise
- retainWenn der Agent während des Betriebs wertvolle Informationen entdeckt, ruft er proaktiv retain auf, um in die Speicherbank zu schreiben
- recallDurchsuche die Speicherbank nach Schlüsselwörtern
- reflectLasse Hindsight Informationen aus der Speicherbank synthetisieren, um eine synthetische Antwort zu erzeugen
- Am Ende jeder Sitzung komprimiert omp die Sitzung automatisch in ein "mentales Modell", das in der ersten Runde der nächsten Sitzung geladen wird
Geltungsbereich
Hindsight istprojektweit—was du in Projekt A lernst, sickert nicht in Projekt B durch. Der Speicher wird im Verzeichnis .omp/ abgelegt (oder pro Projekt in ~/.omp/ aufgeteilt).
Tatsächliche Auswirkungen
Wenn du omp zum ersten Mal in einem Projekt verwendest, musst du die Projektstruktur erklären. Nachdem du es eine Weile verwendet hast, kennt omp sie von selbst:
- Welchen Tech-Stack dieses Projekt verwendet
- Aufteilung der Zuständigkeiten der Hauptmodule
- Welche Refactorings wurden zuvor durchgeführt
- Welche Dateien sind "Minenfelder" (Orte, die oft Probleme verursachen)
Code-Ausführung: duale Kernel für Python + JavaScript
Die meisten Agent-Tools bieten nur eine Python-Sandbox. omp führt zwei persistente Kernel aus, und beide können wiederum die eigenen Tools des Agenten aufrufen.
Python-Kernel (eval)
Beispiele
import pandas as pd
df = pd.read_csv(tool.read("data/sales.csv")) # Verwende das read-Tool des Agenten, um Dateien zu laden
print(df.describe())
result = tool.search("revenue", "src/") # In der Codebasis suchen
JavaScript-(Bun)-Kernel (eval)
Beispiele
const data = tool.read("data/sales.csv") // Kann auch Agent-Tools aufrufen
const top = data.split('\n').slice(1)
.map(line => line.split(','))
.sortieren((a, b) => +b[2] - +a[2])
.slice(0, 5)
console.table(top)
Duale Kernel teilen Prelude
Die beiden Kernel teilen ein Prelude (vorgeladener Kontext). Sie können Daten in Python verarbeiten und dann Diagramme in JS generieren – der gesamte Prozess ist eine kontinuierliche Eval-Sitzung, ohne die Tool-Oberfläche zu verlassen.
Stream-Regeln: Echtzeit-Verhaltenskorrektur
Dies ist omps einzigartiger Echtzeit-Verhaltenskorrekturmechanismus, der das Problem löst, dass das Modell nicht gehorcht.
Probleme traditioneller Ansätze
Alle Regeln in den System-Prompt zu schreiben kostet in jeder Konversation die volle Tokenmenge, und das Modell kann sie trotzdem ignorieren.
Wie Stream-Regeln funktionieren
Regeln sindinaktiv,bis die Auslösebedingung erscheint:
- Reguläre Ausdrücke überwachen die Streaming-Ausgabe des Modells
- Sobald eine Übereinstimmung erkannt wird (auf Mid-Token-Ebene), den aktuellen Stream sofort abbrechen
- Den Regelinhalt als Systemerinnerung in den Kontext injizieren
- Ab derselben Position neu generieren
- Injizierte Regeln überleben die Kontextkompression
Beispiele
# ~/.omp/agent/rules/no-box-leak.yml
name: box-leak
pattern: "Box::leak"
reminder: |
Verwende Box::leak nicht in Produktionscodepfaden.
Speicherlecks führen unter hoher Last zu OOM beim Dienst.
Verwende stattdessen Arc<str> oder andere Verfahren mit Referenzzählung.
Wirkung: Wenn das Modell Box::leak schreibt, wird der Stream abgebrochen, die Regel wird injiziert, und das Modell korrigiert automatisch zu Arc
Regeln schnell mit /omfg erstellen
omp bietet einen Hilfsbefehl, mit dem du Regeln in natürlicher Sprache beschreiben kannst, und generiert den Regex und die Regeldatei:
/omfg 不要在任何地方用 any 类型,要求用具体的类型定义或 unknown
omp generiert, validiert und speichert die Regel; sie wird beim nächsten Mal wirksam.
Modell-Routing: 40+ Anbieter, vier Rollen
omp verwendet Rollen statt Modellnamen, um Arbeit zu verteilen, und erreicht damit "das richtige Modell für die richtige Aufgabe".
Vier Modellrollen
| Rolle | Zweck | CLI-Flag | Umgebungsvariable |
|---|---|---|---|
| default | Allgemeine Konversation und Codegenerierung | Standard | — |
| smol | Günstige Sub-Agent-Erkundung | --smol | PI_SMOL_MODEL |
| slow | Aufgaben zum tiefen Schlussfolgern | --slow | PI_SLOW_MODEL |
| Plan | Planungsmodus | --plan | PI_PLAN_MODEL |
# 启动时指定角色覆盖 $ omp --smol # 整个会话使用 smol 模型(低成本) $ omp --slow # 使用慢速推理模型(高质量) $ omp --plan # 使用计划专用模型
Modelle in einer Sitzung wechseln
/model # 打开交互式模型选择器 /model claude-sonnet-4.6 # 切换到指定模型 Ctrl+P # 循环切换当前角色的可用模型
Benutzerdefinierte Anbieter (~/.omp/agent/models.yml)
Beispiele
providers:
my-company-llm:
type: openai-completions
baseUrl: https://llm.internal.company.com/v1
apiKey: "${MY_LLM_KEY}"
models:
- id: gpt-4o
name: Internes GPT-4o
Failover-Ketten
Beispiele
retry:
fallbackChains:
default:
- anthropic/claude-sonnet-4.6
- openai/gpt-4o
- google/gemini-2.0-flash
Modellbindung auf Pfadebene
Beispiele
models:
enabledModels:
- path: ~/projects/side-project
models: ["deepseek/deepseek-coder"]
Schlüsselrotation (Multi-Schlüssel-Lastverteilung)
Beispiele
providers:
anthropic:
apiKeys:
- "${ANTHROPIC_KEY_1}"
- "${ANTHROPIC_KEY_2}"
- "${ANTHROPIC_KEY_3}"
# Automatische Rotation; zum nächsten Schlüssel wechseln, nachdem ein einzelner Schlüssel das Limit überschritten hat
Kurzübersicht über gängige Slash-Befehle
Geben Sie / in das Chat-Eingabefeld ein, um die Befehlsvervollständigung auszulösen.
| Befehl | Funktion |
|---|---|
| /model | Modellauswahl öffnen |
| /login | Beim Anbieter anmelden (OAuth) |
| /resume | Historische Sitzung fortsetzen |
| /review | Code-Review für aktuellen Branch / angegebenen Commit / nicht committete Änderungen |
| /commit | Intelligente Commit-Aufteilung |
| /omfg | Stream-Regeln in natürlicher Sprache erstellen |
| /debug | Debug-/Report-/Profiling-Tools öffnen |
| /hotkeys | Alle Tastaturkürzel anzeigen |
| /reload-plugins | Plugins per Hot-Reload neu laden |
| /compact | Kontext manuell komprimieren (Token sparen) |
| /? | Hilfe anzeigen |
/review: Code-Review mit Prioritäten
# 审查当前分支 vs main /review # 审查指定 commit /review abc1234 # 审查未提交的改动 /review --unstaged
omp startet dedizierte Reviewer-Sub-Agenten, um parallel zu scannen. Jedes Problem wird nach P0-P3-Priorität mit einem Konfidenz-Score sortiert. P0 = blockiert Release, P3 = optionale Verbesserung.
/commit: Atomare Commit-Aufteilung
$ omp commit
omp liest den gesamten Arbeitsbaum (git_overview + git_file_diff + git_hunk) und teilt nicht zusammenhängende Änderungen in unabhängige atomare Commits auf, geordnet nach Abhängigkeit:
- Quellcode-Commits kommen vor Tests, Dokumentation und Konfiguration
- Änderungen mit Abhängigkeiten werden nicht falsch gruppiert
- Zirkuläre Abhängigkeiten werden abgelehnt; es wird nichts geschrieben
- Lockfiles wie package-lock.json und Cargo.lock werden von der Analyse ausgeschlossen
Plugins und Erweiterungen
omp-Plugins sind TypeScript-Module, die genau dieselbe API wie integrierte Tools verwenden, ohne reservierte Schnittstellen.
Plugins installieren
$ omp install <plugin-name> # 从 npm 安装 $ omp install github:user/repo # 从 GitHub 安装 $ omp install ./path/to/plugin # 从本地路径安装
Plugins erstellen
Du kannst omp es einfach für dich schreiben lassen:
> 给我创建一个插件,添加 /deploy 命令, 自动运行测试、构建、然后 SSH 上传到生产服务器
omp generiert den Plugin-Code; er wird sofort wirksam, nachdem du /reload-plugins ausgeführt hast.
Hot Reload
omp muss nach dem Ändern des Plugin-Codes nicht neu gestartet werden:
/reload-plugins
ACP: omp im Zed-Editor verwenden
$ omp acp
Verbinde omp über das Agent Client Protocol mit dem Zed-Editor. omp liest den Puffer, den du gerade bearbeitest, schreibt Dateien über den Speicherpfad des Editors, startet eine Shell im Terminal des Editors, und destruktive Operationen lösen einen Berechtigungsdialog aus.
Migration von anderen Tools
Ein großer Vorteil von omp istdas sofortige EinlesenBereits von anderen Tools erstellte Konfigurationsdateien werden direkt gelesen, keine Migrationsskripte erforderlich:
| Tool | Konfigurationsdatei | Wie omp sie liest |
|---|---|---|
| Cursor | .cursor/rules/*.mdc | Automatisch übernommen |
| Claude Code | .claude/settings.json、CLAUDE.md | Automatisch übernommen |
| Cline | .clinerules | Automatisch übernommen |
| GitHub Copilot | .github/copilot/instructions.md(applyTo) | Automatisch übernommen |
| Codex | AGENTS.md | Automatisch übernommen |
| Windsurf | .windsurfrules | Automatisch übernommen |
| Gemini CLI | .gemini/ configuration | Automatisch übernommen |
Beim ersten Lauf scannt omp das Arbeitsverzeichnis und lädt automatisch alle erkannten Formate.
Ressourcen und Community
- Website:omp.sh
- GitHub:github.com/can1357/oh-my-pi(MIT-Open-Source)
- Tool-Dokumentation:omp.sh/docs/tools
- Provider-Dokumentation:omp.sh/docs/providers
- SDK-Dokumentation:omp.sh/docs/sdk
- Changelog:github.com/can1357/oh-my-pi/CHANGELOG.md
- npm:@oh-my-pi/pi-coding-agent
- Discord:discord.gg/4NMW9cdXZa