---
title: "Claude Code"
description: "Install the full OrchestKit ork plugin in Claude Code. Skills, agents, hooks, /ork:doctor, and context7."
canonical: "https://orchestkit.yonyon.ai/docs/getting-started/claude-code"
---

# Claude Code

Install the full OrchestKit ork plugin in Claude Code. Skills, agents, hooks, /ork:doctor, and context7.

import { Card, Cards } from 'fumadocs-ui/components/card';
import { Callout } from 'fumadocs-ui/components/callout';
import { LazySetupWizard } from '@/components/lazy';
import { Count, MinCC } from '@/components/count';
import { HostInstall } from '@/components/host-install';

Claude Code is the full plugin: <Count k="skills" /> skills, <Count k="agents" /> agents, and <Count k="hooks" /> hooks.

<HostInstall host="claude" />

Slash-command equivalent if you already have the marketplace added:

```bash
/plugin marketplace add yonatangross/orchestkit
/plugin install ork
```

`/ork:setup` scans the repo, recommends skills, and writes MCP config. Project knobs (protected branches, commit scope, localhost browser, and the rest) live in [Configuration](/docs/getting-started/configuration#project-settings-wizard).

## Interactive install picker

This browser wizard picks a host, then optionally a stack hint, and copies that host's install command. It is not the in-bot `/ork:setup --configure` wizard.

<LazySetupWizard />

## Verify

```
/ork:doctor
```

A healthy report shows the **installed** plugin version (not a docs pin) and loaded counts matching <Count k="skills" /> skills, <Count k="agents" /> agents, and <Count k="hooks" /> hooks:

```
OrchestKit Health Check
=======================
Plugin:     ork <version from `claude plugins`>
Skills:     loaded (commands + reference)
Agents:     registered
Hooks:      active (global / agent / skill-scoped)
Memory:     Graph ✓  Local ✓  CC Native ✓
MCP:        context7 ✓  memory ✓  tavily ○

Status: Healthy
```

`○` means optional and not configured. `✓` means active. `✗` means enabled but misconfigured.

### If you see errors

| Status | Meaning | Fix |
|---|---|---|
| `✗ Memory: Graph ✗` | MCP memory server not responding | Check Node.js >= 18 is installed, restart Claude Code |
| `✗ Hooks: 0 active` | Hook compilation failed | Run `node --version` (must be >= 18). If OK, reinstall: `claude uninstall ork && claude install orchestkit/ork` |
| `✗ Skills: 0 loaded` | Plugin not found by Claude Code | Check `claude plugins` shows `ork`. Try closing and reopening Claude Code |
| `○ tavily ○` | **Not an error**. Tavily is optional | See Tavily below if you want web research |

<Callout type="info">
Most issues are fixed by ensuring Node.js >= 18 is installed and restarting Claude Code. If problems persist, run `/ork:doctor --verbose`.
</Callout>

## Required: context7 MCP

OrchestKit installs cleanly without it and `/ork:doctor` reports Healthy either way.
But 22 of the <Count k="agents" /> agents grant `mcp__context7__*` in their frontmatter, and the plugin
ships no server definition for it: `.mcp.json` is user-owned and project-scoped, so the
grant refers to a server you supply. Without it, those agents answer from training data
instead of current library docs, with no error to tell you so.

Add it once, project-scoped in `.mcp.json` or user-scoped in `~/.claude.json`:

```json
{
  "mcpServers": {
    "context7": {
      "type": "http",
      "url": "https://mcp.context7.com/mcp"
    }
  }
}
```

That hosted HTTP entry is the whole free tier: 1,000 requests, public repositories, no
account. A Context7 Pro subscription ($10 per seat per month) raises it to 5,000
requests per seat and adds private repo parsing. To use a Pro key, add
`"headers": { "Authorization": "Bearer ${CONTEXT7_API_KEY}" }` to the entry and export
`CONTEXT7_API_KEY` (keys start with `ctx7sk-`).

<Callout type="warn">
A connected context7 is not proof that your key is in use. The server answers
`tools/list` with HTTP 200 for every auth state, including an unset variable that
arrives as the literal `${CONTEXT7_API_KEY}`. Only a real query discriminates: a bad key
returns `Invalid API key. Please check your API key. API keys should start with 'ctx7sk' prefix.`
Do not add the header until the variable is actually exported: with the variable unset,
the literal is sent as the token and **every** query fails. It does not fall back to the
anonymous free tier. The keyless entry above does work as the free tier, so the header
plus the `export` line ship together or neither ships.
</Callout>

The stdio transport (`npx -y @upstash/context7-mcp`) still works and is the fallback for
proxied or air-gapped networks, but it spawns one child process per Claude Code session.
Details are in the [MCP Servers guide](/docs/foundations/mcp-servers#prerequisite-context7).

## Optional: Tavily

OrchestKit works out of the box with all 3 memory tiers (Graph, Local, CC Native). For enhanced web research, enable the Tavily MCP:

**1.** Get a free API key at [app.tavily.com](https://app.tavily.com) (1,000 credits/month free)

**2.** Set the key in your shell profile (`~/.zshrc` or `~/.bashrc`):

```bash
export TAVILY_API_KEY="tvly-your-key-here"
```

**3.** Enable the MCP in `.mcp.json`:

```json
"tavily": {
  "command": "sh",
  "args": ["-c", "TAVILY_API_KEY=${TAVILY_API_KEY} exec npx -y tavily-mcp@latest"],
  "disabled": false
}
```

Without Tavily, web research falls back to WebFetch then agent-browser.

## Requirements

- **Claude Code** >= <MinCC />
- **Node.js** >= 18 (for hooks)
- **Git** (for commit/PR workflows)

## Next steps

<Cards>
  <Card title="First 10 Minutes" href="/docs/getting-started/first-10-minutes" description="Guided walkthrough of your first session" />
  <Card title="Configuration" href="/docs/getting-started/configuration" description="Project settings wizard, env, MCP" />
  <Card title="Other hosts" href="/docs/getting-started/hosts" description="Cursor, Codex, Muse Code, Pi, skills.sh" />
</Cards>
