-
-
Notifications
You must be signed in to change notification settings - Fork 13.5k
feat(cli): register Pi as a supported CLI host (#4157) #4157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -89,14 +89,23 @@ If yes → `node update-system.mjs apply --confirm`. If no → `node update-syst | |
|
|
||
| ## What is career-ops | ||
|
|
||
| AI-powered, CLI-agnostic job search automation: pipeline tracking, offer evaluation, CV generation, portal scanning, batch processing. Runs on any AI coding CLI following the [open agent skill standard](https://agentskills.io) (Claude Code, Cursor, Codex, OpenCode, Qwen, Copilot, Kimi, Antigravity CLI, Grok Build CLI). Legacy Gemini API evaluation remains via `gemini-eval.mjs`. | ||
| AI-powered, CLI-agnostic job search automation: pipeline tracking, offer evaluation, CV generation, portal scanning, batch processing. Runs on any AI coding CLI following the [open agent skill standard](https://agentskills.io) (Claude Code, Cursor, Codex, OpenCode, Pi, Qwen, Copilot, Kimi, Antigravity CLI, Grok Build CLI). Legacy Gemini API evaluation remains via `gemini-eval.mjs`. | ||
|
|
||
| ### Codex invocation | ||
|
|
||
| - **Interactive:** run `codex` in the repo root; if `/career-ops` is unavailable, ask Codex to run the mode directly. | ||
| - **Headless:** `codex exec "prompt"` for one-shot workers. | ||
| - **Examples:** `Run career-ops scan mode`, `Run career-ops pipeline mode for data/pipeline.md`, `Run career-ops pdf mode`, `Run career-ops tracker mode`, `Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123` | ||
|
|
||
| ### Pi invocation | ||
|
|
||
| - **Project context:** `pi` reads `AGENTS.md` from the repo root automatically; there is no wrapper file to keep in sync. | ||
| - **Skill:** Pi discovers the shared router at `.agents/skills/career-ops/SKILL.md`, exposed as `/skill:career-ops`. If a Pi build gates project resources behind a trust decision, run `/trust` once in the repo (or start with `-a`). | ||
| - **Interactive:** run `pi` in the repo root, then `/skill:career-ops <mode>`. | ||
| - **Headless:** `pi -p "prompt"` for one-shot workers; `pi --mode json -p "prompt"` when the caller parses events. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win Add Pi to 🤖 Prompt for AI Agents |
||
| - **Examples:** `pi -p "Run career-ops tracker mode"`, `pi -p "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` | ||
|
|
||
|
|
||
| ### Main Files | ||
|
|
||
| | File | Function | | ||
|
|
@@ -401,6 +410,7 @@ Headless worker command per CLI: | |
| |-----|---------| | ||
| | Claude Code | `claude -p "prompt"` | | ||
| | **OpenCode** | `opencode run "prompt"` | | ||
| | Pi | `pi -p "prompt"` | | ||
| | Copilot CLI | `copilot -p "prompt"` | | ||
| | Codex | `codex exec "prompt"` | | ||
| | Qwen | `qwen -p "prompt"` | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -87,6 +87,7 @@ | |
| <img src="https://img.shields.io/badge/Kimi-FF4B4B?style=flat" alt="Kimi"> | ||
| <img src="https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white" alt="GitHub Copilot"> | ||
| <img src="https://img.shields.io/badge/Grok_Build_CLI-000?style=flat&logo=x&logoColor=white" alt="Grok Build CLI"> | ||
| <img src="https://img.shields.io/badge/Pi-4B3F72?style=flat" alt="Pi"> | ||
| <br> | ||
| <img src="https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white" alt="Node.js"> | ||
| <img src="https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white" alt="Go"> | ||
|
|
@@ -294,6 +295,35 @@ grok | |
|
|
||
| For headless batch workers, use `grok -p "prompt"` (add `--yolo` to auto-approve tool executions). | ||
|
|
||
| ## Pi Integration | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- README diff ---'
git diff -- README.md | sed -n '1,180p'
printf '%s\n' '--- README files ---'
git ls-files 'README*.md'
printf '%s\n' '--- Pi section occurrences ---'
rg -n '^## Pi Integration$|Pi Integration' --glob 'README*.md' || trueRepository: career-ops-hq/career-ops Length of output: 493 Record localized README drift.
🤖 Prompt for AI AgentsSource: Path instructions |
||
|
|
||
| career-ops supports [Pi](https://github.com/earendil-works/pi) natively, with no wrapper file to maintain: Pi reads `AGENTS.md` from the repo root as project context and discovers the shared skill at `.agents/skills/career-ops/SKILL.md` on its own. The router is then available as `/skill:career-ops`. | ||
|
|
||
| ### Native Pi | ||
|
|
||
| ```bash | ||
| # 1. Run in the career-ops directory | ||
| cd career-ops | ||
| pi | ||
|
|
||
| # 2. Use the shared skill with subcommands: | ||
| /skill:career-ops "Senior AI Engineer at Anthropic..." | ||
| /skill:career-ops pipeline | ||
| /skill:career-ops scan | ||
| /skill:career-ops pdf | ||
| /skill:career-ops tracker | ||
| ``` | ||
|
|
||
| ### One-shot Pi (`pi -p`) | ||
|
|
||
| ```bash | ||
| pi -p "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123" | ||
| pi -p "Run career-ops scan mode and summarize new matches." | ||
| pi -p "Run career-ops tracker mode and summarize the current statuses." | ||
| ``` | ||
|
|
||
| If a Pi build gates project resources behind a trust decision, run `/trust` once inside the repo (or start with `-a`) so the project skill loads. | ||
|
|
||
| ### Standalone Gemini API Script (No CLI install needed) | ||
|
|
||
| ```bash | ||
|
|
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -61,6 +61,7 @@ export const KNOWN: CliSpec[] = [ | |
| { id: "codex", name: "Codex", bin: "codex", run: "codex exec", url: "https://github.com/openai/codex", args: (p) => ["exec", p], streamArgs: codexStreamArgs, parseEvent: parseCodexEvent, stderrIsFatal: isFatalCodexStderr }, | ||
| { id: "gemini", name: "Gemini CLI", bin: "gemini", run: "gemini -p", url: "https://github.com/google-gemini/gemini-cli", args: (p) => ["-p", p] }, | ||
| { id: "opencode", name: "OpenCode", bin: "opencode", run: "opencode run", url: "https://opencode.ai", args: (p) => ["run", p] }, | ||
| { id: "pi", name: "Pi", bin: "pi", run: "pi -p", url: "https://github.com/earendil-works/pi", args: (p) => ["-p", p] }, | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🛡️ Analyzed with Security Review | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- clis definition ---'
cat -n web/src/lib/clis.ts | sed -n '1,120p'
printf '%s\n' '--- direct runner references ---'
rg -n -S 'clis|args\(|run-cli-support|spawn|execFile|session|no-session|pi -p' web/src/lib web/src/routes web/src 2>/dev/null | head -240
printf '%s\n' '--- repository guidance and Pi references ---'
rg -n -S 'Pi|pi|session|no-session|prompt' AGENTS.md CONTRIBUTING.md README.md web 2>/dev/null | head -240Repository: career-ops-hq/career-ops Length of output: 50380 🌐 Web query:
💡 Result: <search_synthesis> <source_evidence> Citations:
🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- planner ---'
cat -n web/src/lib/apply/planner.ts | sed -n '40,110p'
printf '%s\n' '--- application drive ---'
cat -n web/src/lib/apply/drive.ts | sed -n '50,100p;145,200p'
printf '%s\n' '--- direct shared-args callers ---'
rg -n -S 'spec\.args|resolved\.args|resolveCli\(.*\)|args\(prompt\)|args\(' web/src/app web/src/lib --glob '*.ts' --glob '*.mjs' | head -160
printf '%s\n' '--- Pi-specific tests or assumptions ---'
rg -n -S 'pi|session_id|no-session|plannerTurn|planner' tests web --glob '*test*' --glob '*.ts' --glob '*.mjs' | head -220Repository: career-ops-hq/career-ops Length of output: 35131 Sensitive Data Exposure Reachability: External Disable Pi session saving for web-submitted prompts. 🤖 Prompt for AI Agents |
||
| { id: "copilot", name: "GitHub Copilot CLI", bin: "copilot", run: "copilot -p", url: "https://docs.github.com/en/copilot/github-copilot-in-the-cli", args: (p) => ["-p", p] }, | ||
| { id: "qwen", name: "Qwen CLI", bin: "qwen", run: "qwen -p", url: "https://qwen.ai/qwencode", args: (p) => ["-p", p] }, | ||
| { id: "antigravity", name: "Antigravity CLI", bin: "agy", run: "agy -p", url: "https://antigravity.google", args: (p) => ["-p", p] }, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Add the restart requirement to all Pi trust guidance.
Pi does not reload project resources in the current session after
/trust. Add a restart requirement before invoking/skill:career-opsat.agents/skills/career-ops/SKILL.md:27,AGENTS.md:103, andREADME.md:325. The-asingle-run path does not require a restart.🤖 Prompt for AI Agents