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
16 changes: 10 additions & 6 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,32 +24,36 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
package_json_file: website/package.json

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: website/package-lock.json
cache: pnpm
cache-dependency-path: website/pnpm-lock.yaml

- name: Install dependencies
working-directory: website
run: npm ci
run: pnpm install --frozen-lockfile

- name: Build
working-directory: website
run: npm run build
run: pnpm run build

- name: Deploy preview
if: github.event_name == 'push'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy website/build --project-name=harness-kit-docs --branch=preview
command: pages deploy website/out --project-name=harness-kit-docs --branch=preview

- name: Deploy production
if: github.event_name == 'release'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy website/build --project-name=harness-kit-docs --branch=main
command: pages deploy website/out --project-name=harness-kit-docs --branch=main
12 changes: 8 additions & 4 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,20 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
package_json_file: website/package.json

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: website/package-lock.json
cache: pnpm
cache-dependency-path: website/pnpm-lock.yaml

- name: Install dependencies
working-directory: website
run: npm ci
run: pnpm install --frozen-lockfile

- name: Build docs
working-directory: website
run: npm run build
run: pnpm run build
2 changes: 1 addition & 1 deletion FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@ See [Where harness-kit fits](https://harnesskit.ai/docs/concepts/comparison) for

## What is the Harness Protocol?

The [Harness Protocol](https://harnessprotocol.ai) is an open specification for portable AI coding harness configuration. It defines a vendor-neutral `harness.yaml` format validated by JSON Schema. harness-kit is the reference implementation, the same way Claude Desktop implements MCP. Any tool that correctly validates and applies `harness.yaml` per the spec is a conformant implementation; harness-kit is not required.
The [Harness Protocol](https://harnessprotocol.io) is an open specification for portable AI coding harness configuration. It defines a vendor-neutral `harness.yaml` format validated by JSON Schema. harness-kit is the reference implementation, the same way Claude Desktop implements MCP. Any tool that correctly validates and applies `harness.yaml` per the spec is a conformant implementation; harness-kit is not required.

The spec is Apache 2.0. See [Harness Protocol](https://harnesskit.ai/docs/concepts/harness-protocol) for how it relates to harness-kit.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Capture your installed plugins into a `harness.yaml` file, commit it to your dot

The import wizard shows each plugin with its description and lets you pick a subset — your config is a starting point, not a mandate.

`harness.yaml` follows the [Harness Protocol v1](https://harnessprotocol.ai) open spec — a vendor-neutral format for portable AI coding harnesses that can declare plugins, MCP servers, environment variables, and instructions in one shareable file.
`harness.yaml` follows the [Harness Protocol v1](https://harnessprotocol.io) open spec — a vendor-neutral format for portable AI coding harnesses that can declare plugins, MCP servers, environment variables, and instructions in one shareable file.

**Shell fallback (no Claude Code required):**

Expand Down
4 changes: 2 additions & 2 deletions plugins/harness-share/skills/harness-export/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ disable-model-invocation: true

You are helping the user capture their current harness-kit setup into a `harness.yaml` file they can share with teammates or commit to their dotfiles repo.

This file follows the **Harness Protocol v1 format** — the open spec at harnessprotocol.ai. It is backward-compatible with harness-import (which handles both old and new formats).
This file follows the **Harness Protocol v1 format** — the open spec at harnessprotocol.io. It is backward-compatible with harness-import (which handles both old and new formats).

## Workflow Order (MANDATORY)

Expand Down Expand Up @@ -72,7 +72,7 @@ For any installed skill **not in this table**, ask the user:
Write `harness.yaml` to the current directory (or a path the user specifies). Use the **Harness Protocol v1 format**:

```yaml
$schema: https://harnessprotocol.ai/schema/v1/harness.schema.json
$schema: https://harnessprotocol.io/schema/v1/harness.schema.json
version: "1"

# Profile identity (optional but recommended)
Expand Down
6 changes: 3 additions & 3 deletions website/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
node_modules/
build/
.docusaurus/
.cache-loader/
.next/
.source/
out/
46 changes: 46 additions & 0 deletions website/app/docs/[[...slug]]/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { source } from '@/lib/source';
import {
DocsPage,
DocsBody,
DocsDescription,
DocsTitle,
} from 'fumadocs-ui/page';
import { notFound } from 'next/navigation';
import defaultMdxComponents from 'fumadocs-ui/mdx';

export default async function Page(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();

const MDX = page.data.body;

return (
<DocsPage toc={page.data.toc}>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<DocsBody>
<MDX components={{ ...defaultMdxComponents }} />
</DocsBody>
</DocsPage>
);
}

export function generateStaticParams() {
return source.generateParams();
}

export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();

return {
title: page.data.title,
description: page.data.description,
};
}
57 changes: 57 additions & 0 deletions website/app/docs/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { DocsLayout } from 'fumadocs-ui/layouts/docs';
import type { ReactNode } from 'react';
import { source } from '@/lib/source';

export default function Layout({ children }: { children: ReactNode }) {
return (
<DocsLayout
tree={source.pageTree}
nav={{
title: (
<span className="flex items-center gap-2 font-bold">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 32 32"
className="size-6"
>
<rect width="32" height="32" rx="6" fill="#0d0d12" />
<text
x="16"
y="22"
textAnchor="middle"
fontFamily="system-ui, sans-serif"
fontWeight="700"
fontSize="16"
fill="#8b7aff"
>
hk
</text>
</svg>
Harness Kit
</span>
),
}}
links={[
{
type: 'icon',
text: 'GitHub',
label: 'GitHub',
icon: (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="currentColor"
className="size-5"
>
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
</svg>
),
url: 'https://github.com/harnessprotocol/harness-kit',
external: true,
},
]}
>
{children}
</DocsLayout>
);
}
40 changes: 40 additions & 0 deletions website/app/global.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
@import 'tailwindcss';
@import 'fumadocs-ui/style.css';

:root {
--color-fd-primary: 256 80% 58%;
--color-fd-primary-foreground: 0 0% 100%;
--color-fd-background: 0 0% 100%;
--color-fd-foreground: 240 10% 10%;
--color-fd-card: 240 5% 96%;
--color-fd-card-foreground: 240 10% 10%;
--color-fd-muted: 240 5% 92%;
--color-fd-muted-foreground: 240 4% 46%;
--color-fd-border: 240 6% 90%;
--color-fd-accent: 256 60% 95%;
--color-fd-accent-foreground: 256 80% 44%;
--color-fd-popover: 0 0% 100%;
--color-fd-popover-foreground: 240 10% 10%;
--color-fd-secondary: 240 5% 94%;
--color-fd-secondary-foreground: 240 10% 10%;
--color-fd-ring: 256 80% 58%;
}

.dark {
--color-fd-primary: 256 80% 72%;
--color-fd-primary-foreground: 0 0% 100%;
--color-fd-background: 240 10% 4%;
--color-fd-foreground: 0 0% 93%;
--color-fd-card: 240 6% 8%;
--color-fd-card-foreground: 0 0% 93%;
--color-fd-muted: 240 4% 14%;
--color-fd-muted-foreground: 240 4% 58%;
--color-fd-border: 240 4% 16%;
--color-fd-accent: 256 30% 14%;
--color-fd-accent-foreground: 256 60% 80%;
--color-fd-popover: 240 6% 6%;
--color-fd-popover-foreground: 0 0% 93%;
--color-fd-secondary: 240 4% 12%;
--color-fd-secondary-foreground: 0 0% 93%;
--color-fd-ring: 256 80% 72%;
}
4 changes: 4 additions & 0 deletions website/app/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions website/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import './global.css';
import { RootProvider } from 'fumadocs-ui/provider';
import type { ReactNode } from 'react';

export const metadata = {
title: {
template: '%s | Harness Kit',
default: 'Harness Kit',
},
description: 'A harness-agnostic framework for AI coding tools.',
};

export default function Layout({ children }: { children: ReactNode }) {
return (
<html lang="en" suppressHydrationWarning>
<body
style={{
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif',
}}
>
<RootProvider
theme={{
defaultTheme: 'dark',
attribute: 'class',
}}
>
{children}
</RootProvider>
</body>
</html>
);
}
Loading
Loading