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
5 changes: 5 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
"name": "openrag",
"source": "./plugins/openrag",
"description": "Guided installation and SDK integration skills for OpenRAG."
},
{
"name": "openrag-dev",
"source": "./plugins/openrag-dev",
"description": "Developer/QA workflow skills for OpenRAG contributors."
Comment on lines +11 to +14

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check for the plugin manifest
fd -t f 'plugin.json' plugins/openrag-dev/.claude-plugin/ 2>/dev/null && cat plugins/openrag-dev/.claude-plugin/plugin.json || echo "NOT FOUND"

Repository: langflow-ai/openrag

Length of output: 167


Add plugins/openrag-dev/.claude-plugin/plugin.json. The marketplace entry points at ./plugins/openrag-dev, but that directory does not contain the plugin manifest Claude Code expects for installs. Add a valid manifest with at least name and version.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude-plugin/marketplace.json around lines 11 - 14, Add the missing plugin
manifest at the openrag-dev plugin directory referenced by the marketplace
entry, using the expected plugin.json filename and a valid JSON object
containing at least name and version. Ensure the manifest identifies the
openrag-dev plugin consistently with the marketplace entry.

}
]
}
1 change: 1 addition & 0 deletions .claude/skills/backport
1 change: 1 addition & 0 deletions .claude/skills/qa-handoff
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ This repository ships with **agent skills** that any compliant agent can use to
| `openrag_install` | [`plugins/openrag/skills/install/SKILL.md`](plugins/openrag/skills/install/SKILL.md) | Plan and execute a minimal OpenRAG installation, verify locally. |
| `openrag_sdk` | [`plugins/openrag/skills/sdk/SKILL.md`](plugins/openrag/skills/sdk/SKILL.md) | Guide SDK integration (Python, TypeScript, MCP) with code examples. |

The `openrag-dev` plugin holds internal contributor/QA workflow skills (not distributed to end users installing OpenRAG):

| Skill | File | Purpose |
| --- | --- | --- |
| `openrag_dev_qa_handoff` | [`plugins/openrag-dev/skills/qa-handoff/SKILL.md`](plugins/openrag-dev/skills/qa-handoff/SKILL.md) | Generate a QA handoff message for a release branch: per-commit fix summary, PR link, and test steps within a date range. |
| `openrag_dev_backport` | [`plugins/openrag-dev/skills/backport/SKILL.md`](plugins/openrag-dev/skills/backport/SKILL.md) | Backport commits/PRs from a source branch into a target branch: one PR per commit, ordered, conflicts resolved and verified. |

## How to use these skills

Pick the path that matches your agent runtime.
Expand Down
63 changes: 48 additions & 15 deletions plugins/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,51 +12,84 @@ openrag/
│ └── marketplace.json # turns the repo into a Claude Code marketplace
├── plugins/
│ ├── README.md # this file
│ └── openrag/ # one plugin, can grow to many
│ ├── openrag/ # end-user facing: install + SDK integration
│ │ ├── .claude-plugin/
│ │ │ └── plugin.json # plugin manifest (name, version, repo)
│ │ └── skills/
│ │ ├── install/SKILL.md # guided OpenRAG installation
│ │ └── sdk/SKILL.md # OpenRAG SDK integration helper
│ └── openrag-dev/ # internal contributor/QA workflow skills
│ ├── .claude-plugin/
│ │ └── plugin.json # plugin manifest (name, version, repo)
│ │ └── plugin.json
│ └── skills/
│ ├── install/SKILL.md # guided OpenRAG installation
│ └── sdk/SKILL.md # OpenRAG SDK integration helper
│ ├── qa-handoff/SKILL.md # release-branch QA handoff generator
│ └── backport/SKILL.md # cross-branch PR backport automation
├── .claude/
│ └── skills/ # symlinks into plugins/openrag/skills
│ ├── install -> ../../plugins/openrag/skills/install
│ └── sdk -> ../../plugins/openrag/skills/sdk
│ └── skills/ # symlinks into plugins/<plugin>/skills
│ ├── install -> ../../plugins/openrag/skills/install
│ ├── sdk -> ../../plugins/openrag/skills/sdk
│ ├── qa-handoff -> ../../plugins/openrag-dev/skills/qa-handoff
│ └── backport -> ../../plugins/openrag-dev/skills/backport
└── AGENTS.md # entry point for any agent working in the repo
```

The skills under `plugins/openrag/skills/` are the single source of truth. Everything else (`.claude/skills/` symlinks, marketplace/plugin manifests, `AGENTS.md`) points at them, so edits in one place propagate everywhere.
The skills under each `plugins/<plugin>/skills/` directory are the single source of truth. Everything else (`.claude/skills/` symlinks, marketplace/plugin manifests, `AGENTS.md`) points at them, so edits in one place propagate everywhere.

## Available plugins

| Plugin | Audience | README |
| --- | --- | --- |
| `openrag` | People using/installing OpenRAG | [`plugins/openrag/`](openrag/) — install and SDK-integration skills (no dedicated README yet; see this file) |
| `openrag-dev` | OpenRAG contributors | [`plugins/openrag-dev/README.md`](openrag-dev/README.md) — internal dev/QA workflow skills |

## How users consume the skills

There are four ways to get these skills in front of an agent.
There are five ways to get these skills in front of an agent. The examples below use the `openrag` plugin; swap in `openrag-dev` (or any future plugin) to get that one instead — see its README for plugin-specific details.

### 1. Clone this repo and use Claude Code

No install step. `.claude/skills/` symlinks into the plugin, so Claude Code auto-discovers `install` and `sdk` when it starts in this directory. Invoke with `/install` or `/sdk`, or let Claude trigger them automatically based on the `description` fields.
No install step. `.claude/skills/` symlinks into each plugin, so Claude Code auto-discovers every skill (`install`, `sdk`, `qa-handoff`, `backport`, ...) when it starts in this directory. Invoke with `/install`, `/sdk`, `/qa-handoff`, `/backport`, etc., or let Claude trigger them automatically based on the `description` fields.

### 2. Install into Claude Code globally (any project)

```
/plugin marketplace add langflow-ai/openrag
/plugin install openrag@openrag
/plugin install openrag-dev@openrag
```

The first command registers this repo as a marketplace (reads `.claude-plugin/marketplace.json`). The second installs the `openrag` plugin defined in `plugins/openrag/.claude-plugin/plugin.json`. The skills then work in any directory, not just this repo.
The first command registers this repo as a marketplace (reads `.claude-plugin/marketplace.json`). The next two install individual plugins, each defined by its own `plugins/<plugin>/.claude-plugin/plugin.json`. Installed skills then work in any directory, not just this repo.

### 3. Load from the Claude Agent SDK or other skill-aware runtimes

Point your skill loader at `plugins/openrag/skills/`. Each subdirectory is one skill. The SKILL.md format is Anthropic's Agent Skills spec and is consumed by the Claude Agent SDK and compatible runtimes.
Point your skill loader at `plugins/<plugin>/skills/`. Each subdirectory is one skill. The SKILL.md format is Anthropic's Agent Skills spec and is consumed by the Claude Agent SDK and compatible runtimes.

### 4. Any other agent (generic)

Read `SKILL.md` directly. The frontmatter `description` tells the agent when the skill is relevant; the markdown body is the instruction set. `AGENTS.md` at the repo root lists the available skills and links to them.

### 5. `npx skills` CLI (any repo, any supported agent)

[`npx skills`](https://github.com/vercel-labs/skills) is a third-party, agent-agnostic package manager for `SKILL.md`-based skills — it works with Claude Code, Cursor, OpenCode, Codex, and others. It scans a source for `SKILL.md` files and installs them into the target agent's skills directory (symlinked by default).

```bash
# from a clone of this repo — discovers every SKILL.md across all plugins
npx skills add . --list

# once pushed, from anywhere — --skill matches the SKILL.md frontmatter `name`, not the directory name
npx skills add langflow-ai/openrag --skill openrag_dev_qa_handoff

# or point at one skill's directory directly (no --skill needed)
npx skills add https://github.com/langflow-ai/openrag/tree/main/plugins/openrag-dev/skills/qa-handoff
```

This is not part of the Claude Code plugin/marketplace system above — it's a separate, agent-agnostic CLI. It only sees what's pushed to the remote (or a local path given directly), not uncommitted local changes.

## Authoring new skills

When adding a skill:

1. Create `plugins/openrag/skills/<name>/SKILL.md` with frontmatter:
1. Create `plugins/<plugin>/skills/<name>/SKILL.md` (e.g. `plugins/openrag/skills/<name>/SKILL.md` for end-user facing skills, `plugins/openrag-dev/skills/<name>/SKILL.md` for contributor/QA workflow skills) with frontmatter:
```yaml
---
name: <name>
Expand All @@ -65,12 +98,12 @@ When adding a skill:
```
2. Add a symlink so Claude Code in this repo picks it up:
```
ln -s ../../plugins/openrag/skills/<name> .claude/skills/<name>
ln -s ../../plugins/<plugin>/skills/<name> .claude/skills/<name>
```
3. List it in `AGENTS.md` so non-Claude agents can find it.
4. Keep the body **agent-neutral**: no references to tools or features that only exist in one runtime (no `TodoWrite`, no specific slash-command assumptions, no hook-based automations). Describe actions in generic terms: read files, run commands, fetch URLs, ask the user.
5. Put Claude-Code-specific configuration (permissions, hooks) in `plugin.json` or `.claude/`, not in `SKILL.md`.

## Versioning

Bump `plugins/openrag/.claude-plugin/plugin.json`'s `version` field when the skill set changes materially. Marketplace users pin to specific versions.
Bump the relevant plugin's `.claude-plugin/plugin.json` `version` field (e.g. `plugins/openrag/.claude-plugin/plugin.json`, `plugins/openrag-dev/.claude-plugin/plugin.json`) when that plugin's skill set changes materially. Marketplace users pin to specific versions.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
6 changes: 6 additions & 0 deletions plugins/openrag-dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "openrag-dev",
"version": "0.1.0",
"description": "OpenRAG contributor/QA workflow skills: QA handoff generation, cross-branch backporting.",
"repository": "https://github.com/langflow-ai/openrag"
}
84 changes: 84 additions & 0 deletions plugins/openrag-dev/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# OpenRAG Dev Plugin

Internal developer/QA workflow skills for OpenRAG contributors. Unlike the `openrag` plugin (guided install, SDK integration — aimed at people using OpenRAG), this plugin is for people working *on* OpenRAG: it assumes access to the project's git history and, for full functionality, the GitHub CLI.

## Skills

| Skill | Purpose |
| --- | --- |
| `openrag_dev_qa_handoff` | Generate a QA handoff message for a release branch: per-commit fix summary, PR link, and test steps within a date range. See [`skills/qa-handoff/SKILL.md`](skills/qa-handoff/SKILL.md). |
| `openrag_dev_backport` | Backport commits/PRs from a source branch into a target branch (e.g. a release branch into main): one PR per commit, correctly ordered, conflicts resolved and verified. See [`skills/backport/SKILL.md`](skills/backport/SKILL.md). |

## Install

### Option 1: Clone this repo and use Claude Code (recommended for contributors)

No install step. `.claude/skills/qa-handoff` and `.claude/skills/backport` already symlink into their respective `plugins/openrag-dev/skills/` directories, so Claude Code auto-discovers both when you start a session in this repo. Invoke with `/qa-handoff` or `/backport`, or just ask — Claude triggers the right one automatically based on each skill's `description`.

### Option 2: Install globally via the Claude Code marketplace

```
/plugin marketplace add langflow-ai/openrag
/plugin install openrag-dev@openrag
```

Makes the skill available in any repo, not just this checkout — useful since a QA handoff only needs `git`/`gh` access to whichever repo's branch you're asking about.

### Option 3: Claude Agent SDK / other skill-aware runtimes

Point your skill loader at `plugins/openrag-dev/skills/`. Each subdirectory is one skill (`qa-handoff`, `backport`).

### Option 4: Any other agent (generic)

Read the relevant `SKILL.md` directly (`plugins/openrag-dev/skills/qa-handoff/SKILL.md` or `plugins/openrag-dev/skills/backport/SKILL.md`) — the frontmatter `description` says when to use it, the body is the instruction set.

### Option 5: `npx skills` CLI (any repo, any supported agent)

[`npx skills`](https://github.com/vercel-labs/skills) is a third-party, agent-agnostic package manager for `SKILL.md`-based skills (Claude Code, Cursor, OpenCode, Codex, and others). It scans a source for `SKILL.md` files and installs them into the target agent's skills directory.

```bash
# from a clone of this repo — --skill matches the SKILL.md frontmatter `name`, not the directory name
npx skills add . --skill openrag_dev_qa_handoff
npx skills add . --skill openrag_dev_backport

# once this repo/branch is pushed, from anywhere
npx skills add langflow-ai/openrag --skill openrag_dev_qa_handoff

# or point at the skill's directory directly (no --skill needed)
npx skills add https://github.com/langflow-ai/openrag/tree/main/plugins/openrag-dev/skills/qa-handoff
```

This only sees what's actually pushed to the remote (or a local path you point it at directly) — it doesn't read uncommitted or unpushed local changes unless you use the local-path form above.

## Use

### QA handoff

Ask your agent for a QA handoff, for example:

- "Generate a QA handoff for release-1.52"
- "QA handoff for main, last 3 days"
- "Prepare a release handoff for release-saas-ga-0.6.2 from July 10th"

If you don't give a date range, the skill asks how many days back to look and defaults to the **last 24 hours** if you don't answer.

Output always follows the standard layout in [`skills/qa-handoff/TEMPLATE.md`](skills/qa-handoff/TEMPLATE.md): a header (branch, date range, latest SHA, commit count) followed by one section per commit — a plain-English one-liner, what was fixed, the PR link, and "what to test" / "how to test" bullet lists grounded in the commit's diff and PR description.

### Backport

Ask your agent to backport a branch, for example:

- "Backport release-saas-ga-0.6.2 into main"
- "Which PRs are in release-1.52 but not main? Backport them."
- "Forward-port everything in this release branch that hasn't landed on main yet"

The skill lists commits present on the source branch but missing from the target, skips anything already applied under a different SHA, works out cross-commit ordering from file overlap, then opens one PR per commit against the target branch — conflicts are inspected and resolved (never guessed), and every resolution is verified with the relevant tests/typecheck before pushing. See [`skills/backport/SKILL.md`](skills/backport/SKILL.md) for the full procedure and [`skills/backport/TEMPLATE.md`](skills/backport/TEMPLATE.md) for the PR body layout it uses.

## Requirements

- `git`, with both branches fetchable
- `gh` CLI, authenticated (`gh auth status`) — required for `backport` (creating PRs); optional but recommended for `qa-handoff` (without it, PR links fall back to numbers parsed from commit messages and PR-body testing notes aren't available)

## Adding more skills to this plugin

Follow the same authoring steps as the rest of the repo's skills — see [`plugins/README.md`](../README.md#authoring-new-skills). Bump this plugin's `version` in [`.claude-plugin/plugin.json`](.claude-plugin/plugin.json) when the skill set changes materially.
Loading
Loading