Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/comisai/comis/codexnpx skills add comisai/comis --skill codexgit clone --depth 1 https://github.com/comisai/comisWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00098 | $0.01530 |
| Opus 5 | $0.00049 | $0.00765 |
| Sonnet 5 | $0.00020 | $0.00306 |
| Haiku 4.5 | $0.00010 | $0.00153 |
Grade A, and why
codex scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 89 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Driving Codex CLI (interactive)
Codex is OpenAI's terminal coding agent. You operate it like a developer: launch the interactive TUI, give it the task, let it work, and verify. Drive it through the terminal_session_* tools — create, send_text (type), send_key (a keystroke), read (the screen), wait, status, kill.
Use this only when the user asks for Codex specifically; otherwise use claude-code.
1. Launch — always in a named project
Call terminal_session_create with:
allowId: "codex",command: "codex"project: "<short-kebab-name>"— mandatory for coding work. Opens a persistent<workspace>/projects/<name>/folder you can return to. Same name → continue an existing project; new name → a new one. Do NOT usecwdor rely on the displayname.
The operator's launch config runs Codex with its approvals and its own sandbox disabled (it already runs inside Comis's jail — Codex must not start a second sandbox layer). So you should land directly on a ready prompt with no approval prompts.
2. Handle the first screen
read the screen after launch:
- Auth — if you see a sign-in / device-code flow, or an authentication error, STOP and tell the user Codex needs authentication on the host (it has not been logged in). Do not loop.
- Ready — an empty input composer at the bottom.
3. Give it the task
Submit only when idle (empty composer, no working line). Then send_text a clear, complete task with the acceptance bar (e.g. write tests and run them), and send_key Enter.
IMPORTANT — Enter is contextual: it submits only from idle. Mid-turn, Enter "steers" (injects into the running turn) and Tab "queues" for the next turn. So never press Enter while it is working unless you intend to steer.
4. While it works
read on an interval; do not type while working.
- Working — a line like
• Working (1s • esc to interrupt)with an incrementing seconds counter. Keep waiting. - To interrupt,
send_keyEsc. - Context filling on a long build? Free it with
/compact(see §8) and keep going.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 89 lines · 98 tokens per session scan A 4df4432db578
codex is a skill published in the GitHub repository comisai/comis (5 stars, last pushed 2d ago), licensed Apache-2.0. It adds 98 tokens to every session and 1,530 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
org-sync
Use when the CEO wants an organization-wide sync across PuPu's agent teams — running each org's internal sync, then a cross-org sync where departments challenge each other, converging into one decision list. Triggers: "跑一次 org sync", "全局同步", "组织盘点", "/org-sync", "各部门现在什么情况", "有什么要我拍板的".
release-feature-audit
Use when a new PuPu feature finishes implementation and needs its consistency audit before its ticket is marked done — "audit #123", "审计这个功能", "这个 feature 过一遍检查" — or when release-close-sprint roll-call finds a new feature that was never audited. Also covers standalone i18n checks ("漏翻了吗", "检查 i18n"), which used to be…
growth-analyst
Use when analyzing PuPu's open-source growth or health for the founder — GitHub traffic, downloads/installs, releases, community, or contributor activity — or when producing a growth report or weekly COO report. Repo is haoxiang-xu/PuPu. Triggers: "how is PuPu growing?", "are people installing PuPu?", "which release…
test-api
Use when running QA / regression tests against PuPu, when verifying a code change actually works in the running app, or when reading PuPu UI/state without screenshotting manually. Triggers on tasks like "test that PuPu still creates chats correctly", "verify the new model selector works end-to-end", "send a message…
gitnexus-impact-analysis
Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples: "Is it safe to change X?", "What depends on this?", "What will break?".
gitnexus-refactoring
Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: "Rename this function", "Extract this into a module", "Refactor this class", "Move this to a separate file".