# Claude Code compatibility

> Use Claude Code plugins, marketplaces, skills, agents, hooks and MCP servers in Line CLI, and bring over an existing setup with line import claude.

Line CLI reads Claude Code plugins and marketplaces as they are, so you can use the plugins you already have. Everything from a plugin follows Line's [trust model](/line/plugins#trust-model): installed plugins stay off until you review and enable them.

## Bring over your setup

```bash
line import claude --dry-run   # show what would be imported, change nothing
line import claude             # show each item, then apply it
```

Line reads `~/.claude` (or `CLAUDE_CONFIG_DIR`) and never overwrites anything already in Line:

| Claude Code | Line |
| --- | --- |
| `~/.claude/skills/<name>/SKILL.md` | `~/.line/skills/<name>/` |
| `~/.claude/agents/*.md` | `~/.line/agents/` (tool names are translated) |
| MCP servers (user scope, `~/.claude.json`) | `~/.line/mcp.json` |
| Hooks in `~/.claude/settings.json` | Line's hooks, shown command by command |
| `~/.claude/CLAUDE.md` | `~/.line/LINE.md`, only when Line has none |
| Known marketplaces | Line marketplaces, pinned at their current commit |

Installed Claude Code plugins are listed with the command that installs each one in Line. They aren't installed automatically, because each needs its own review and enable step. `-y` applies everything without asking per item.

In a project, Line follows `LINE.md`, `AGENTS.md` or `CLAUDE.md` at the root.

## Plugins

| Piece | In Line |
| --- | --- |
| `.claude-plugin/plugin.json` (`name`, `version`, `description`, `author`, `license`, `commands`, `agents`, `hooks`, `mcpServers`) | Read. With no manifest, the folder name is the plugin name |
| `commands/*.md` (front matter `description`, `argument-hint`, `allowed-tools`, `model`) | `/<plugin>:<command>`, or `/<command>` when no other plugin uses the name. `$ARGUMENTS`, `$1`…`$9`, and `@file` attaches a file |
| `agents/*.md` | Sub-agents named `<plugin>:<agent>`; tool names are translated |
| `skills/<name>/SKILL.md` | Available while the plugin is enabled |
| `hooks/hooks.json` | PreToolUse, PostToolUse, UserPromptSubmit, Stop, SessionStart, SessionEnd, PreCompact, SubagentStop, Notification |
| `.mcp.json` / `mcpServers` | Started when the plugin is enabled |
| `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${CLAUDE_PROJECT_DIR}` | Set for hooks and MCP servers |
| `userConfig`, `bin/`, `.lsp.json`, `themes/`, `output-styles/` | Not yet (planned for 1.1) |

<Warning>
Inline !`command` in a command file runs **only after you approve the exact commands**, every time and in any mode, and your deny rules still apply. Its output replaces it in the prompt.
</Warning>

## Hooks

Hooks from Claude Code plugins see Claude Code tool names (`Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Task`…) in their matchers and in their stdin JSON (`tool_name`, `tool_input.file_path`, `tool_input.command`).

- Exit code **2** blocks the call.
- JSON output is understood: `permissionDecision` `deny` or `ask`, `decision: "block"`, `continue: false` and `additionalContext`.
- `allow` never skips Line's own approval.
- PreToolUse runs before the permission prompt.
- A hook that runs past its timeout (60 seconds by default) is stopped together with everything it started.

## Marketplaces

Claude Code marketplaces (`marketplace.json`) work as Line marketplaces:

```bash
line plugin marketplace add <owner/repo | git URL | folder>
line plugin install <name>@<marketplace>
```

See [Plugins and marketplaces](/line/plugins) for updating, removing and the full trust model.
