Skip to content

codebytes/document-tools

v1.3.0MIT

Compact skill examples used by the Agent Skills talk

Document Tools Demo Plugin

This compact plugin is the live example used in the "Agent Skills, Plugins & Marketplace" talk. It starts with a one-file skill, then shows a skill with resources, a portable Agent Plugins 1.0 package, thin native-host adapters, and a checkable input/output example. Guidance was checked on September 21, 2026.

This is a presentation fixture. Maintained reusable skills live in codebytes/skills.

Walk the checked-in fixture rather than reconstructing it from abbreviated slide snippets. The main demo validates locally before distribution; publication, installation, and model-backed evaluations are separate explicit actions.

Structure

document-tools/
├── plugin.json                 # Agent Plugins 1.0: Copilot, VS Code, Codex
├── gemini-extension.json       # Gemini's native extension adapter
├── .claude-plugin/
│   └── plugin.json             # Claude Code native adapter
├── com.github.copilot/
│   ├── agents/
│   │   └── data-analyst.agent.md
│   └── hooks/
│       └── hooks.json
├── examples/
│   ├── sample.csv
│   └── sample-report.md
└── skills/
    ├── release-note/
    │   └── SKILL.md            # Entire minimal example; nothing else needed
    └── csv-analysis/
        ├── SKILL.md            # Resource-backed example
        ├── scripts/profile_csv.py
        ├── references/methodology.md
        ├── assets/report.md
        └── evals/csv-analysis/eval.yaml  # Vally capability cases

Start Small, Then Add Resources

The complete release-note skill is only seven lines:

---
name: release-note
description: Write a short release note from a change summary.
---

Write two sentences: what changed, then why it matters.
Use plain language and only the facts the user supplied.

After loading the package in your chosen host, ask:

Use release-note: users can now export search results to CSV for spreadsheet analysis.

There is no script, skill-local test, eval, runtime manifest, or extra configuration inside that skill folder. The enclosing plugin is just one way to distribute it. The plain instructions operate on text already supplied in the request.

The separate csv-analysis skill is the next example: it needs deterministic calculations, supporting methodology, and a report template. Its optional Waza/ Vally examples illustrate how to evaluate a growing workflow; they are not a requirement to create or use the minimal skill.

Catalogs

The repository root also contains three catalog entry points:

HostCatalog
Copilot CLI / VS Code.github/plugin/marketplace.json
Claude Code.claude-plugin/marketplace.json
Codex.agents/plugins/marketplace.json

All point to ./plugins/document-tools from the repository root, not from their manifest's directory. The Copilot and Claude catalogs have matching content; Codex uses its documented typed local source. All use the marketplace name codebytes-agent-skills. Gemini uses its native extension flow, not these catalogs.

Catalog identity changed: Claude reserves agent-skills, so the catalogs use the publisher-qualified name codebytes-agent-skills. The repository URL remains codebytes/agent-skills, and the plugin remains document-tools. Existing document-tools@agent-skills installations are not automatically migrated. After publishing, register the updated catalog and use the new selector; inspect any old installation separately before removing it.

What Each Host Loads

HostEntry pointDemo capabilities
Copilot CLIRoot plugin.jsonBoth skills, namespaced agent, namespaced hook
VS Code with CopilotRoot plugin.jsonBoth skills and supported/enabled Copilot extensions
Claude Code.claude-plugin/plugin.jsonBoth skills and the explicitly referenced shared agent
Codex CLI / desktopRoot plugin.jsonBoth skills; not the Copilot agent or hook
Gemini CLIgemini-extension.jsonBoth skills; not the Copilot/Claude agent or hook
Rider Skills ManagerLocal source plugins/document-tools/skills/Selected skills only, for supported AI Assistant agents
CLI in Rider's terminalThe chosen CLI's entry point aboveCLI capabilities; not proof of IDE-native package support

The root manifest's exact $schema selects Agent Plugins 1.0. It has no legacy component-path fields: skills are discovered under skills/, and portable MCP configuration would belong in mcp.json. This demo has no MCP or LSP server and needs no redundant .codex-plugin/plugin.json.

The Claude adapter lists the shared agent's file path in an array. Its Bash, Read, Edit, Write, Grep, and Glob tool names are also documented Copilot aliases. Skill is included to permit Claude's native skill invocation; tool availability in other hosts is still host-specific. This is deliberate compatibility, not a claim that all agent definitions or tool APIs are portable. If no skill tool is available, the profile reads the canonical file and explicitly distinguishes instruction reuse from native invocation.

The Copilot SubagentStart hook emits a local-data-handling reminder as JSON. It includes the CLI's additionalContext field and VS Code's hookSpecificOutput envelope. It does not grant permissions, write files, contact a server, or prove that the CSV skill activated. It can run for other subagents too. Claude, Codex, and Gemini are not configured to load this hook.

The Codex IDE extension is not the same surface as Codex CLI/desktop: current OpenAI documentation says that extension does not support plugins. OpenAI API skill and plugin loading is separate from the local workflows below.

Rehearsal Setup

Run these commands from the repository root, with the relevant host CLI installed. The skill's calculations require Python 3 and only standard-library modules. Installation may require host trust/approval; inspect the source first. No install command here submits the package to a public plugin directory.

Remote installs see the last published commit, not uncommitted local changes. Use the local paths for rehearsing edits. Do not register both local and remote catalogs under the same name and assume they are interchangeable.

Verify Locally Before Publishing

After reviewing the code, run the deterministic profiler from the repository root:

SKILL=plugins/document-tools/skills/csv-analysis
python3 "$SKILL/scripts/profile_csv.py" \
  plugins/document-tools/examples/sample.csv --delimiter ,
python3 -m unittest discover -s tests -v

The script uses only Python's standard library. It returns aggregate JSON, not the input rows, and it does not write files or contact a server. Read the linked methodology for missing markers, sample standard deviation, type inference, and the exact 100 MiB sampling boundary. The report template loads separately when formatting; ordinary links do not automatically inject target contents.

Next use the session-only preview below, inspect invocation, and compare the actual result. Static checks and a correct profiler do not prove model routing. Keep the expected report as an honestly labeled offline fallback.

Copilot CLI

For a session-only local preview:

PLUGIN="$PWD/plugins/document-tools"
copilot --plugin-dir "$PLUGIN" plugin list
copilot --plugin-dir "$PLUGIN" skill list
copilot --plugin-dir "$PLUGIN"

The first two commands verify the mount without starting a model conversation. The last starts the interactive preview. Each new process needs --plugin-dir; a plain copilot skill list in another terminal does not inherit that mount.

Inside the preview, open /skills and inspect the exact listed name. Same-name skills can be namespaced rather than appearing under the bare name. On the verified Copilot CLI 1.0.87-0 setup, an installed Codebytes collection causes these distinct entries:

  • document-tools:csv-analysis - this local demo.
  • codebytes-skills:csv-analysis - the separately installed collection.
  • release-note - this demo's unique one-file skill.

In that setup use /skills info document-tools:csv-analysis and /skills info release-note. In a clean setup, use whatever identifier /skills shows instead. Check that each source path points into the intended plugins/document-tools/skills/ directory. /agent inspects the optional agent.

If discovery still differs, confirm copilot --version, that copilot --help documents --plugin-dir, and that the terminal is in the edited checkout. The plugin listing should show document-tools version 1.3.0 as enabled and external; skill list --json provides source paths. No global install is needed.

For a marketplace installation:

copilot plugin marketplace add .
copilot plugin marketplace browse codebytes-agent-skills
copilot plugin install document-tools@codebytes-agent-skills
copilot plugin list
copilot skill list

After publishing, replace . with codebytes/agent-skills to register the remote catalog. To update a Git-backed installation:

copilot plugin marketplace update codebytes-agent-skills
copilot plugin update document-tools@codebytes-agent-skills

Catalog refresh and installed-plugin update are distinct. Prefer this marketplace workflow over relying on direct-install behavior across versions.

VS Code

Register the local plugin root in settings, substituting its actual absolute path:

{
  "chat.plugins.enabled": true,
  "chat.pluginLocations": {
    "/absolute/path/agent-skills/plugins/document-tools": true
  }
}

For the published catalog:

{
  "chat.plugins.marketplaces": ["codebytes/agent-skills"]
}

Browse Extensions → @agentPlugins, or Chat: Open Customizations → Plugins, and review the marketplace trust prompt. Plugin support is not blanket preview-only; individual capabilities such as hooks can still be preview features or disabled by policy. Current VS Code also supports workspace plugin recommendations and discovers Copilot CLI-installed plugins.

Claude Code CLI

Validate and load the local plugin for one session:

claude plugin validate --strict ./plugins/document-tools
claude --plugin-dir ./plugins/document-tools

Explicitly invoke /document-tools:csv-analysis in the session. For a catalog installation:

claude plugin marketplace add .
claude plugin install document-tools@codebytes-agent-skills

Use codebytes/agent-skills instead of . for a published catalog. The marketplace adapter is .claude-plugin/marketplace.json; the Copilot-only catalog path is not the Claude discovery contract.

The two-command flow is intentional: the combined /plugin install <plugin> --marketplace <source> shortcut arrived in Claude Code 2.1.275, newer than the 2.1.240 validator used for this fixture. Version 2.1.275 also introduced account skill/plugin sync into signed-in terminal sessions. Inspect the active source rather than assuming a same-name component came from this local plugin.

This section is specifically for the claude CLI, not claude.ai or Cowork. It also applies when that CLI runs in Rider's integrated terminal from the same project root. The JetBrains Claude Code bridge, when installed and compatible, uses the existing CLI executable on the IDE's PATH; check claude --version in that terminal rather than assuming it matches another shell.

Codex CLI

codex plugin marketplace add .
codex plugin list --marketplace codebytes-agent-skills --available --json
codex plugin add document-tools@codebytes-agent-skills
codex

In the new session, inspect /plugins and /skills, then explicitly request $csv-analysis. Codex reads the portable skill; it does not turn the shared Markdown profile into a Codex custom agent.

For a published Git-backed catalog, register codebytes/agent-skills instead of .. The CLI also supports --ref when adding Git marketplaces. Updates use:

codex plugin marketplace upgrade codebytes-agent-skills
codex plugin add document-tools@codebytes-agent-skills

marketplace upgrade refreshes Git snapshots. For local source changes, reinstall with codex plugin add; do not assume the installed copy follows every source edit. A package version is not a Git revision pin.

Gemini CLI

Confirm current Gemini CLI account/API access before rehearsing. Google's May 2026 announcement changed consumer access from June 18 while preserving specified enterprise subscriptions and paid API-key access. Do not assume the older free consumer sign-in flow, or confuse Gemini CLI with Antigravity CLI.

Validate, then link the native extension for local development:

gemini extensions validate ./plugins/document-tools
gemini extensions link ./plugins/document-tools
gemini extensions list
gemini skills list

Linking registers the extension in the user's Gemini configuration; it is not a session-only flag. Source changes remain in the repository. Restart Gemini and inspect available skills before the demo. Request csv-analysis explicitly and follow the host's activation/trust prompts.

The extension uses default skills/ discovery. The portable manifest and Copilot namespace do not replace Gemini's native extension manifest. Do not use Copilot's owner/repo:subdirectory syntax with Gemini. Native Agent Plugins 1.0 loading in Gemini CLI is not confirmed by the official host docs checked here; Google's standards participation is not evidence of that implementation.

For public skill-only installation, use the documented subdirectory option after publishing the repository changes:

gemini skills install https://github.com/codebytes/agent-skills.git \
  --path plugins/document-tools/skills/csv-analysis \
  --scope user
gemini skills list

Choose this or the local extension route for a rehearsal. Workspace and user skills override extension-bundled skills of the same name; installing both can hide which copy ran. Within a workspace/user scope, .agents/skills/ takes precedence over .gemini/skills/.

The nested extension adapter does not qualify this repository for direct whole-repo extension installation or the Gemini gallery. Those distribution routes require the extension manifest at the repository/release-archive root. Do not invent an extension-install --path flag; the option above belongs to skills install. Gemini-specific subagents and hooks could be added in their native layouts, but are intentionally not part of this adapter.

JetBrains Rider

First identify the entry point and its version. Rider's AI Assistant, the separate GitHub Copilot plugin, and CLI sessions in its terminal do not necessarily load the same configuration.

AI Assistant Skills Manager (documented in Rider 2026.2):

  1. Open Settings/Preferences → Tools → AI Assistant → Skills.
  2. Choose Skills Settings → Manage Skill Directories.
  3. Add the absolute path to this repository's plugins/document-tools/skills/ as a local source.
  4. Select csv-analysis and install it for the intended scope. IDE scope avoids adding a generated copy to this source repository; generic Project scope uses .agents/skills/.
  5. Select a supported agent, inspect the skill's enabled state/source, and use Try in chat. Then run the sample-data prompt and compare its measured results.

The current AI Assistant agent matrix documents Skills Manager support for Claude Agent and Codex; do not assume every entry in the ACP Registry has the same integration. A managed Claude Agent chat is not simply the installed Claude Code CLI with every CLI plugin option forwarded.

Optional CLI staging into a separate Rider project, from this repository:

gh skill install ./plugins/document-tools csv-analysis --from-local \
  --dir /path/to/your-rider-project/.agents/skills

Replace the destination with the actual project path. GitHub CLI copies the skill and adds provenance metadata; it does not install the enclosing plugin, agent, or hook. Continue authoring only the canonical plugin-local skill, not the generated installation copy. This staging step is not a Rider runtime activation test. The bundled sample paths below assume Rider opened this talk repository; in another project, supply the actual accessible path to the CSV.

GitHub Copilot's JetBrains plugin: open its chat Customizations UI to inspect the discovered skill and the selected local/CLI harness. GitHub announced agent skills GA for this integration on June 2, 2026. When using Copilot CLI in Rider's terminal, use the Copilot CLI package instructions above instead of inventing Rider-specific plugin.json settings.

Claude Code CLI in Rider: run the established CLI workflow from Rider's terminal at the project root, for example claude --plugin-dir ./plugins/document-tools, then invoke /document-tools:csv-analysis. IDE bridge installation is separate and is not performed by this repository's validation commands.

Do not paste chat.pluginLocations or chat.plugins.marketplaces into Rider: they are VS Code settings. The ACP Registry, Skills Manager's skill sources, JetBrains Marketplace, and the demo's plugin catalogs serve different purposes. Follow the installed agent's invocation UI instead of assuming every CLI slash command works in every IDE chat.

Check the Result

Use this prompt in the chosen host, applying its explicit skill-invocation syntax where available:

Use the csv-analysis skill from document-tools to profile
plugins/document-tools/examples/sample.csv.
Return a Markdown report. Do not modify or upload the input.

For Copilot, substitute the exact skill identifier from /skills, for example document-tools:csv-analysis when a same-name installed skill causes namespacing.

Compare measured facts with sample-report.md:

  • 10 data rows, 5 columns, and no duplicate rows.
  • One missing salary and one missing start date: 48/50 cells = 96% complete.
  • Numeric statistics exclude missing values and use sample standard deviation.
  • Sampling, encoding, and calculation failures must be reported, not hidden.
  • Currency, comparative age claims, and tenure require additional metadata; the reference report does not infer them from column names or old dates.

Installation, enabled state, and invocation are separate checks. An agent may not automatically choose the skill, and same-name local skills or policy can change what loads. Keep the expected report as a live-demo fallback rather than claiming an unobserved model run succeeded.

Quality Layers

The resource-backed CSV example aligns with codebytes/skills without duplicating its managed distribution repository. These quality tools are optional, and the minimal release-note skill intentionally has none of this scaffolding:

LayerLocationWhat it establishes
Deterministic checksRoot tests/Counts, scripts, errors, input preservation, package coherence
Waza mock trigger suiteRoot evals/csv-analysis/Heuristic positive/negative routing coverage
Vally capability specSkill-local evals/csv-analysis/Opt-in agent execution, invocation, and rubric evidence

See quality setup and commands. A mock trigger pass is not a real model selection result; Vally's prompt judge is not a sandbox or a substitute for exact formula checks. The slide examples name which layer ran. Review tool versions and obtain approval before starting agent/judge calls.

Validation

From the repository root:

python3 -m unittest discover -s tests -v
claude plugin validate --strict ./plugins/document-tools
claude plugin validate --strict .claude-plugin/marketplace.json
gemini extensions validate ./plugins/document-tools

The Python checks need Python 3.9 or later; host validators require their respective CLIs. These checks do not exercise model routing, every OS, or every host's runtime permissions. In Rider, also record the IDE version, integration, agent/harness, scope, and skill source, then verify actual invocation and output. Do not install or enable the demo globally as an incidental test.

See the repository compatibility baseline and official sources for the current standards, host caveats, and dated announcements.