{"_id":"@bajoel13/opencodex","_rev":"3-5e577a88be920980ebbf41c7523c6683","name":"@bajoel13/opencodex","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.1":{"name":"@bajoel13/opencodex","version":"0.1.1","license":"MIT","_id":"@bajoel13/opencodex@0.1.1","maintainers":[{"name":"bajoel13","email":"missedyou2005@gmail.com"}],"bin":{"ocx":"dist/cli.js","opencodex":"dist/cli.js"},"dist":{"shasum":"2d50b37ee74edc0f2b7bad517177cbf135d24f83","tarball":"https://registry.npmjs.org/@bajoel13/opencodex/-/opencodex-0.1.1.tgz","fileCount":85,"integrity":"sha512-rd7LbjpwouuGTovL1ZFrIWMWre1C/tMuZpItmirZiRpTGflZ8XxeLBKbACOXJMBBYtUeAVxHsxUmh4l9Cmc+7Q==","signatures":[{"sig":"MEUCIDEDrYdHf6svLBy0kNT3DTJHbvNBk83qmJpv+HEo268fAiEAjf64RtjgwmTI0XE5BdkRkScAmRxGE2EN80w+icDHU+o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":644548},"type":"module","engines":{"node":">=22"},"gitHead":"78123ec968eaef4f591007af3ec16f0ad80b6d34","scripts":{"dev":"npm run build && node dist/cli.js","test":"npm run build && node --test","build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bajoel13","email":"missedyou2005@gmail.com"},"_npmVersion":"11.19.0","description":"OpenCodeX — an AI coding agent with the OpenCode experience, OpenCodeX branding, BYO provider/model.","directories":{},"_nodeVersion":"24.14.0","allowScripts":{"esbuild@0.25.12":true},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"yargs":"^18.1.0","esbuild":"^0.25.0","typescript":"^5.8.0","@types/node":"^24.0.0","@types/yargs":"^17.0.35"},"_npmOperationalInternal":{"tmp":"tmp/opencodex_0.1.1_1787162339706_0.6849129832197358","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bajoel13/opencodex","version":"0.1.2","keywords":["opencodex","ai","coding-agent","cli","llm","agent","tui","mcp","skills","nodejs","openai-compatible"],"license":"MIT","_id":"@bajoel13/opencodex@0.1.2","maintainers":[{"name":"bajoel13","email":"missedyou2005@gmail.com"}],"homepage":"https://github.com/cgnbajoel-cyber/opencodex","bugs":{"url":"https://github.com/cgnbajoel-cyber/opencodex/issues"},"bin":{"ocx":"dist/cli.js","opencodex":"dist/cli.js"},"dist":{"shasum":"227bb940cd9f227d4fec47831e81f8a7a28b8967","tarball":"https://registry.npmjs.org/@bajoel13/opencodex/-/opencodex-0.1.2.tgz","fileCount":85,"integrity":"sha512-He2DzuvEpZlR6cbNpLLU58SgEgavTeaH/E7eStgIh2KzC/uqduEvVl5YGNvBNIUqUoXB13e/JhOyRi84mKawww==","signatures":[{"sig":"MEUCIDGqjg/Eq4oQlQaBl5fbK3+WI0PkxbQ5C3qyLGYpCDHqAiEAp8PDRrHF2aGS9eqFU+/fDmiZnyzF2s4fvnDXvqA+wkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":649212},"type":"module","engines":{"node":">=22"},"gitHead":"56e2dea4cebe7ad050974f10b490f5eda8deedc7","scripts":{"dev":"npm run build && node dist/cli.js","test":"npm run build && node --test","build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bajoel13","email":"missedyou2005@gmail.com"},"repository":{"url":"git+https://github.com/cgnbajoel-cyber/opencodex.git","type":"git"},"_npmVersion":"11.19.0","description":"OpenCodeX — an AI coding agent with the OpenCode experience, OpenCodeX branding, BYO provider/model.","directories":{},"_nodeVersion":"24.14.0","allowScripts":{"esbuild@0.25.12":true},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"yargs":"^18.1.0","esbuild":"^0.25.0","typescript":"^5.8.0","@types/node":"^24.0.0","@types/yargs":"^17.0.35"},"_npmOperationalInternal":{"tmp":"tmp/opencodex_0.1.2_1787162761958_0.32471284825082414","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bajoel13/opencodex","version":"0.1.3","description":"OpenCodeX — an AI coding agent with the OpenCode experience, OpenCodeX branding, BYO provider/model.","type":"module","license":"MIT","engines":{"node":">=22"},"bin":{"opencodex":"dist/cli.js","ocx":"dist/cli.js"},"scripts":{"build":"node scripts/build.mjs","typecheck":"tsc --noEmit","test":"npm run build && node --test","dev":"npm run build && node dist/cli.js","prepack":"npm run build"},"devDependencies":{"@types/node":"^24.0.0","@types/yargs":"^17.0.35","esbuild":"^0.25.0","typescript":"^5.8.0","yargs":"^18.1.0"},"allowScripts":{"esbuild@0.25.12":true},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0"},"keywords":["opencodex","ai","coding-agent","cli","llm","agent","tui","mcp","skills","nodejs","openai-compatible"],"repository":{"type":"git","url":"git+https://github.com/cgnbajoel-cyber/opencodex.git"},"homepage":"https://github.com/cgnbajoel-cyber/opencodex","gitHead":"57b9d4e186a6fa9e32f0f78ac4faf0750b2a9bc5","_id":"@bajoel13/opencodex@0.1.3","bugs":{"url":"https://github.com/cgnbajoel-cyber/opencodex/issues"},"_nodeVersion":"24.14.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-aWjyDESNu3i/hWbKgD/YoKg2rVDrgCQQnRcq/6Yg2Yy2UrPZj25GSZE61Ge4c545S3W8j4CHLyeJHxVsUua9WQ==","shasum":"494c976ce96633e4c6a398c3e3fccb7e44e332fc","tarball":"https://registry.npmjs.org/@bajoel13/opencodex/-/opencodex-0.1.3.tgz","fileCount":85,"unpackedSize":649212,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGJFiCmnSV44ovE2pKPcrzWz9EFE2Mn88TYzLlPEnSZYAiEAj79SymSU50sh1OKE2AMaCcbV7zBc4eAaKP5EqQ2+CMk="}]},"_npmUser":{"name":"bajoel13","email":"missedyou2005@gmail.com"},"directories":{},"maintainers":[{"name":"bajoel13","email":"missedyou2005@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencodex_0.1.3_1787163478096_0.041453783616169027"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T17:58:59.525Z","modified":"2026-08-19T18:17:58.506Z","0.1.1":"2026-08-19T17:58:59.865Z","0.1.2":"2026-08-19T18:06:02.543Z","0.1.3":"2026-08-19T18:17:58.247Z"},"bugs":{"url":"https://github.com/cgnbajoel-cyber/opencodex/issues"},"license":"MIT","homepage":"https://github.com/cgnbajoel-cyber/opencodex","keywords":["opencodex","ai","coding-agent","cli","llm","agent","tui","mcp","skills","nodejs","openai-compatible"],"repository":{"type":"git","url":"git+https://github.com/cgnbajoel-cyber/opencodex.git"},"description":"OpenCodeX — an AI coding agent with the OpenCode experience, OpenCodeX branding, BYO provider/model.","maintainers":[{"name":"bajoel13","email":"missedyou2005@gmail.com"}],"readme":"# OpenCodeX\n\n[![npm version](https://img.shields.io/npm/v/@bajoel13/opencodex.svg)](https://www.npmjs.com/package/@bajoel13/opencodex)\n[![node engine](https://img.shields.io/node/v/@bajoel13/opencodex.svg)](https://www.npmjs.com/package/@bajoel13/opencodex)\n[![license](https://img.shields.io/npm/l/@bajoel13/opencodex.svg)](https://github.com/cgnbajoel-cyber/opencodex/blob/main/LICENSE)\n\nAn AI coding agent with the OpenCode experience — **OpenCodeX branding, BYO\nprovider/model, pure Node.js runtime.** No account, no hosted models, no\nZen. Bring your own API key and your own models.\n\n```text\nopencodex   # start the terminal UI\nocx         # alias\n```\n\n## Why OpenCodeX\n\n- **BYO provider/model** — any OpenAI-compatible endpoint; no vendor lock-in, no account\n- **Pure Node.js** — Node >= 22, ESM only, no Bun required\n- **Skills engine** — discover + evaluate + load the right skill for every prompt\n- **Built-in skills** — caveman, ponytail, coding, debugging, testing, git, documentation\n- **MCP engine** — local & remote servers, per-prompt relevance, Playwright + Context7 built in\n- **Agent tool loop** — bash / read_file / write_file / MCP tools, guarded against infinite loops\n- **Sessions & streaming** — persistent sessions, SSE streaming responses\n- **TUI + CLI** — `/models` model picker, provider management, full command set\n\n## Requirements\n\n- Node.js >= 22 (ESM only; **no Bun required**)\n\n## Install\n\n```bash\nnpm install -g @bajoel13/opencodex\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/cgnbajoel-cyber/opencodex\ncd opencodex\nnpm install\nnpm run build\nnode dist/cli.js --version\n```\n\n## Quickstart\n\n### 1. Configure a provider\n\nCreate `opencodex.json` in your project (or `~/.config/opencodex/opencodex.json`):\n\n```json\n{\n  \"provider\": {\n    \"myai\": {\n      \"baseURL\": \"https://api.example.com/v1\",\n      \"env\": [\"MYAI_API_KEY\"],\n      \"models\": {\n        \"my-model-id\": \"My Display Name\"\n      },\n      \"activeModel\": \"my-model-id\"\n    }\n  }\n}\n```\n\n> `modelId` (the key) is what gets sent to the API; `alias` (the value) is\n> only the display name. Requests **always** use the `modelId`.\n\nThen export your key (never commit it):\n\n```bash\nexport MYAI_API_KEY=\"sk-...\"\n```\n\n### 2. Discover models\n\n```bash\nopencodex models              # interactive /models picker (auto in a TTY)\nopencodex models --refresh    # auto-discover from GET /v1/models\n```\n\nDiscovery handles `https://host`, `https://host/`, `https://host/v1`,\n`https://host/v1/` without producing `/v1/v1/models`, and falls back to\nmanual model entry if discovery fails.\n\n### 3. Run the agent\n\n```bash\nopencodex run \"what is opencodex?\"\nopencodex run --no-stream \"explain the tool loop\"\nopencodex run --model <model-id> \"use a specific model\"\n```\n\nEach prompt goes through: skill discovery → relevance → skill loading →\nMCP discovery → relevance → connection → system prompt construction →\nLLM request → tool calls (up to 8 iterations) → final response.\n\n## CLI\n\n```bash\nopencodex --help        # list all commands\nopencodex --version     # print version\nocx --help              # alias\n```\n\n| Command | Description |\n|---|---|\n| `opencodex [project]` | start the terminal UI |\n| `opencodex run <message>` | send a prompt and run the agent |\n| `opencodex models` | list / select models, edit aliases, discover |\n| `opencodex providers` | list configured providers |\n| `opencodex skills` | list skills, evaluate prompt relevance |\n| `opencodex mcp` | manage MCP servers (add / list / remove) |\n| `opencodex session` | session management (list, continue, export, import) |\n| `opencodex config` | view or edit configuration |\n| `opencodex serve` | headless HTTP server |\n| `opencodex export / import` | session JSON export / import |\n| `opencodex debug` | debugging utilities |\n| `opencodex db` | database utilities |\n| `opencodex completion` | shell completion script |\n\n## Skills\n\nSkills are discovered **on every prompt** (no permanent cache) and only the\nrelevant ones are loaded into context:\n\n```bash\nopencodex skills                       # list available skills\nopencodex skills --evaluate \"debug a failing test\"   # check relevance\n```\n\nBuilt-in: `caveman` (ultra-compressed output), `ponytail` (laziest solution\nthat works), `coding`, `debugging`, `testing`, `git`, `documentation`.\nAdd your own skills to `~/.config/opencodex/skills/` or via config.\n\n## MCP\n\nLocal and remote MCP servers, connected per-prompt based on relevance:\n\n```bash\nopencodex mcp add playwright --builtin   # browser automation (needs npx)\nopencodex mcp add context7 --builtin     # library documentation\nopencodex mcp list                       # server status\n```\n\n## Environment variables\n\n`OPENCODEX_*` is the primary namespace; legacy `OPENCODE_*` still works as a\nfallback (OpenCodeX values take precedence).\n\n## Documentation\n\n- `docs/architecture.md` — architecture overview\n- `docs/requirements.md` — requirements\n- `docs/implementation-plan.md` — phase plan\n- `docs/agent-runtime.md` — agent pipeline & tool loop\n- `docs/provider.md` / `docs/models.md` — provider & model design\n- `docs/mcp.md` — MCP engine\n- `docs/skills.md` — skills engine\n- `docs/compatibility.md` — OpenCode compatibility notes\n- `docs/troubleshooting.md` — troubleshooting\n\n## License\n\nMIT\n","readmeFilename":"README.md"}