# Skills, plugins, and MCP servers

> See the skills, plugins, MCP servers, and connectors each harness has configured on this device, and follow how your skills change over time.

The **Skills & plugins** view lists the skills, plugins, MCP servers, and
connectors that each harness on this device has configured, in one place. Use it
to find where a skill lives, compare copies across harnesses, and read earlier
versions of a skill. From the CLI you can also check why a skill failed to load
in a session and import Claude plugin eval results.

- App: **Skills & plugins**
- CLI: `hansard skills`

## Browse the inventory in the app

1. Select **Skills & plugins** in the dock. The page shows the latest scan
   and the time it ran. Tabs across the top switch between **All**,
   **Skills**, **Plugins**, **MCP servers**, and **Connectors**, and show how
   many of each match your filters. Each type's heading says in one line what
   that type is.
2. Narrow the list with **Search** (names, descriptions, and source paths),
   **Harness**, **Type**, and **Scope**. **Type** offers **Skills**,
   **Plugins & extensions**, **MCP servers**, and **Connectors**, and stays in
   step with the tabs. **Scope** offers **Global** and **Project**.
3. Expand an entry to see a table of its copies. Each row is one file and
   shows every harness that uses it, the scope, whether the copy is
   **Configured** or **Disabled**, and its source file. When a harness reads
   the file from another harness's folder or the shared `.agents` folder, the
   row names that folder. Hover over a shortened path to see it in full.
4. To read a skill's current instructions, select **Read skill** on a copy.
5. To rescan this device, select **Scan now**.

Each entry takes one row with its name, the start of its description, and an
icon for every harness that has a copy. A line under the name says what the
entry is, which harnesses use it, and where it comes from, such as
"Skill for Codex, from the Adobe plugin" or "Skill for Warp, from Claude
Code's folder". Entries with the same name and type are grouped, and each copy
keeps its own source, status, and scope. A shared name does not mean the copies
have the same content. Tags mark entries configured in a project and entries
that are disabled everywhere.

Plugins appear as their own entries, including plugins that contain only hooks,
commands, or rules. A plugin's details show its **Version** and the component
types it **Includes**. Extensions and packages also show their **Type**, and
**Files** notes a plugin whose files are missing or whose install location
Hansard can't determine. Skills and MCP servers inside a plugin also appear as
separate entries. A Codex plugin whose package name is an opaque ID shows the
display name from its manifest, with the package name under **Name**. Hansard
never runs plugin code and never shows plugin configuration values.

**Harnesses**, at the bottom of the page, counts each harness's skills,
plugins, MCP servers, and connectors, says where its skills come from (for
example, "No skills of its own. Reads skills from Codex and Claude Code"), and
notes what Hansard can't see for that harness. Select a harness's name to show
only what it uses; a summary of that harness then sits above the list, with
**Show all harnesses** to go back. Hansard reads configuration files on this
device only. It
doesn't check sign-ins, whether servers respond, or anything kept only in the
cloud. Problems a scan ran into, such as a file it could not parse, are
collected in the scan warnings notice below the table.

## Review a skill's history in the app

Hansard saves a copy of a skill's files each time a scan finds that they
changed, so you can see what a skill said at an earlier date.

1. In **Skills & plugins**, find the skill and select **History** on a copy.
2. Under **Revision history**, select a revision in the timeline. Each step
   shows its capture time, short hash, file count, and size, and **Current**
   marks the latest. When the skill has more than one file, choose a **File**.
3. Select **Snapshot** to read the file as it was, or **Changes** to compare it
   with the previous revision.

Capture times show when a scan saw a revision, not which revision a session
used. History starts with the first scan that sees a skill. Versions that
changed before then cannot be recovered.

## Find an integration

Select **Integrations** at the top of **Skills & plugins**, or choose
**Integrations** in the command palette. The picker lists agents, MCP servers,
apps, plugins, skills, and services, with a search field. Select one to see
what it adds, switch it on or off, or open its settings.

## Share them with every agent

Hansard lets each agent use the skills, MCP servers, and plugins that the other
agents installed. For example, Claude Code can call Codex's Computer Use, and
Codex can use a Claude Code skill. Shared tools appear under Hansard's entry in
each agent's tool list, and skills arrive through one `use_skill` tool.

1. In **Skills & plugins**, use **Share with all agents** to turn sharing on or
   off, and an item's **All agents** switch to share one item or keep it back.
2. Select an item to open its page. Set each tool to **Allow**,
   **Ask each time**, or **Off**, review the apps it was approved for, and stop
   the servers it runs. The page also shows the item's uses in the last 30 days
   and in all, the agents that used it, its last use, and a chart of uses per
   day over 90 days, counted from archived conversations.
3. To change what one conversation can use, open the conversation's
   **Actions** menu and select **Plugins and skills**. The change also covers
   the helpers that the conversation starts.

When Codex is signed in with ChatGPT, its app connectors are shared the same
way, and a connector tool that is not marked read-only asks before each call.

A tool that can run code, control your computer, or change cloud services asks
before each use until you allow it, whatever agent or permission mode calls it.
The request appears in the agent's own prompt when the agent can show one.
Otherwise the app shows **Approval needed** in its title bar, and the request
also waits in [Review](https://www.hansard.dev/guides/review/). Items with such
tools are marked **Recommended off**, and they stay on until you turn them off.

An approval can cover one call, one conversation and its helpers, or every
agent. A changed tool definition requires approval again. Project MCP servers
are shared only after their own agent approved them. Hansard takes a
conversation's identity from its connection, never from tool arguments.

No shared server starts until an agent calls it. A separate bridge process
runs one copy per conversation and stops it after 15 idle minutes. Restarting
the shared MCP host does not stop work in those servers. Codex connector calls
go through the Codex app server, so connector tokens stay in Codex.

When tool descriptions exceed 24 KB, tools that can run code or control the
computer remain listed. Other tools move behind search and a pair of call
tools for each server.

### Control sharing from the CLI

```sh
hansard bridge list
hansard bridge off <item>
hansard bridge on <item> --conversation <provider>:<session-id>
hansard bridge tool <item> <tool> allow
hansard bridge load <item>
hansard bridge approvals
hansard bridge pending
```

Tool modes are `allow`, `ask`, `off`, and `default`. `pending` lists requests
waiting for approval. Run `hansard help bridge` for the approval controls.

`hansard bridge disable` turns sharing off for every conversation.
`hansard bridge enable` turns it on. Setting `HANSARD_PLUGIN_BRIDGE=0` in the
watcher's environment disables the bridge for its shared MCP host. Guided
setup and `hansard init` also offer the sharing choice.

## Keep plugins in Hansard

Hansard can also keep its own copy of a plugin and turn it on for the
environments of a project, without changing any agent's settings. To add one,
open the project in **Projects** and select **Add plugin** in its **Plugins**
section. The plugin can come from a marketplace your agents already use, a
GitHub repository (`owner/repo`) or git URL, or a folder on this device. See
[Projects and coordinators](https://www.hansard.dev/guides/projects/#manage-projects-in-the-app).

A plugin Hansard keeps has its own page in **Skills & plugins**:

| Section          | What it shows                                                                                                                                                                                                                        |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Provides**     | The plugin's skills, commands, hooks, and MCP servers.                                                                                                                                                                               |
| **Use**          | How often your agents used it, **By agent** or **By item**, counted from your archived conversations. With [Claude Code activity](https://www.hansard.dev/guides/stats/#claude-code-activity) on, how fast its MCP servers answered. |
| **Environments** | The environments that turn it on. Agents started in them get it.                                                                                                                                                                     |
| **Agents**       | How each agent gets the plugin at launch, or that it reads the plugin from its own settings.                                                                                                                                         |

Personal Sync carries the plugins Hansard keeps to your other devices. A plugin
added on another device shows **Install** until this device has a copy.
**Remove**, at the top of the page, stops every environment on all your
devices from getting it and deletes Hansard's copy. A plugin added from a
folder keeps its folder.

## Manage skills from the CLI

```sh
hansard skills backup
hansard skills list --provider claude_code
hansard skills history <skill-id>
hansard skills show <skill-id> --revision <hash> --file references/guide.md
```

| Command                                | What it does                                                                                                                   |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `hansard skills backup`                | Scans this device and saves new skill revisions.                                                                               |
| `hansard skills list`                  | Lists archived skills with their revision counts, including skills whose files were deleted. `--provider` filters by harness.  |
| `hansard skills history <id>`          | Lists a skill's revisions.                                                                                                     |
| `hansard skills show <id>`             | Prints the skill's main file. `--revision` picks an earlier revision, and `--file` picks another file from the skill's folder. |
| `hansard skills failures <session-id>` | Lists the skills a session tried to load and which loads failed.                                                               |

Every command accepts `--json`.

### Check why a skill failed to load

Skill loading failures are available only from the CLI:

```sh
hansard skills failures <session-id>
```

The command lists each skill load it found in the archived session and links
every failed load to the matching events in the transcript. It reports what
happened in that session. It does not judge whether the skill caused later
problems.

## Import Claude plugin eval results

Import and review results from `claude plugin eval` runs from the CLI. Hansard
reads existing results. It does not run evaluations.

```sh
hansard eval import claude-plugin ./aggregate-result.json
hansard eval list
hansard eval show <id>
```

To tie a result to one archived revision of a skill, add both `--skill <id>`
and `--revision <hash>` when you import it. You choose this link yourself.
Hansard does not verify which files the evaluated agent loaded, and an import's
link cannot be changed later.

- Importing the same file again does nothing.
- `hansard eval list` filters by `--skill`, `--revision`, and `--model`, and
  `--limit` caps the count.
- `hansard eval show` prints the full record, including run errors and grader
  evidence. It accepts an ID prefix.
- Incomplete runs, runs with errors, and runs that skipped paid graders are
  flagged so you can leave them out of comparisons.

Eval results stay in your local archive. They are not synced and do not count
toward activity statistics.

## What each harness reports

| Harness            | What the scan finds                                                                                                                                                                                                                                                            |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Codex              | Skills, MCP servers, installed plugins, and connectors that plugins declare.                                                                                                                                                                                                   |
| Claude Code        | Skills, MCP servers, installed plugins, and project MCP entries. Project approval and managed settings are not checked.                                                                                                                                                        |
| Claude Desktop     | MCP servers, installed desktop extensions, and registered Cowork skills.                                                                                                                                                                                                       |
| GitHub Copilot     | CLI skills, MCP servers, and installed CLI plugins. IDE extensions and built-in servers are not checked.                                                                                                                                                                       |
| Antigravity        | Desktop and CLI skills, including single-file Markdown skills, local plugins, and project `.agents` folders.                                                                                                                                                                   |
| OpenCode           | Skills, MCP servers, declared plugins, and local plugin files. Remote configuration is not fetched.                                                                                                                                                                            |
| Factory            | Local and project skills, MCP servers, and declared plugins.                                                                                                                                                                                                                   |
| Grok Build         | MCP servers and skills, when Grok Build has its own configuration. Plugin registries and custom skill paths are not checked.                                                                                                                                                   |
| Devin, Windsurf    | Local skills and MCP servers. Cloud skill catalogs are not fetched.                                                                                                                                                                                                            |
| Cursor, Gemini CLI | Skill and MCP configuration files. Hansard does not run either CLI.                                                                                                                                                                                                            |
| Warp               | Skills in `~/.warp/skills` and in the other agents' skill folders Warp reads: the shared `.agents` folder and the Claude Code, Codex, Cursor, Gemini, Copilot, Factory, and OpenCode folders, globally and in projects. Rules and MCP servers saved in Warp are not listed.    |
| Amp                | Skills in `~/.config/amp/skills`, the shared `.agents` folders, Claude Code skill folders, and folders listed in `amp.skills.path`, following Amp's opt-out settings, plus MCP servers in its settings. Skills from Claude Code plugins and skill repositories are not listed. |

Project entries come from folders where you have run agents and from projects
you configured in Hansard. Harnesses without any entries are hidden. Other
harnesses are not scanned, so a missing harness or a zero count does not mean
nothing is configured.

## How to read the results

- **Configured** and **Disabled** describe the configuration file. They do not
  show whether a session loaded the skill or whether an MCP server is running.
- A connector shows what a plugin declares. It says nothing about sign-in,
  permissions, or account access.
- Some agents also load skills from another agent's folder or from the shared
  `.agents` folder. Hansard lists those skills under each agent that loads
  them and names the folder they come from. Grok Build, OpenCode, Warp, and
  Amp get these skills only once the agent itself is set up on this device.
  An agent reading another agent's folder loads only `skills/<name>/SKILL.md`,
  so nested folders and built-in `.system` skills stay with their owner.
- A plugin's **Files** line reads **Missing files** when its folder is gone and
  **Install location unknown** when Hansard can't find where it is installed.
  Plugins with their files in place have no **Files** line.
- Commands, agents, hooks, and rules appear as parts of a plugin, not as
  separate entries. Plugin caches that are not installed are not listed.

The inventory never includes MCP launch arguments, environment values, headers,
or server URLs. Scans read local files only. They do not start any harness or
connect to any server.

## How scans work

- The page shows the most recent scan right away. Opening the page starts a new
  scan in the background when the last one is missing or out of date.
- While the watcher runs, it scans every 15 minutes.
- Each scan replaces the previous inventory, so removed entries disappear. If a
  scan fails, the previous inventory stays and the page shows the error.
- A source that does not answer within two seconds is skipped and listed in
  the scan warnings notice at the bottom of the page.
- The inventory and skill history stay on this device and are not synced.

Each skill revision holds up to 512 files, 8 MiB per file, and 32 MiB in total.
Hidden files, `node_modules`, and `__pycache__` folders are skipped. A revision
that hits a limit is marked as a partial snapshot.

A revision stores only the files that changed; the others share the copy an
earlier revision saved. Each skill keeps its last 100 revisions. Past that,
older revisions that repeat a newer one's files go first, then the oldest. A
revision you tied an eval result to is always kept. A plugin's skills keep one
history as the plugin updates. Claude Desktop installs
a plugin once for each account and device, and each installation keeps its own
history.

## Troubleshooting

**Scan now is missing, or the page says scanning requires a local writable
viewer.** Remote and read-only connections can view the last scan but cannot
start one. Open the app on the device itself, or run `hansard skills backup`.

**Read skill or History is missing.** Skill text and history are available only
from a local connection to the app. Remote connections show the inventory
without file contents.

**Read skill shows no text.** Hansard displays UTF-8 skill files up to 1 MiB.
