Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
"Improve my model accuracy and data pipeline"
],
"brandColor": "#6A5CFF",
"screenshots": []
"screenshots": [
"assets/roboflow-plugin-overview.svg"
]
}
}
27 changes: 27 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Validate plugin

on:
pull_request:
push:
branches: [main]
workflow_dispatch: {}

permissions:
contents: read

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"

- name: Validate plugin structure
run: python3 scripts/validate_plugin.py
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@

.claude/state/
.claude/worktrees/

.reports/
47 changes: 43 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,22 @@ claude --plugin-dir .

### Codex

The Codex CLI currently exposes `codex plugin marketplace add`, `upgrade`, and `remove`. It does not expose a direct `codex plugin install` command or a `codex --plugin-dir` flow, so add this repo as a marketplace source and install the plugin from the plugin browser.
Add this repo as a marketplace source, then install the plugin from that marketplace.

Install from GitHub:

```bash
codex plugin marketplace add roboflow/computer-vision-skills
codex plugin add roboflow@roboflow
```

Restart Codex, then open the plugin browser:
You can also install from the plugin browser after adding the marketplace:

```text
codex /plugins
```

Choose the **Roboflow** marketplace source, select the **Roboflow** plugin, install it, and press <kbd>Space</kbd> if it is installed but still disabled.
Choose the **Roboflow** marketplace source, select the **Roboflow** plugin, install it, and press <kbd>Space</kbd> if it is installed but still disabled. Restart Codex after installing or upgrading a plugin so cached skill metadata is refreshed.

<details>
<summary>Local clone workflow</summary>
Expand All @@ -81,13 +82,16 @@ When editing a local clone, register it as a local marketplace source:
git clone https://github.com/roboflow/computer-vision-skills
cd computer-vision-skills
codex plugin marketplace add .
codex plugin add roboflow@roboflow
```

Restart Codex after edits. If the plugin browser still shows stale metadata, remove and re-add the local marketplace:
Restart Codex after edits. If Codex still shows stale metadata, upgrade the marketplace or remove and re-add it:

```bash
codex plugin marketplace upgrade roboflow
codex plugin marketplace remove roboflow
codex plugin marketplace add .
codex plugin add roboflow@roboflow
```

</details>
Expand All @@ -105,6 +109,20 @@ Codex caches installed plugins under `~/.codex/plugins/cache/`, so a running Cod

Codex CLI picks up `ROBOFLOW_API_KEY` from the shell environment that launches the `codex` binary. In Codex desktop, set the key in the local environment used by the workspace. Use a project-scoped `.env` if you need different keys per project.

### One-line installer

The installer script registers this marketplace and installs the plugin for whichever supported agent CLIs it finds (`codex`, `claude`, or both). When using the published endpoint:

```bash
curl -fsSL https://repo.roboflow.com/agent-install/agent.sh | bash
```

PowerShell:

```powershell
iwr -useb https://repo.roboflow.com/agent-install/agent.ps1 | iex
```

## Install standalone skills

If you want the skills without the MCP server bundle — for example, with an agent that doesn't speak the plugin manifest format — install them directly:
Expand Down Expand Up @@ -134,6 +152,14 @@ The `npx skills` CLI works with any agent that reads `SKILL.md` files from `.cla
- **training-and-evaluation**: training models and improving accuracy
- **universe**: searching and using Roboflow Universe

## Try it

After installing, start with one of these prompts:

- "Build a Roboflow project for detecting defects in my manufacturing images."
- "Run my saved Roboflow Workflow on a test image and save visual outputs to disk."
- "Review my dataset and recommend the next model-training iteration."

## MCP and skills

The [Roboflow MCP server](https://mcp.roboflow.com/) exposes live tools for projects, images, annotations, versions, models, Workflows, Universe, and feedback. Skills own the expert guidance and workflow playbooks.
Expand All @@ -144,6 +170,13 @@ That separation keeps the install model simple:
- Plugin skills: durable product guidance and workflow playbooks
- This repo: canonical source for skill updates and plugin distribution

## Limitations

- Live MCP tools require `ROBOFLOW_API_KEY` in the environment used by your agent.
- Product routes, model availability, credit rates, and pricing can change; verify current commercial details at `roboflow.com/pricing`, `roboflow.com/credits`, or the in-app billing pages.
- Local skills are durable guidance, not a substitute for live MCP schema checks when a workflow block, API field, or tool parameter is uncertain.
- The installer scripts require the target agent CLI (`codex` or `claude`) to already be installed.

<details>
<summary>Get your API key</summary>

Expand All @@ -166,6 +199,12 @@ For persistence, add the `export` to your shell profile (`~/.zshrc`, `~/.bashrc`

Skills are markdown. Open a PR with edits or a new folder under [`skills/`](skills/). Each new skill must have a `SKILL.md` at its root with `name` and `description` frontmatter.

Run the structural validator before opening a PR:

```bash
python3 scripts/validate_plugin.py
```

## License

Apache-2.0
67 changes: 65 additions & 2 deletions agent-install/agent.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,70 @@
# Usage:
# iwr -useb https://repo.roboflow.com/agent-install/agent.ps1 | iex
#
# TODO: install logic.
[CmdletBinding()]
param(
[switch] $CodexOnly,
[switch] $ClaudeOnly
)

$ErrorActionPreference = "Stop"

Write-Host "Roboflow agent installer - placeholder. Replace with real install logic."
$Source = if ($env:ROBOFLOW_PLUGIN_SOURCE) { $env:ROBOFLOW_PLUGIN_SOURCE } else { "roboflow/computer-vision-skills" }
$Marketplace = if ($env:ROBOFLOW_PLUGIN_MARKETPLACE) { $env:ROBOFLOW_PLUGIN_MARKETPLACE } else { "roboflow" }
$Plugin = if ($env:ROBOFLOW_PLUGIN_NAME) { $env:ROBOFLOW_PLUGIN_NAME } else { "roboflow" }

$WantCodex = -not $ClaudeOnly
$WantClaude = -not $CodexOnly
$Installed = $false

function Install-CodexPlugin {
if (-not (Get-Command codex -ErrorAction SilentlyContinue)) {
Write-Host "codex not found; skipping Codex install."
return $false
}

Write-Host "Registering Roboflow marketplace for Codex..."
& codex plugin marketplace add $Source
if ($LASTEXITCODE -ne 0) {
Write-Host "Codex marketplace add failed; trying install with an existing marketplace named '$Marketplace'."
}

Write-Host "Installing Roboflow plugin for Codex..."
& codex plugin add "$Plugin@$Marketplace"
if ($LASTEXITCODE -ne 0) {
& codex plugin add $Plugin --marketplace $Marketplace
}
return ($LASTEXITCODE -eq 0)
}

function Install-ClaudePlugin {
if (-not (Get-Command claude -ErrorAction SilentlyContinue)) {
Write-Host "claude not found; skipping Claude Code install."
return $false
}

Write-Host "Registering Roboflow marketplace for Claude Code..."
& claude plugin marketplace add $Source
if ($LASTEXITCODE -ne 0) {
Write-Host "Claude marketplace add failed; trying install with an existing marketplace."
}

Write-Host "Installing Roboflow plugin for Claude Code..."
& claude plugin install $Plugin
return ($LASTEXITCODE -eq 0)
}

if ($WantCodex -and (Install-CodexPlugin)) {
$Installed = $true
}

if ($WantClaude -and (Install-ClaudePlugin)) {
$Installed = $true
}

if (-not $Installed) {
Write-Error "No supported agent CLI was installed successfully. Install Codex or Claude Code, then rerun this script."
exit 1
}

Write-Host "Roboflow plugin installation completed. Restart your agent so it reloads plugin metadata."
85 changes: 83 additions & 2 deletions agent-install/agent.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,88 @@
# Usage:
# curl -fsSL https://repo.roboflow.com/agent-install/agent.sh | bash
#
# TODO: install logic.
set -euo pipefail

echo "Roboflow agent installer — placeholder. Replace with real install logic."
SOURCE="${ROBOFLOW_PLUGIN_SOURCE:-roboflow/computer-vision-skills}"
MARKETPLACE="${ROBOFLOW_PLUGIN_MARKETPLACE:-roboflow}"
PLUGIN="${ROBOFLOW_PLUGIN_NAME:-roboflow}"

want_codex=1
want_claude=1

usage() {
printf '%s\n' "Usage: $0 [--codex-only|--claude-only]"
printf '%s\n' "Environment overrides:"
printf '%s\n' " ROBOFLOW_PLUGIN_SOURCE=$SOURCE"
printf '%s\n' " ROBOFLOW_PLUGIN_MARKETPLACE=$MARKETPLACE"
printf '%s\n' " ROBOFLOW_PLUGIN_NAME=$PLUGIN"
}

for arg in "$@"; do
case "$arg" in
--codex-only)
want_codex=1
want_claude=0
;;
--claude-only)
want_codex=0
want_claude=1
;;
-h|--help)
usage
exit 0
;;
*)
printf 'Unknown argument: %s\n\n' "$arg" >&2
usage >&2
exit 2
;;
esac
done

installed=0

install_codex() {
if ! command -v codex >/dev/null 2>&1; then
printf '%s\n' "codex not found; skipping Codex install."
return 1
fi

printf '%s\n' "Registering Roboflow marketplace for Codex..."
if ! codex plugin marketplace add "$SOURCE"; then
printf '%s\n' "Codex marketplace add failed; trying install with an existing marketplace named '$MARKETPLACE'."
fi

printf '%s\n' "Installing Roboflow plugin for Codex..."
codex plugin add "${PLUGIN}@${MARKETPLACE}" || codex plugin add "$PLUGIN" --marketplace "$MARKETPLACE"
}

install_claude() {
if ! command -v claude >/dev/null 2>&1; then
printf '%s\n' "claude not found; skipping Claude Code install."
return 1
fi

printf '%s\n' "Registering Roboflow marketplace for Claude Code..."
if ! claude plugin marketplace add "$SOURCE"; then
printf '%s\n' "Claude marketplace add failed; trying install with an existing marketplace."
fi

printf '%s\n' "Installing Roboflow plugin for Claude Code..."
claude plugin install "$PLUGIN"
}

if [ "$want_codex" -eq 1 ] && install_codex; then
installed=1
fi

if [ "$want_claude" -eq 1 ] && install_claude; then
installed=1
fi

if [ "$installed" -ne 1 ]; then
printf '%s\n' "No supported agent CLI was installed successfully. Install Codex or Claude Code, then rerun this script." >&2
exit 1
fi

printf '%s\n' "Roboflow plugin installation completed. Restart your agent so it reloads plugin metadata."
33 changes: 33 additions & 0 deletions assets/roboflow-plugin-overview.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading