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: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

---

Companion repo to [**`flykit-cc/flykit`**](https://github.com/flykit-cc/flykit), the open-source Claude Code plugin marketplace.
Companion repo to [**`flykit-cc/flykit`**](https://github.com/flykit-cc/flykit), the open-source registry of plugins and tools for coding agents.

## Thinking of contributing?

Expand Down
6 changes: 3 additions & 3 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ const inter = Inter({
});

export const metadata: Metadata = {
title: "flykit — Claude Code plugins for real-world workflows",
title: "flykit — plugins and tools for coding agents",
description:
"Open-source Claude Code plugins for real-world workflows. Install, run, contribute.",
"Open-source plugins and tools for coding agents. Claude Code, DeepSeek Harness, and more. Install, run, contribute.",
metadataBase: new URL("https://flykit.cc"),
alternates: { canonical: "/" },
};
Expand All @@ -28,7 +28,7 @@ const siteJsonLd = {
name: "flykit",
url: "https://flykit.cc",
description:
"Open-source Claude Code plugins for real-world workflows. Install, run, contribute.",
"Open-source plugins and tools for coding agents. Claude Code, DeepSeek Harness, and more. Install, run, contribute.",
};

export default async function RootLayout({
Expand Down
2 changes: 1 addition & 1 deletion app/llms-full.txt/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export async function GET() {
lines.push("# flykit");
lines.push("");
lines.push(
"> Open-source Claude Code plugins for real-world workflows. Install, run, contribute.",
"> Open-source plugins and tools for coding agents. Claude Code, DeepSeek Harness, and more.",
);
lines.push("");
lines.push(
Expand Down
4 changes: 2 additions & 2 deletions app/llms.txt/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ export async function GET() {
lines.push("# flykit");
lines.push("");
lines.push(
"> Open-source Claude Code plugins for real-world workflows. Install, run, contribute.",
"> Open-source plugins and tools for coding agents. Claude Code, DeepSeek Harness, and more.",
);
lines.push("");
lines.push(
"flykit is a community marketplace of plugins for Claude Code, Anthropic's official CLI.",
"flykit is a community registry of plugins and tools for coding agents, spanning Claude Code and DeepSeek Harness.",
);
lines.push(
"Each plugin adds skills, slash commands, subagents, or hooks that solve a concrete workflow —",
Expand Down
2 changes: 1 addition & 1 deletion app/opengraph-image.alt.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
flykit — Claude Code plugins for real-world workflows.
flykit — plugins and tools for coding agents.
18 changes: 9 additions & 9 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export default async function HomePage() {
>
{">"}
</span>
<span>Claude Code</span>
<span>Claude Code · DeepSeek Harness</span>
</p>
<h1
className="font-mono"
Expand All @@ -65,8 +65,8 @@ export default async function HomePage() {
</div>

<p className="max-w-xl font-sans text-base text-muted-foreground md:text-lg">
flykit is an open-source marketplace of Claude Code plugins for
real-world workflows. Install, run, contribute.
flykit is an open-source registry of plugins and tools for coding
agents. Install, run, contribute.
</p>

<div className="w-full max-w-xl">
Expand Down Expand Up @@ -166,7 +166,7 @@ export default async function HomePage() {
</h2>
</div>
<p className="mb-10 max-w-2xl font-sans text-base text-muted-foreground">
Standalone tools for Claude Code. Not plugins install via npm or brew.
Standalone tools that work alongside your agent. Not plugins, install via npm or brew.
</p>

<div className="grid gap-4 md:grid-cols-3">
Expand Down Expand Up @@ -248,7 +248,7 @@ export default async function HomePage() {
</p>
<div className="flex flex-wrap items-center gap-3">
<Badge variant="outline">MIT licensed</Badge>
<Badge variant="outline">Built for Claude Code</Badge>
<Badge variant="outline">Built for coding agents</Badge>
</div>
</div>
<div className="flex flex-wrap gap-3">
Expand Down Expand Up @@ -290,10 +290,10 @@ export default async function HomePage() {
<AccordionItem value="q1">
<AccordionTrigger>What is flykit?</AccordionTrigger>
<AccordionContent>
flykit is an open-source marketplace of Claude Code plugins
focused on real-world workflows — taxes, finance, ops. Each
plugin bundles slash commands, skills, and prompts you can
install with one command.
flykit is an open-source registry of plugins and tools for
coding agents — Claude Code plugins like flow and steuer,
DeepSeek Harness plugins like dsh-claude-live, plus standalone
companion tools. Claude Code plugins install with one command.
</AccordionContent>
</AccordionItem>
<AccordionItem value="q2">
Expand Down
3 changes: 2 additions & 1 deletion app/tools/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ChevronRight, Github } from "lucide-react";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent } from "@/components/ui/card";
import { CodeBlock } from "@/components/code-block";
import { getTool, getTools } from "@/lib/tools";
import { ecosystemLabel, getTool, getTools } from "@/lib/tools";

const BASE_URL = "https://flykit.cc";
const RAW_BASE = "https://raw.githubusercontent.com/flykit-cc/flykit/main";
Expand Down Expand Up @@ -121,6 +121,7 @@ export default async function ToolPage({
</Link>
<span className="text-muted-foreground" aria-hidden>·</span>
<div className="flex flex-wrap gap-2">
<Badge>{ecosystemLabel(tool.ecosystem)}</Badge>
{tool.web.categories.map((c) => (
<Badge key={c} variant="outline">{c}</Badge>
))}
Expand Down
2 changes: 1 addition & 1 deletion app/twitter-image.alt.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
flykit — Claude Code plugins for real-world workflows.
flykit — plugins and tools for coding agents.
2 changes: 1 addition & 1 deletion components/site-footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export function SiteFooter() {
flykit
</div>
<p className="font-sans text-sm text-muted-foreground max-w-xs">
Open-source Claude Code plugins for real-world workflows.
Open-source plugins and tools for coding agents.
</p>
</div>

Expand Down
3 changes: 2 additions & 1 deletion components/tool-card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Github } from "lucide-react";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardDescription, CardTitle } from "@/components/ui/card";
import { CodeBlock } from "@/components/code-block";
import type { FullTool } from "@/lib/tools";
import { ecosystemLabel, type FullTool } from "@/lib/tools";

export function ToolCard({ tool }: { tool: FullTool }) {
return (
Expand All @@ -25,6 +25,7 @@ export function ToolCard({ tool }: { tool: FullTool }) {
<CardDescription className="line-clamp-3">{tool.web.tagline}</CardDescription>

<div className="flex flex-wrap gap-2">
<Badge>{ecosystemLabel(tool.ecosystem)}</Badge>
{tool.web.categories.slice(0, 3).map((c) => (
<Badge key={c} variant="outline">{c}</Badge>
))}
Expand Down
24 changes: 23 additions & 1 deletion lib/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,20 @@ import fallback from "./tools-fallback.json";
const REPO = "flykit-cc/flykit";
const BASE_RAW = `https://raw.githubusercontent.com/${REPO}/main`;

export type Ecosystem = "claude-code" | "dsh";

export const ECOSYSTEM_LABELS: Record<Ecosystem, string> = {
"claude-code": "Claude Code",
dsh: "DeepSeek Harness",
};

export function ecosystemLabel(e: Ecosystem | undefined): string {
return ECOSYSTEM_LABELS[e ?? "claude-code"] ?? "Claude Code";
}

export type Tool = {
name: string;
ecosystem?: Ecosystem;
slug: string;
description: string;
repo: string;
Expand Down Expand Up @@ -57,7 +69,17 @@ export async function getTools(): Promise<FullTool[]> {
tools.map(async (t) => {
const webPath = t.web.replace(/^\.\//, "");
const web = await fetchJSON<ToolWeb>(`${BASE_RAW}/${webPath}`);
return { ...t, web: web ?? fb.webByTool[t.slug] };
const resolved = web ?? fb.webByTool[t.slug];
// web.json omits optional list fields; default them so consumers can just read .length
return {
...t,
web: resolved && {
...resolved,
features: resolved.features ?? [],
useCases: resolved.useCases ?? [],
screenshots: resolved.screenshots ?? [],
},
};
})
);

Expand Down
Loading