Skip to content
Merged
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
2 changes: 2 additions & 0 deletions .github/workflows/notify-web.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ on:
paths:
- '.claude-plugin/**'
- 'plugins/**'
- 'tools.json'
- 'tools/**'
workflow_dispatch:

jobs:
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/pr-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,30 @@ jobs:
exit 1
fi

- name: Validate tools.json registry
run: |
set -e
jq empty tools.json
fail=0
while IFS= read -r row; do
slug=$(echo "$row" | jq -r '.slug')
eco=$(echo "$row" | jq -r '.ecosystem // empty')
web=$(echo "$row" | jq -r '.web // empty')
if [ -z "$eco" ]; then
echo "::error file=tools.json::entry '$slug' is missing an 'ecosystem' field. See CONTRIBUTING.md."
fail=$((fail+1))
fi
path="${web#./}"
if [ -z "$web" ] || [ ! -f "$path" ]; then
echo "::error file=tools.json::entry '$slug' points at missing web.json '$web'"
fail=$((fail+1))
else
jq empty "$path"
echo "ok: $slug ($eco) -> $path"
fi
done < <(jq -c '.tools[]' tools.json)
if [ "$fail" -gt 0 ]; then exit 1; fi

- name: Plugin versions are consistent and bumped
env:
# On a PR, compare against the merge base. On a push to main, compare
Expand Down
34 changes: 34 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,40 @@

Thanks for your interest in flykit! This guide covers how to add a new plugin, work on an existing one, develop locally, and submit changes.

## Two manifests, two audiences

flykit lists things for more than one ecosystem, and they are listed in different files:

| You are adding | Goes in | Lives in |
|---|---|---|
| A Claude Code **marketplace plugin** | `.claude-plugin/marketplace.json` | `plugins/<name>/` in this repo |
| A Claude Code **standalone tool**, or a plugin for **another ecosystem** (e.g. DeepSeek Harness) | `tools.json` | its own repo, referenced by URL |

`.claude-plugin/marketplace.json` is read by Claude Code itself. It only understands Claude Code plugins — **never put a non-Claude-Code entry in it**, even one that happens to be about Claude Code. Everything else goes in `tools.json`.

### Adding a `tools.json` entry

Add an object under `tools`:

```json
{
"name": "your-thing",
"slug": "your-thing",
"ecosystem": "dsh",
"description": "One line.",
"repo": "https://github.com/flykit-cc/your-thing",
"npm": "your-thing",
"install": "dsh plugin --profile web add your-thing",
"category": "agents",
"keywords": ["..."],
"license": "MIT",
"version": "0.1.0",
"web": "./tools/your-thing/web.json"
}
```

`ecosystem` is required — `claude-code` or `dsh` today; add a new value when a new ecosystem shows up. Then create `tools/<slug>/web.json` with the same shape used by plugins (see `tools/ghostcode/web.json`), plus `install` and `externalRepo`. `version` here is display metadata only — the source of truth is the tool's own repo, so keep it roughly in sync, no CI enforces it.

## Plugin contents

A Claude Code plugin can bundle any mix of the following. flykit plugins typically lead with skills, but the other types are fair game.
Expand Down
39 changes: 31 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

# flykit

**Open-source [Claude Code](https://docs.claude.com/en/docs/claude-code) plugins for real-world workflows.**
**Open-source plugins and tools for AI coding agents — [Claude Code](https://docs.claude.com/en/docs/claude-code) and [DeepSeek Harness](https://github.com/deepseek-ai).**

[![MIT License](https://img.shields.io/github/license/flykit-cc/flykit?style=flat-square&labelColor=111&color=000)](./LICENSE)
[![Claude Code](https://img.shields.io/badge/Claude_Code-plugin_marketplace-000?style=flat-square&labelColor=111)](https://docs.claude.com/en/docs/claude-code/plugins)
Expand All @@ -14,16 +14,23 @@
<br/>

<a href="https://flykit.cc">
<img src="https://flykit.cc/opengraph-image.png" alt="flykit — Claude Code plugins for real-world workflows" width="720" />
<img src="https://flykit.cc/opengraph-image.png" alt="flykit — plugins and tools for AI coding agents" width="720" />
</a>

</div>

---

A marketplace of small, focused plugins that turn Claude Code into a useful assistant for the things you actually dotaxes, paperwork, recurring chores. Each plugin is self-contained: skills, scripts, reference docs, MIT-licensed.
A collection of small, focused plugins and tools for AI coding agents — the things you actually do: taxes, paperwork, dev workflow, recurring chores. Everything here is self-contained and MIT-licensed.

## Install
flykit spans two ecosystems today:

| Ecosystem | What lives here | How it is listed |
|---|---|---|
| **Claude Code** | Plugins installed through the flykit marketplace, plus standalone companion tools | [`.claude-plugin/marketplace.json`](./.claude-plugin/marketplace.json) (plugins), [`tools.json`](./tools.json) (tools) |
| **DeepSeek Harness (dsh)** | Harness plugins, each in its own repo | [`tools.json`](./tools.json) |

## Claude Code plugins

In Claude Code, add the marketplace:

Expand All @@ -37,17 +44,33 @@ Then install any plugin from it:
/plugin install steuer@flykit
```

## Plugins

| Plugin | What it does |
|---|---|
| [**flow**](./plugins/flow) | A stack-agnostic dev workflow — session lifecycle (`continue` / `status` / `pause`), parallel deep reviews, and an autonomous autopilot loop. Reads your stack from a per-repo `.flow/config.md`. |
| [**steuer**](./plugins/steuer) | German freelancer tax filing — fetch transactions from Wise, classify with Claude, calculate the EÜR, walk through ELSTER. |
| _more coming_ | Got a workflow worth automating? Open an issue or see [CONTRIBUTING.md](./CONTRIBUTING.md). |

## Claude Code tools

Standalone — not marketplace plugins, installed on their own.

| Tool | What it does |
|---|---|
| [**ghostcode**](https://github.com/flykit-cc/ghostcode) | Ghostty launcher for Claude Code — project picker, per-project tints, model/provider/mode switcher. |

## DeepSeek Harness plugins

| Plugin | What it does |
|---|---|
| [**dsh-claude-live**](https://github.com/flykit-cc/dsh-claude-live) | Run Claude Code as a subagent inside DeepSeek Harness, with its steps streaming live into the session view. `dsh plugin --profile web add dsh-claude-live` |

Got something worth adding? Open an issue or see [CONTRIBUTING.md](./CONTRIBUTING.md).

## How it works

flykit is a standard Claude Code [plugin marketplace](https://docs.claude.com/en/docs/claude-code/plugins). Each plugin is a directory under [`plugins/`](./plugins) containing its manifest, skills, scripts, and references.
Two manifests, deliberately separate:

- [`.claude-plugin/marketplace.json`](./.claude-plugin/marketplace.json) is the **Claude Code marketplace contract**. Claude Code reads it directly and only understands Claude Code plugins, so nothing from another ecosystem ever goes in it. Each plugin is a directory under [`plugins/`](./plugins) containing its manifest, skills, scripts, and references.
- [`tools.json`](./tools.json) is the **ecosystem-neutral registry** for everything that is not a marketplace plugin: standalone Claude Code tools and dsh plugins alike. Each entry carries an `ecosystem` field (`claude-code` or `dsh`), lives in its own repo, and points at a `web.json` sidecar under [`tools/`](./tools).

Each plugin also has a [`web.json`](./plugins/steuer/web.json) sidecar — that's what [flykit.cc](https://flykit.cc) renders (tagline, features, skills, sources). The site fetches `marketplace.json` + each `web.json` + live star count at build time.

Expand Down
36 changes: 31 additions & 5 deletions tools.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
{
"$schema": "https://flykit.cc/schemas/tools.json",
"name": "flykit-tools",
"description": "Companion tools for Claude Code",
"owner": { "name": "kaiomp" },
"name": "flykit-registry",
"description": "Tools and plugins across ecosystems — Claude Code companions, DeepSeek Harness plugins",
"owner": {
"name": "kaiomp"
},
"tools": [
{
"name": "ghostcode",
Expand All @@ -12,10 +14,34 @@
"npm": "@flykit/ghostcode",
"install": "git clone https://github.com/flykit-cc/ghostcode && npm install -g ./ghostcode",
"category": "workflow",
"keywords": ["ghostty", "launcher", "picker"],
"keywords": [
"ghostty",
"launcher",
"picker"
],
"license": "MIT",
"version": "0.2.0",
"web": "./tools/ghostcode/web.json"
"web": "./tools/ghostcode/web.json",
"ecosystem": "claude-code"
},
{
"name": "dsh-claude-live",
"slug": "dsh-claude-live",
"ecosystem": "dsh",
"description": "Run Claude Code as a subagent inside DeepSeek Harness, with its steps streaming live into the session view.",
"repo": "https://github.com/flykit-cc/dsh-claude-live",
"npm": "dsh-claude-live",
"install": "dsh plugin --profile web add dsh-claude-live",
"category": "agents",
"keywords": [
"deepseek-harness",
"cordis",
"claude-code",
"subagent"
],
"license": "MIT",
"version": "0.1.1",
"web": "./tools/dsh-claude-live/web.json"
}
]
}
22 changes: 22 additions & 0 deletions tools/dsh-claude-live/web.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"displayName": "dsh-claude-live",
"author": "kaiomp",
"authorUrl": "https://github.com/kaiomp",
"categories": ["DeepSeek Harness", "Agents", "Claude Code"],
"tagline": "Run Claude Code as a subagent inside DeepSeek Harness, with its steps streaming live into the session view.",
"description": "A DeepSeek Harness plugin that dispatches Claude Code headless as a subagent and pushes a throttled digest of its steps into the session UI while the run is still in flight. Uses the tool/code-dispatch event pair the released harness already understands, so sessions stay replayable in the web viewer.",
"install": "dsh plugin --profile web add dsh-claude-live",
"externalRepo": "https://github.com/flykit-cc/dsh-claude-live",
"features": [
"Live digest rows while the child runs — pushed, not polled",
"One tool (claude_live), one child process, no registry or role library",
"Works on the released harness (0.1.1-rc.2+) — no unreleased core needed",
"Permission modes: readonly (plan), full, or Claude's own configuration",
"Hard timeout with process-group SIGTERM/SIGKILL; cancellation kills the child"
],
"useCases": [
"DeepSeek plans and orchestrates while Claude Code executes chunks, both visible in one session",
"Long refactors you want to watch instead of poll",
"Harness users who need replayable sessions in the web UI"
]
}
Loading