# How to Set Up Career-Ops with Different AI CLIs: Claude Code, OpenCode, and More

> Easily set up career-ops with Claude Code, OpenCode, and other AI CLIs. Use the universal installer to select your preferred wrapper for seamless integration.

- Repository: [Santiago Fernández de Valderrama/career-ops](https://github.com/santifer/career-ops)
- Tags: how-to-guide
- Published: 2026-08-22

---

**You can set up career-ops with any supported AI CLI by running the universal installer and selecting the wrapper file corresponding to your chosen tool—whether Claude Code, OpenCode, Codex, or others.**

Setting up career-ops with different AI CLIs requires understanding its AI-agnostic architecture. The santifer/career-ops repository is designed to work across multiple AI command-line interfaces through thin wrapper files that adapt the core workflow to each specific tool.

## Understanding the AI-Agnostic Architecture

The career-ops workflow centers on **[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)**, which defines the core agent behavior and command parsing logic. Each supported CLI receives a dedicated wrapper file that instructs the AI how to invoke repository commands:

- **Claude Code** uses **[`CLAUDE.md`](https://github.com/santifer/career-ops/blob/main/CLAUDE.md)**
- **OpenCode** uses **[`OPENCODE.md`](https://github.com/santifer/career-ops/blob/main/OPENCODE.md)**
- **Generic or other CLIs** fall back to **[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)** or their own specific markdown definitions

These wrappers reside in the repository root and are automatically detected when you launch your AI CLI in the project directory. The full list of supported entry points is maintained in **[[`docs/SUPPORTED_CLIs.md`](https://github.com/santifer/career-ops/blob/main/docs/SUPPORTED_CLIs.md)](docs/SUPPORTED_CLIs.md)**.

## Prerequisites and Initial Installation

Start by bootstrapping the repository with the universal installer:

```bash
npx @santifer/career-ops init
cd career-ops

```

This command clones the repository, installs Node.js dependencies, and prepares the workspace. During the first launch, career-ops runs an **onboarding chat** that guides you through creating three essential configuration files:

1. **[`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md)** – Your canonical curriculum vitae in markdown format
2. **[`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml)** – Personal preferences, salary expectations, and location filters
3. **[`portals.yml`](https://github.com/santifer/career-ops/blob/main/portals.yml)** – Job board configurations and keyword filters for automated scanning

The onboarding process works identically across all supported CLIs; only the launch command differs.

## Interactive Setup by CLI Type

After installation, launch your preferred AI CLI in the repository root. The wrapper file for your specific tool enables the `/career-ops` command namespace or equivalent.

### Claude Code Setup

For Anthropic's Claude Code, ensure **[`CLAUDE.md`](https://github.com/santifer/career-ops/blob/main/CLAUDE.md)** is present in the root directory. Launch interactive mode:

```bash
claude

```

Once the session starts, initiate career-ops by typing:

```

/career-ops scan

```

For headless operation without an interactive session:

```bash
claude -p "Evaluate this JD with career-ops auto-pipeline: https://example.com/jobs/123"

```

### OpenCode Setup

OpenCode users rely on **[`OPENCODE.md`](https://github.com/santifer/career-ops/blob/main/OPENCODE.md)**. Start the interactive agent:

```bash
opencode

```

Then invoke career-ops commands:

```

/career-ops scan

```

For batch processing single prompts:

```bash
opencode run "Evaluate this JD with career-ops auto-pipeline: https://example.com/jobs/123"

```

### Other Supported CLIs

The repository supports additional AI CLIs through dedicated wrappers or the base [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) file:

| CLI | Interactive Command | Headless Command | Wrapper File |
|-----|-------------------|------------------|--------------|
| Codex | `codex` | `codex exec "prompt"` | [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) or specific |
| Antigravity CLI | `agy` | Check [`docs/SUPPORTED_CLIs.md`](https://github.com/santifer/career-ops/blob/main/docs/SUPPORTED_CLIs.md) | [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) |

Consult **[[`docs/SUPPORTED_CLIs.md`](https://github.com/santifer/career-ops/blob/main/docs/SUPPORTED_CLIs.md)](docs/SUPPORTED_CLIs.md)** for the complete matrix of entry points and wrapper configurations.

## Headless and Batch Operation Modes

When integrating career-ops into CI/CD pipelines or scripts, use the headless modes that bypass interactive chat:

- **Claude Code**: `claude -p "prompt"`
- **OpenCode**: `opencode run "prompt"`
- **Codex**: `codex exec "prompt"`

For example, to generate a PDF for the most recently evaluated role using Codex:

```bash
codex exec "Run career-ops pdf mode for the latest evaluated role"

```

These commands feed prompts directly to the underlying model while career-ops handles JD parsing, report generation, PDF rendering, and tracker updates automatically.

## Verifying Your Installation

After completing setup and onboarding, validate the installation using the health check scripts documented in **[[`docs/SETUP.md`](https://github.com/santifer/career-ops/blob/main/docs/SETUP.md)](docs/SETUP.md)**:

```bash
node cv-sync-check.mjs      # Validates CV and profile file syntax

node verify-pipeline.mjs    # Checks tracker integrity and pipeline state

```

If both checks pass, your career-ops installation is ready for production use. You can now evaluate job descriptions, run portal scans, generate application PDFs, and maintain your opportunity tracker through your chosen AI CLI.

## Summary

- **career-ops** uses **[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)** as the core workflow definition, with CLI-specific wrappers like **[`CLAUDE.md`](https://github.com/santifer/career-ops/blob/main/CLAUDE.md)** and **[`OPENCODE.md`](https://github.com/santifer/career-ops/blob/main/OPENCODE.md)** adapting the interface.
- Install universally via `npx @santifer/career-ops init`, then launch with your preferred CLI command (`claude`, `opencode`, `codex`, etc.).
- Onboarding automatically creates **[`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md)**, **[`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml)**, and **[`portals.yml`](https://github.com/santifer/career-ops/blob/main/portals.yml)** regardless of which CLI you choose.
- **Interactive mode** allows conversational workflow management, while **headless mode** (`-p`, `run`, `exec`) enables scriptable batch operations.
- Validate setup by running **`cv-sync-check.mjs`** and **`verify-pipeline.mjs`** to ensure file integrity.

## Frequently Asked Questions

### What is the difference between AGENTS.md and the CLI-specific wrapper files?

**[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)** contains the canonical agent instructions used by multiple CLIs, while **[`CLAUDE.md`](https://github.com/santifer/career-ops/blob/main/CLAUDE.md)** and **[`OPENCODE.md`](https://github.com/santifer/career-ops/blob/main/OPENCODE.md)** are thin wrappers that adapt those instructions to the specific syntax and capabilities of Claude Code and OpenCode respectively. If a CLI doesn't have a dedicated wrapper, it falls back to [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md).

### Can I switch between different AI CLIs for the same career-ops installation?

Yes. Because the core logic lives in [`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md) and all CLI-specific data is stored in standard files ([`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md), [`config/profile.yml`](https://github.com/santifer/career-ops/blob/main/config/profile.yml), [`portals.yml`](https://github.com/santifer/career-ops/blob/main/portals.yml)), you can exit one CLI and launch another in the same directory without losing context or configuration. Simply run `claude` instead of `opencode` (or vice versa) to switch interfaces.

### How do I run career-ops commands without entering an interactive chat session?

Use the headless flags specific to your CLI: **`claude -p "prompt"`** for Claude Code, **`opencode run "prompt"`** for OpenCode, or **`codex exec "prompt"`** for Codex. These execute the prompt immediately and return control to your shell, making them suitable for aliases and automation scripts.

### Which file should I check if my AI CLI doesn't recognize career-ops commands?

First verify that your CLI has a corresponding wrapper file (check **[[`docs/SUPPORTED_CLIs.md`](https://github.com/santifer/career-ops/blob/main/docs/SUPPORTED_CLIs.md)](docs/SUPPORTED_CLIs.md)**). Ensure you launched the CLI from the repository root where **[`AGENTS.md`](https://github.com/santifer/career-ops/blob/main/AGENTS.md)** or the specific wrapper ([`CLAUDE.md`](https://github.com/santifer/career-ops/blob/main/CLAUDE.md), [`OPENCODE.md`](https://github.com/santifer/career-ops/blob/main/OPENCODE.md)) is located. If the file exists but commands fail, run **`node cv-sync-check.mjs`** to validate that your [`cv.md`](https://github.com/santifer/career-ops/blob/main/cv.md) and profile files are properly formatted.