Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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"
]
}
}
22 changes: 22 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
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: Validate plugin structure
run: python scripts/validate_plugin.py
Comment thread
Copilot marked this conversation as resolved.
Outdated
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 @@ -133,6 +151,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 @@ -143,6 +169,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 @@ -165,6 +198,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
python 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