Merge branch 'quickstart-npx-clarity' into main

* quickstart-npx-clarity:
  Style pass: flush-edge navbar, theme-aware footer, cleaner sidebar
  Address docs UX review fixes
  Refresh docs brand styling
  Fix canary Pages defaults for branch pushes
  Trigger Pages canary from branch pushes
  Add GitHub Pages canary deploy
  Add service run commands for docs site
  Restyle docs site: dark theme, square corners, green accents
  Convert docs site to Docusaurus
  Clarify npx vs pnpm usage in quickstart docs
This commit is contained in:
Dotta committed 2026-04-21 13:54:45 -05:00
commit 21514adf40
26 files changed
+23074 -253

No files matched your search

+73
View File
@@ -0,0 +1,73 @@
name: Deploy canary to GitHub Pages
run-name: Deploy canary from ${{ github.ref_name }}
on:
push:
branches:
- quickstart-npx-clarity
workflow_dispatch:
inputs:
site_url:
description: GitHub Pages origin for this repository
required: true
default: https://paperclipai.github.io
base_url:
description: Docusaurus base path for this repository Pages site
required: true
default: /docs/
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages-canary
cancel-in-progress: false
jobs:
build:
name: Build Docusaurus
runs-on: ubuntu-latest
steps:
- name: Checkout branch
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
- name: Typecheck
run: npm run typecheck
- name: Build site
run: npm run build
env:
DOCUSAURUS_URL: ${{ inputs.site_url || 'https://paperclipai.github.io' }}
DOCUSAURUS_BASE_URL: ${{ inputs.base_url || '/docs/' }}
- name: Configure Pages
uses: actions/configure-pages@v5
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: build
deploy:
name: Deploy to GitHub Pages
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
+4
View File
@@ -0,0 +1,4 @@
node_modules
.docusaurus
build
.DS_Store
-7
View File
@@ -1,7 +0,0 @@
# Mintlify automatically ignores these files and directories:
# .git, .github, .claude, .agents, .idea, node_modules,
# README.md, LICENSE.md, CHANGELOG.md, CONTRIBUTING.md
# Draft content
drafts/
*.draft.mdx
+15 -19
View File
@@ -1,33 +1,29 @@
> **First-time setup**: Customize this file for your project. Prompt the user to customize this file for their project.
> For Mintlify product knowledge (components, configuration, writing standards),
> install the Mintlify skill: `npx skills add https://mintlify.com/docs`
# Documentation project instructions
## About this project
- This is a documentation site built on [Mintlify](https://mintlify.com)
- Pages are MDX files with YAML frontmatter
- Configuration lives in `docs.json`
- Run `mint dev` to preview locally
- Run `mint broken-links` to check links
- This is a documentation site built on Docusaurus
- Documentation content lives in root-level markdown and MDX files under folders like `start/`, `guides/`, `deploy/`, `adapters/`, `api/`, and `cli/`
- Site configuration lives in `docusaurus.config.ts` and `sidebars.ts`
- Run `npm run start` to preview locally
- Run `npm run build` to verify the production build
## Terminology
{/* Add product-specific terms and preferred usage */}
{/* Example: Use "workspace" not "project", "member" not "user" */}
- Use "company" for the top-level Paperclip organization
- Use "agent" for AI employees inside a company
- Use "issue" or "task" only when the product/UI actually uses that term
- Use "board" for the human oversight layer
## Style preferences
{/* Add any project-specific style rules below */}
- Use active voice and second person ("you")
- Keep sentences concise — one idea per sentence
- Use active voice and second person
- Keep sentences concise
- Use sentence case for headings
- Bold for UI elements: Click **Settings**
- Code formatting for file names, commands, paths, and code references
- Bold UI labels such as **Settings**
- Use code formatting for paths, commands, file names, env vars, and identifiers
## Content boundaries
{/* Define what should and shouldn't be documented */}
{/* Example: Don't document internal admin features */}
- Document user-facing and operator-facing product behavior
- Avoid documenting internal-only implementation details unless the page is explicitly a spec or reference page
+32 -38
View File
@@ -1,55 +1,49 @@
# Mintlify Starter Kit
# Paperclip Documentation
Use the starter kit to get your docs deployed and ready to customize.
This repo now runs on Docusaurus and contains the public documentation site for Paperclip.
Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
- Guide pages
- Navigation
- Customizations
- API reference pages
- Use of popular components
**[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
## AI-assisted writing
Set up your AI coding tool to work with Mintlify:
## Commands
```bash
npx skills add https://mintlify.com/docs
npm install
npm run start
```
This command installs Mintlify's documentation skill for your configured AI tools like Claude Code, Cursor, Windsurf, and others. The skill includes component reference, writing standards, and workflow guidance.
See the [AI tools guides](/ai-tools) for tool-specific setup.
## Development
Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
```
npm i -g mint
```bash
npm run build
npm run typecheck
```
Run the following command at the root of your documentation, where your `docs.json` is located:
## Run as a service
```
mint dev
Use these commands when you want the docs site to run as a long-lived process:
```bash
# Development preview service
npm run start:service
```
View your local preview at `http://localhost:3000`.
```bash
# Production-style service
npm run service
```
## Publishing changes
Both service commands bind to `0.0.0.0` and default to port `3000`. Set `HOST` or `PORT` to override them:
Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
```bash
PORT=4300 npm run service
```
## Need help?
Use `npm run build` before `npm run serve:service` if you want to split the build and run steps across separate deploy phases.
### Troubleshooting
## Structure
- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
- If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
- `start/`, `guides/`, `deploy/`, `adapters/`, `api/`, `cli/`, `specs/`: documentation content
- `docusaurus.config.ts`: site configuration
- `sidebars.ts`: sidebar structure
- `src/`: theme overrides and custom UI
- `static/`: copied brand assets served by Docusaurus
### Resources
- [Mintlify documentation](https://mintlify.com/docs)
## Editing docs
Keep existing doc URLs stable when possible. Prefer editing the current markdown files in place instead of creating duplicate copies under a second content tree.
-141
View File
@@ -1,141 +0,0 @@
{
"$schema": "https://mintlify.com/docs.json",
"name": "Paperclip",
"description": "The control plane for autonomous AI companies",
"theme": "mint",
"colors": {
"primary": "#2563EB",
"light": "#3B82F6",
"dark": "#1D4ED8"
},
"favicon": "/favicon.svg",
"logo": {
"light": "/logo/light.svg",
"dark": "/logo/dark.svg"
},
"topbarLinks": [
{
"name": "GitHub",
"url": "https://github.com/paperclip-ai/paperclip"
}
],
"navigation": {
"tabs": [
{
"tab": "Get Started",
"groups": [
{
"group": "Introduction",
"pages": [
"start/what-is-paperclip",
"start/quickstart",
"start/core-concepts",
"start/architecture"
]
}
]
},
{
"tab": "Guides",
"groups": [
{
"group": "Board Operator",
"pages": [
"guides/board-operator/dashboard",
"guides/board-operator/creating-a-company",
"guides/board-operator/managing-agents",
"guides/board-operator/org-structure",
"guides/board-operator/managing-tasks",
"guides/board-operator/approvals",
"guides/board-operator/costs-and-budgets",
"guides/board-operator/activity-log"
]
},
{
"group": "Agent Developer",
"pages": [
"guides/agent-developer/how-agents-work",
"guides/agent-developer/heartbeat-protocol",
"guides/agent-developer/writing-a-skill",
"guides/agent-developer/task-workflow",
"guides/agent-developer/comments-and-communication",
"guides/agent-developer/handling-approvals",
"guides/agent-developer/cost-reporting"
]
}
]
},
{
"tab": "Deploy",
"groups": [
{
"group": "Deployment",
"pages": [
"deploy/overview",
"deploy/local-development",
"deploy/docker",
"deploy/deployment-modes",
"deploy/database",
"deploy/secrets",
"deploy/storage",
"deploy/environment-variables"
]
}
]
},
{
"tab": "Adapters",
"groups": [
{
"group": "Agent Adapters",
"pages": [
"adapters/overview",
"adapters/claude-local",
"adapters/codex-local",
"adapters/process",
"adapters/http",
"adapters/creating-an-adapter"
]
}
]
},
{
"tab": "API Reference",
"groups": [
{
"group": "REST API",
"pages": [
"api/overview",
"api/authentication",
"api/companies",
"api/agents",
"api/issues",
"api/approvals",
"api/goals-and-projects",
"api/costs",
"api/secrets",
"api/activity",
"api/dashboard"
]
}
]
},
{
"tab": "CLI",
"groups": [
{
"group": "CLI Reference",
"pages": [
"cli/overview",
"cli/setup-commands",
"cli/control-plane-commands"
]
}
]
}
]
},
"footerSocials": {
"github": "https://github.com/paperclip-ai/paperclip"
}
}
+165
View File
@@ -0,0 +1,165 @@
import {themes as prismThemes} from 'prism-react-renderer';
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
const config: Config = {
title: 'Paperclip',
tagline: 'The control plane for autonomous AI companies',
favicon: 'favicon.svg',
future: {
v4: true,
},
url: process.env.DOCUSAURUS_URL ?? 'https://docs.paperclip.ing',
baseUrl: process.env.DOCUSAURUS_BASE_URL ?? '/',
organizationName: 'paperclipai',
projectName: 'docs',
onBrokenLinks: 'warn',
markdown: {
mermaid: true,
hooks: {
onBrokenMarkdownLinks: 'warn',
},
},
staticDirectories: ['static'],
i18n: {
defaultLocale: 'en',
locales: ['en'],
},
themes: [
'@docusaurus/theme-mermaid',
[
require.resolve('@easyops-cn/docusaurus-search-local'),
{
hashed: true,
language: ['en'],
indexBlog: false,
docsDir: ['.'],
docsRouteBasePath: '/',
highlightSearchTermsOnTargetPage: true,
},
],
],
presets: [
[
'classic',
{
docs: {
path: '.',
routeBasePath: '/',
sidebarPath: './sidebars.ts',
include: [
'home.mdx',
'agents-runtime.md',
'start/**/*.{md,mdx}',
'guides/**/*.{md,mdx}',
'deploy/**/*.{md,mdx}',
'adapters/**/*.{md,mdx}',
'api/**/*.{md,mdx}',
'cli/**/*.{md,mdx}',
'specs/**/*.{md,mdx}',
],
editUrl: 'https://github.com/paperclipai/docs/edit/main/',
},
blog: false,
pages: false,
theme: {
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
image: 'images/hero-light.png',
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: true,
},
docs: {
sidebar: {
hideable: true,
autoCollapseCategories: true,
},
},
navbar: {
title: 'Paperclip',
logo: {
alt: 'Paperclip',
src: 'logo/light.svg',
srcDark: 'logo/dark.svg',
},
items: [
{
type: 'docSidebar',
sidebarId: 'docs',
position: 'left',
label: 'Docs',
},
{
to: '/start/quickstart',
position: 'left',
label: 'Quickstart',
},
{
to: '/api/overview',
position: 'left',
label: 'API',
},
{
href: 'https://github.com/paperclipai/docs',
label: 'GitHub',
position: 'right',
},
],
},
footer: {
links: [
{
title: 'Start here',
items: [
{label: 'Overview', to: '/'},
{label: 'What is Paperclip?', to: '/start/what-is-paperclip'},
{label: 'Quickstart', to: '/start/quickstart'},
],
},
{
title: 'Core docs',
items: [
{label: 'Guides', to: '/guides/board-operator/creating-a-company'},
{label: 'Deploy', to: '/deploy/overview'},
{label: 'Adapters', to: '/adapters/overview'},
],
},
{
title: 'More',
items: [
{label: 'API reference', to: '/api/overview'},
{label: 'CLI', to: '/cli/overview'},
{label: 'GitHub', href: 'https://github.com/paperclipai/docs'},
],
},
],
copyright: `Paperclip documentation · ${new Date().getFullYear()}`,
},
prism: {
theme: prismThemes.dracula,
darkTheme: prismThemes.dracula,
additionalLanguages: ['bash', 'json', 'yaml', 'toml'],
},
mermaid: {
theme: {light: 'neutral', dark: 'dark'},
},
} satisfies Preset.ThemeConfig,
};
export default config;
+5 -3
View File
@@ -1,4 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
<rect width="32" height="32" rx="6" fill="#2563EB"/>
<path d="M10 8h6a6 6 0 0 1 0 12h-2v4h-4V8zm4 8h2a2 2 0 0 0 0-4h-2v4z" fill="white"/>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<rect width="32" height="32" rx="6" fill="#1a1a1a"/>
<g transform="translate(4 4)">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#f0f0f0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 411 B

+41
View File
@@ -0,0 +1,41 @@
---
title: Paperclip Documentation
sidebar_label: Overview
slug: /
hide_title: true
hide_table_of_contents: true
---
import LandingHero from '@site/src/components/LandingHero';
<LandingHero />
## Navigate the docs
<CardGroup>
<Card title="Get started" href="/start/quickstart">
Install Paperclip, understand the model, and get your first company running.
</Card>
<Card title="Guides" href="/guides/board-operator/creating-a-company">
Board operator and agent developer workflows for day-to-day operation.
</Card>
<Card title="Deploy" href="/deploy/overview">
Local development, Docker, secrets, storage, and production-facing setup.
</Card>
<Card title="Adapters" href="/adapters/overview">
Connect Claude Code, Codex, process workers, or HTTP-based agents.
</Card>
<Card title="API reference" href="/api/overview">
Companies, agents, issues, approvals, projects, costs, secrets, and activity.
</Card>
<Card title="CLI" href="/cli/overview">
Setup, diagnostics, and control-plane command reference.
</Card>
</CardGroup>
## Suggested path
1. Start with [What is Paperclip?](/start/what-is-paperclip).
2. Run the [Quickstart](/start/quickstart).
3. Read [Core concepts](/start/core-concepts) before changing org structure or automation.
4. Move into [Guides](/guides/board-operator/creating-a-company) and [Adapters](/adapters/overview) based on your role.
+2 -20
View File
@@ -1,21 +1,3 @@
<svg width="177" height="24" viewBox="0 0 177 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.06145 23.1079C5.26816 22.3769 -3.39077 20.6274 1.4173 5.06384C9.6344 6.09939 16.9728 14.0644 9.06145 23.1079Z" fill="url(#paint0_linear_17557_2145)"/>
<path d="M8.91928 23.0939C5.27642 21.2223 0.78371 4.20891 17.0071 0C20.7569 7.19341 19.6212 16.5452 8.91928 23.0939Z" fill="url(#paint1_linear_17557_2145)"/>
<path d="M8.91388 23.0788C8.73534 19.8817 10.1585 9.08525 23.5699 13.1107C23.1812 20.1229 18.984 26.4182 8.91388 23.0788Z" fill="url(#paint2_linear_17557_2145)"/>
<path d="M32.3008 19.3922V3.89432H37.9383L39.925 9.94786C40.0359 10.3154 40.1642 10.7869 40.3098 11.3624C40.4624 11.938 40.6114 12.5516 40.7571 13.2035C40.9096 13.8553 41.0483 14.4828 41.1731 15.0861C41.3049 15.6824 41.4123 16.1921 41.4955 16.6151H40.6946C40.7709 16.1921 40.8715 15.6824 40.9963 15.0861C41.128 14.4897 41.2667 13.8657 41.4123 13.2139C41.5649 12.562 41.714 11.9484 41.8596 11.3728C42.0052 10.7904 42.1335 10.3154 42.2444 9.94786L44.1999 3.89432H49.8478V19.3922H46.1657V12.7042C46.1657 12.3575 46.1726 11.9172 46.1865 11.3832C46.2004 10.8493 46.2143 10.2703 46.2281 9.64623C46.2489 9.02215 46.2663 8.39114 46.2801 7.75319C46.3009 7.11525 46.3113 6.51891 46.3113 5.96418H46.6234C46.4847 6.56052 46.3321 7.18112 46.1657 7.826C45.9993 8.47088 45.8329 9.10189 45.6665 9.71903C45.507 10.3362 45.3509 10.9013 45.1984 11.4144C45.0528 11.9276 44.928 12.3575 44.824 12.7042L42.6085 19.3922H39.5609L37.3142 12.7042C37.2033 12.3575 37.0715 11.9276 36.919 11.4144C36.7734 10.9013 36.6139 10.3396 36.4405 9.72944C36.2741 9.11229 36.1042 8.48128 35.9309 7.8364C35.7644 7.19153 35.6084 6.56745 35.4628 5.96418H35.8269C35.8338 6.51198 35.8442 7.10485 35.8581 7.74279C35.8719 8.3738 35.8858 9.00481 35.8997 9.63582C35.9205 10.2599 35.9378 10.8389 35.9517 11.3728C35.9655 11.9068 35.9725 12.3506 35.9725 12.7042V19.3922H32.3008ZM51.6684 19.3922V8.02363H55.288V19.3922H51.6684ZM53.4678 6.78588C52.927 6.78588 52.4728 6.61599 52.1053 6.27621C51.7377 5.92951 51.554 5.50652 51.554 5.00726C51.554 4.508 51.7377 4.08848 52.1053 3.74871C52.4728 3.40893 52.927 3.23904 53.4678 3.23904C54.0087 3.23904 54.4629 3.40893 54.8304 3.74871C55.1979 4.08155 55.3817 4.50107 55.3817 5.00726C55.3817 5.50652 55.1979 5.92951 54.8304 6.27621C54.4629 6.61599 54.0087 6.78588 53.4678 6.78588ZM60.7075 13.0266V19.3922H57.0879V8.02363H60.5515L60.5931 10.9672H60.2811C60.5931 10.0241 61.0612 9.26831 61.6852 8.69971C62.3093 8.12417 63.1379 7.8364 64.1711 7.8364C64.9755 7.8364 65.6724 8.01669 66.2618 8.37727C66.8512 8.73091 67.3019 9.23364 67.614 9.88545C67.9329 10.5373 68.0924 11.307 68.0924 12.1945V19.3922H64.4832V12.9122C64.4832 12.2604 64.3202 11.7542 63.9943 11.3936C63.6753 11.0331 63.2212 10.8528 62.6318 10.8528C62.2504 10.8528 61.9141 10.936 61.6228 11.1024C61.3316 11.2688 61.1062 11.515 60.9467 11.8409C60.7873 12.1599 60.7075 12.5551 60.7075 13.0266ZM76.4555 8.02363V10.7488H69.0081V8.02363H76.4555ZM70.6828 5.16328H74.292V15.783C74.292 16.1019 74.3613 16.3342 74.5 16.4799C74.6456 16.6255 74.8987 16.6983 75.2593 16.6983C75.4049 16.6983 75.5956 16.6879 75.8314 16.6671C76.0741 16.6463 76.2509 16.6289 76.3618 16.6151L76.6323 19.309C76.3133 19.3783 75.9631 19.4269 75.5817 19.4546C75.2073 19.4824 74.8363 19.4962 74.4688 19.4962C73.1999 19.4962 72.2499 19.2223 71.6189 18.6745C70.9948 18.1267 70.6828 17.3085 70.6828 16.2198V5.16328Z" fill="#FAFAFA"/>
<path d="M88.6674 19.6522C87.5232 19.6522 86.5282 19.4581 85.6822 19.0698C84.8432 18.6815 84.1879 18.1371 83.7164 17.4368C83.2448 16.7364 82.9917 15.9078 82.9571 14.9509H84.9333C84.968 15.5957 85.1483 16.1401 85.4742 16.5839C85.8001 17.0207 86.2404 17.3536 86.7951 17.5824C87.3499 17.8043 87.974 17.9152 88.6674 17.9152C89.3885 17.9152 90.0265 17.8008 90.5812 17.572C91.1429 17.3432 91.5832 17.0242 91.9022 16.6151C92.2281 16.199 92.391 15.7171 92.391 15.1693C92.391 14.6978 92.2662 14.306 92.0166 13.994C91.7669 13.675 91.4133 13.408 90.9556 13.1931C90.498 12.9781 89.9537 12.7874 89.3227 12.621L87.5024 12.1321C86.1225 11.7646 85.0824 11.255 84.382 10.6031C83.6886 9.94439 83.3419 9.09496 83.3419 8.05483C83.3419 7.17419 83.5708 6.4045 84.0284 5.74575C84.4861 5.087 85.1171 4.57734 85.9214 4.21676C86.7258 3.84925 87.6446 3.6655 88.6778 3.6655C89.7179 3.6655 90.6297 3.85272 91.4133 4.22717C92.2038 4.60161 92.8244 5.12167 93.2751 5.78736C93.7259 6.4461 93.9651 7.20886 93.9928 8.07563H92.0894C92.0131 7.22966 91.656 6.57438 91.0181 6.10979C90.387 5.63827 89.5861 5.40251 88.6154 5.40251C87.9497 5.40251 87.3603 5.51346 86.8471 5.73535C86.341 5.95724 85.9457 6.26235 85.6614 6.65066C85.3771 7.03204 85.235 7.46889 85.235 7.96122C85.235 8.44661 85.3771 8.84879 85.6614 9.16777C85.9457 9.4798 86.3167 9.73984 86.7743 9.94786C87.232 10.149 87.7243 10.3188 88.2513 10.4575L89.8843 10.884C90.4391 11.0227 90.9765 11.2064 91.4965 11.4352C92.0235 11.6571 92.495 11.9345 92.9111 12.2673C93.3341 12.5933 93.6704 12.9954 93.92 13.4739C94.1696 13.9454 94.2945 14.5036 94.2945 15.1485C94.2945 16.0153 94.0656 16.7884 93.608 17.468C93.1573 18.1475 92.5124 18.6815 91.6733 19.0698C90.8343 19.4581 89.8323 19.6522 88.6674 19.6522ZM101.097 8.02363V9.59422H95.1062V8.02363H101.097ZM96.9368 5.16328H98.7674V16.5215C98.7674 16.9999 98.8645 17.3466 99.0587 17.5616C99.2597 17.7696 99.5995 17.8736 100.078 17.8736C100.21 17.8736 100.366 17.8667 100.546 17.8528C100.733 17.832 100.903 17.8147 101.056 17.8008L101.285 19.3506C101.097 19.3922 100.886 19.4234 100.65 19.4442C100.414 19.465 100.189 19.4754 99.974 19.4754C98.9962 19.4754 98.2439 19.2362 97.7169 18.7577C97.1968 18.2723 96.9368 17.5789 96.9368 16.6775V5.16328ZM106.33 19.621C105.595 19.621 104.932 19.4893 104.343 19.2258C103.754 18.9554 103.285 18.5636 102.939 18.0504C102.592 17.5304 102.419 16.8959 102.419 16.147C102.419 15.4952 102.547 14.9647 102.804 14.5556C103.06 14.1465 103.403 13.8275 103.833 13.5987C104.263 13.3629 104.742 13.1861 105.269 13.0682C105.796 12.9504 106.333 12.8567 106.881 12.7874C107.574 12.6903 108.132 12.6175 108.555 12.569C108.978 12.5204 109.287 12.4407 109.481 12.3298C109.675 12.2119 109.772 12.0142 109.772 11.7369V11.6537C109.772 11.2029 109.679 10.8146 109.492 10.4887C109.311 10.1628 109.041 9.90972 108.68 9.72944C108.32 9.54915 107.872 9.459 107.338 9.459C106.805 9.459 106.34 9.54568 105.945 9.71903C105.556 9.89239 105.241 10.1177 104.998 10.3951C104.755 10.6655 104.593 10.9533 104.509 11.2584L102.71 10.9152C102.897 10.2218 103.22 9.64969 103.677 9.19897C104.135 8.74825 104.679 8.41194 105.31 8.19005C105.941 7.96815 106.607 7.85721 107.307 7.85721C107.8 7.85721 108.295 7.91961 108.795 8.04443C109.301 8.16925 109.765 8.38074 110.188 8.67891C110.611 8.97014 110.951 9.36886 111.208 9.87505C111.464 10.3743 111.593 11.0053 111.593 11.7681V19.3922H109.793V17.8216H109.7C109.568 18.0851 109.363 18.359 109.086 18.6433C108.809 18.9207 108.444 19.153 107.994 19.3402C107.543 19.5274 106.988 19.621 106.33 19.621ZM106.621 17.9984C107.321 17.9984 107.904 17.8667 108.368 17.6032C108.84 17.3328 109.19 16.9861 109.419 16.5631C109.654 16.1331 109.772 15.6824 109.772 15.2109V13.6923C109.703 13.7686 109.554 13.8414 109.325 13.9107C109.096 13.9732 108.829 14.0321 108.524 14.0876C108.226 14.143 107.921 14.1916 107.609 14.2332C107.304 14.2748 107.033 14.3095 106.798 14.3372C106.354 14.3927 105.938 14.4897 105.549 14.6284C105.168 14.7602 104.86 14.9543 104.624 15.2109C104.388 15.4675 104.27 15.8107 104.27 16.2406C104.27 16.6151 104.367 16.934 104.561 17.1975C104.762 17.461 105.04 17.6621 105.393 17.8008C105.747 17.9326 106.156 17.9984 106.621 17.9984ZM114.193 19.3922V8.02363H115.951V9.79184H116.045C116.253 9.20937 116.61 8.74131 117.116 8.38767C117.622 8.03403 118.219 7.85721 118.905 7.85721C119.058 7.85721 119.217 7.86414 119.384 7.87801C119.55 7.88494 119.682 7.89188 119.779 7.89881V9.73984C119.716 9.71903 119.578 9.69476 119.363 9.66703C119.155 9.63929 118.922 9.62542 118.666 9.62542C118.174 9.62542 117.726 9.7329 117.324 9.94786C116.922 10.1628 116.603 10.4714 116.367 10.8736C116.138 11.2758 116.024 11.7577 116.024 12.3194V19.3922H114.193ZM126.322 8.02363V9.59422H120.33V8.02363H126.322ZM122.161 5.16328H123.992V16.5215C123.992 16.9999 124.089 17.3466 124.283 17.5616C124.484 17.7696 124.824 17.8736 125.302 17.8736C125.434 17.8736 125.59 17.8667 125.77 17.8528C125.958 17.832 126.127 17.8147 126.28 17.8008L126.509 19.3506C126.322 19.3922 126.11 19.4234 125.874 19.4442C125.639 19.465 125.413 19.4754Line truncated
<defs>
<linearGradient id="paint0_linear_17557_2145" x1="3.77557" y1="5.91571" x2="5.23185" y2="21.5589" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299"/>
<stop offset="1" stop-color="#15803D"/>
</linearGradient>
<linearGradient id="paint1_linear_17557_2145" x1="12.1711" y1="-0.718425" x2="10.1897" y2="22.9832" gradientUnits="userSpaceOnUse">
<stop stop-color="#16A34A"/>
<stop offset="1" stop-color="#4ADE80"/>
</linearGradient>
<linearGradient id="paint2_linear_17557_2145" x1="23.1327" y1="15.353" x2="9.33841" y2="18.5196" gradientUnits="userSpaceOnUse">
<stop stop-color="#4ADE80"/>
<stop offset="1" stop-color="#0D9373"/>
</linearGradient>
</defs>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#f0f0f0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 333 B

+2 -20
View File
@@ -1,21 +1,3 @@
<svg width="177" height="24" viewBox="0 0 177 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.06145 23.1079C5.26816 22.3769 -3.39077 20.6274 1.4173 5.06384C9.6344 6.09939 16.9728 14.0644 9.06145 23.1079Z" fill="url(#paint0_linear_17557_2020)"/>
<path d="M8.91928 23.0939C5.27642 21.2223 0.78371 4.20891 17.0071 0C20.7569 7.19341 19.6212 16.5452 8.91928 23.0939Z" fill="url(#paint1_linear_17557_2020)"/>
<path d="M8.91388 23.0788C8.73534 19.8817 10.1585 9.08525 23.5699 13.1107C23.1812 20.1229 18.984 26.4182 8.91388 23.0788Z" fill="url(#paint2_linear_17557_2020)"/>
<path d="M32.3008 19.3922V3.89432H37.9383L39.925 9.94786C40.0359 10.3154 40.1642 10.7869 40.3098 11.3624C40.4624 11.938 40.6114 12.5516 40.7571 13.2035C40.9096 13.8553 41.0483 14.4828 41.1731 15.0861C41.3049 15.6824 41.4123 16.1921 41.4955 16.6151H40.6946C40.7709 16.1921 40.8715 15.6824 40.9963 15.0861C41.128 14.4897 41.2667 13.8657 41.4123 13.2139C41.5649 12.562 41.714 11.9484 41.8596 11.3728C42.0052 10.7904 42.1335 10.3154 42.2444 9.94786L44.1999 3.89432H49.8478V19.3922H46.1657V12.7042C46.1657 12.3575 46.1726 11.9172 46.1865 11.3832C46.2004 10.8493 46.2143 10.2703 46.2281 9.64623C46.2489 9.02215 46.2663 8.39114 46.2801 7.75319C46.3009 7.11525 46.3113 6.51891 46.3113 5.96418H46.6234C46.4847 6.56052 46.3321 7.18112 46.1657 7.826C45.9993 8.47088 45.8329 9.10189 45.6665 9.71903C45.507 10.3362 45.3509 10.9013 45.1984 11.4144C45.0528 11.9276 44.928 12.3575 44.824 12.7042L42.6085 19.3922H39.5609L37.3142 12.7042C37.2033 12.3575 37.0715 11.9276 36.919 11.4144C36.7734 10.9013 36.6139 10.3396 36.4405 9.72944C36.2741 9.11229 36.1042 8.48128 35.9309 7.8364C35.7644 7.19153 35.6084 6.56745 35.4628 5.96418H35.8269C35.8338 6.51198 35.8442 7.10485 35.8581 7.74279C35.8719 8.3738 35.8858 9.00481 35.8997 9.63582C35.9205 10.2599 35.9378 10.8389 35.9517 11.3728C35.9655 11.9068 35.9725 12.3506 35.9725 12.7042V19.3922H32.3008ZM51.6684 19.3922V8.02363H55.288V19.3922H51.6684ZM53.4678 6.78588C52.927 6.78588 52.4728 6.61599 52.1053 6.27621C51.7377 5.92951 51.554 5.50652 51.554 5.00726C51.554 4.508 51.7377 4.08848 52.1053 3.74871C52.4728 3.40893 52.927 3.23904 53.4678 3.23904C54.0087 3.23904 54.4629 3.40893 54.8304 3.74871C55.1979 4.08155 55.3817 4.50107 55.3817 5.00726C55.3817 5.50652 55.1979 5.92951 54.8304 6.27621C54.4629 6.61599 54.0087 6.78588 53.4678 6.78588ZM60.7075 13.0266V19.3922H57.0879V8.02363H60.5515L60.5931 10.9672H60.2811C60.5931 10.0241 61.0612 9.26831 61.6852 8.69971C62.3093 8.12417 63.1379 7.8364 64.1711 7.8364C64.9755 7.8364 65.6724 8.01669 66.2618 8.37727C66.8512 8.73091 67.3019 9.23364 67.614 9.88545C67.9329 10.5373 68.0924 11.307 68.0924 12.1945V19.3922H64.4832V12.9122C64.4832 12.2604 64.3202 11.7542 63.9943 11.3936C63.6753 11.0331 63.2212 10.8528 62.6318 10.8528C62.2504 10.8528 61.9141 10.936 61.6228 11.1024C61.3316 11.2688 61.1062 11.515 60.9467 11.8409C60.7873 12.1599 60.7075 12.5551 60.7075 13.0266ZM76.4555 8.02363V10.7488H69.0081V8.02363H76.4555ZM70.6828 5.16328H74.292V15.783C74.292 16.1019 74.3613 16.3342 74.5 16.4799C74.6456 16.6255 74.8987 16.6983 75.2593 16.6983C75.4049 16.6983 75.5956 16.6879 75.8314 16.6671C76.0741 16.6463 76.2509 16.6289 76.3618 16.6151L76.6323 19.309C76.3133 19.3783 75.9631 19.4269 75.5817 19.4546C75.2073 19.4824 74.8363 19.4962 74.4688 19.4962C73.1999 19.4962 72.2499 19.2223 71.6189 18.6745C70.9948 18.1267 70.6828 17.3085 70.6828 16.2198V5.16328Z" fill="#09090B"/>
<path d="M88.6674 19.6522C87.5232 19.6522 86.5282 19.4581 85.6822 19.0698C84.8432 18.6815 84.1879 18.1371 83.7164 17.4368C83.2448 16.7364 82.9917 15.9078 82.9571 14.9509H84.9333C84.968 15.5957 85.1483 16.1401 85.4742 16.5839C85.8001 17.0207 86.2404 17.3536 86.7951 17.5824C87.3499 17.8043 87.974 17.9152 88.6674 17.9152C89.3885 17.9152 90.0265 17.8008 90.5812 17.572C91.1429 17.3432 91.5832 17.0242 91.9022 16.6151C92.2281 16.199 92.391 15.7171 92.391 15.1693C92.391 14.6978 92.2662 14.306 92.0166 13.994C91.7669 13.675 91.4133 13.408 90.9556 13.1931C90.498 12.9781 89.9537 12.7874 89.3227 12.621L87.5024 12.1321C86.1225 11.7646 85.0824 11.255 84.382 10.6031C83.6886 9.94439 83.3419 9.09496 83.3419 8.05483C83.3419 7.17419 83.5708 6.4045 84.0284 5.74575C84.4861 5.087 85.1171 4.57734 85.9214 4.21676C86.7258 3.84925 87.6446 3.6655 88.6778 3.6655C89.7179 3.6655 90.6297 3.85272 91.4133 4.22717C92.2038 4.60161 92.8244 5.12167 93.2751 5.78736C93.7259 6.4461 93.9651 7.20886 93.9928 8.07563H92.0894C92.0131 7.22966 91.656 6.57438 91.0181 6.10979C90.387 5.63827 89.5861 5.40251 88.6154 5.40251C87.9497 5.40251 87.3603 5.51346 86.8471 5.73535C86.341 5.95724 85.9457 6.26235 85.6614 6.65066C85.3771 7.03204 85.235 7.46889 85.235 7.96122C85.235 8.44661 85.3771 8.84879 85.6614 9.16777C85.9457 9.4798 86.3167 9.73984 86.7743 9.94786C87.232 10.149 87.7243 10.3188 88.2513 10.4575L89.8843 10.884C90.4391 11.0227 90.9765 11.2064 91.4965 11.4352C92.0235 11.6571 92.495 11.9345 92.9111 12.2673C93.3341 12.5933 93.6704 12.9954 93.92 13.4739C94.1696 13.9454 94.2945 14.5036 94.2945 15.1485C94.2945 16.0153 94.0656 16.7884 93.608 17.468C93.1573 18.1475 92.5124 18.6815 91.6733 19.0698C90.8343 19.4581 89.8323 19.6522 88.6674 19.6522ZM101.097 8.02363V9.59422H95.1062V8.02363H101.097ZM96.9368 5.16328H98.7674V16.5215C98.7674 16.9999 98.8645 17.3466 99.0587 17.5616C99.2597 17.7696 99.5995 17.8736 100.078 17.8736C100.21 17.8736 100.366 17.8667 100.546 17.8528C100.733 17.832 100.903 17.8147 101.056 17.8008L101.285 19.3506C101.097 19.3922 100.886 19.4234 100.65 19.4442C100.414 19.465 100.189 19.4754 99.974 19.4754C98.9962 19.4754 98.2439 19.2362 97.7169 18.7577C97.1968 18.2723 96.9368 17.5789 96.9368 16.6775V5.16328ZM106.33 19.621C105.595 19.621 104.932 19.4893 104.343 19.2258C103.754 18.9554 103.285 18.5636 102.939 18.0504C102.592 17.5304 102.419 16.8959 102.419 16.147C102.419 15.4952 102.547 14.9647 102.804 14.5556C103.06 14.1465 103.403 13.8275 103.833 13.5987C104.263 13.3629 104.742 13.1861 105.269 13.0682C105.796 12.9504 106.333 12.8567 106.881 12.7874C107.574 12.6903 108.132 12.6175 108.555 12.569C108.978 12.5204 109.287 12.4407 109.481 12.3298C109.675 12.2119 109.772 12.0142 109.772 11.7369V11.6537C109.772 11.2029 109.679 10.8146 109.492 10.4887C109.311 10.1628 109.041 9.90972 108.68 9.72944C108.32 9.54915 107.872 9.459 107.338 9.459C106.805 9.459 106.34 9.54568 105.945 9.71903C105.556 9.89239 105.241 10.1177 104.998 10.3951C104.755 10.6655 104.593 10.9533 104.509 11.2584L102.71 10.9152C102.897 10.2218 103.22 9.64969 103.677 9.19897C104.135 8.74825 104.679 8.41194 105.31 8.19005C105.941 7.96815 106.607 7.85721 107.307 7.85721C107.8 7.85721 108.295 7.91961 108.795 8.04443C109.301 8.16925 109.765 8.38074 110.188 8.67891C110.611 8.97014 110.951 9.36886 111.208 9.87505C111.464 10.3743 111.593 11.0053 111.593 11.7681V19.3922H109.793V17.8216H109.7C109.568 18.0851 109.363 18.359 109.086 18.6433C108.809 18.9207 108.444 19.153 107.994 19.3402C107.543 19.5274 106.988 19.621 106.33 19.621ZM106.621 17.9984C107.321 17.9984 107.904 17.8667 108.368 17.6032C108.84 17.3328 109.19 16.9861 109.419 16.5631C109.654 16.1331 109.772 15.6824 109.772 15.2109V13.6923C109.703 13.7686 109.554 13.8414 109.325 13.9107C109.096 13.9732 108.829 14.0321 108.524 14.0876C108.226 14.143 107.921 14.1916 107.609 14.2332C107.304 14.2748 107.033 14.3095 106.798 14.3372C106.354 14.3927 105.938 14.4897 105.549 14.6284C105.168 14.7602 104.86 14.9543 104.624 15.2109C104.388 15.4675 104.27 15.8107 104.27 16.2406C104.27 16.6151 104.367 16.934 104.561 17.1975C104.762 17.461 105.04 17.6621 105.393 17.8008C105.747 17.9326 106.156 17.9984 106.621 17.9984ZM114.193 19.3922V8.02363H115.951V9.79184H116.045C116.253 9.20937 116.61 8.74131 117.116 8.38767C117.622 8.03403 118.219 7.85721 118.905 7.85721C119.058 7.85721 119.217 7.86414 119.384 7.87801C119.55 7.88494 119.682 7.89188 119.779 7.89881V9.73984C119.716 9.71903 119.578 9.69476 119.363 9.66703C119.155 9.63929 118.922 9.62542 118.666 9.62542C118.174 9.62542 117.726 9.7329 117.324 9.94786C116.922 10.1628 116.603 10.4714 116.367 10.8736C116.138 11.2758 116.024 11.7577 116.024 12.3194V19.3922H114.193ZM126.322 8.02363V9.59422H120.33V8.02363H126.322ZM122.161 5.16328H123.992V16.5215C123.992 16.9999 124.089 17.3466 124.283 17.5616C124.484 17.7696 124.824 17.8736 125.302 17.8736C125.434 17.8736 125.59 17.8667 125.77 17.8528C125.958 17.832 126.127 17.8147 126.28 17.8008L126.509 19.3506C126.322 19.3922 126.11 19.4234 125.874 19.4442C125.639 19.465 125.413 19.4754Line truncated
<defs>
<linearGradient id="paint0_linear_17557_2020" x1="3.77557" y1="5.91571" x2="5.23185" y2="21.5589" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299"/>
<stop offset="1" stop-color="#15803D"/>
</linearGradient>
<linearGradient id="paint1_linear_17557_2020" x1="12.1711" y1="-0.718425" x2="10.1897" y2="22.9832" gradientUnits="userSpaceOnUse">
<stop stop-color="#16A34A"/>
<stop offset="1" stop-color="#4ADE80"/>
</linearGradient>
<linearGradient id="paint2_linear_17557_2020" x1="23.1327" y1="15.353" x2="9.33841" y2="18.5196" gradientUnits="userSpaceOnUse">
<stop stop-color="#4ADE80"/>
<stop offset="1" stop-color="#0D9373"/>
</linearGradient>
</defs>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#1a1a1a" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 333 B

+21277
View File
File diff suppressed because it is too large. Load diff
+41
View File
@@ -0,0 +1,41 @@
{
"name": "paperclip-docs",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"start:service": "sh -c 'BROWSER=none exec docusaurus start --host ${HOST:-0.0.0.0} --port ${PORT:-3000}'",
"build": "docusaurus build",
"serve": "docusaurus serve",
"serve:service": "sh -c 'exec docusaurus serve --host ${HOST:-0.0.0.0} --port ${PORT:-3000}'",
"service": "npm run build && npm run serve:service",
"clear": "docusaurus clear",
"deploy": "docusaurus deploy",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.10.0",
"@docusaurus/faster": "3.10.0",
"@docusaurus/preset-classic": "3.10.0",
"@docusaurus/theme-mermaid": "3.10.0",
"@easyops-cn/docusaurus-search-local": "^0.55.1",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.10.0",
"@docusaurus/tsconfig": "3.10.0",
"@docusaurus/types": "3.10.0",
"@types/react": "^19.0.0",
"typescript": "~6.0.2"
},
"engines": {
"node": ">=20.0"
}
}
+113
View File
@@ -0,0 +1,113 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
docs: [
'home',
{
type: 'category',
label: 'Get Started',
items: [
'start/what-is-paperclip',
'start/quickstart',
'start/core-concepts',
'start/architecture',
],
},
{
type: 'category',
label: 'Guides',
items: [
{
type: 'category',
label: 'Board Operator',
items: [
'guides/board-operator/dashboard',
'guides/board-operator/creating-a-company',
'guides/board-operator/managing-agents',
'guides/board-operator/org-structure',
'guides/board-operator/managing-tasks',
'guides/board-operator/approvals',
'guides/board-operator/costs-and-budgets',
'guides/board-operator/activity-log',
],
},
{
type: 'category',
label: 'Agent Developer',
items: [
'guides/agent-developer/how-agents-work',
'guides/agent-developer/heartbeat-protocol',
'guides/agent-developer/writing-a-skill',
'guides/agent-developer/task-workflow',
'guides/agent-developer/comments-and-communication',
'guides/agent-developer/handling-approvals',
'guides/agent-developer/cost-reporting',
],
},
'guides/openclaw-docker-setup',
],
},
{
type: 'category',
label: 'Deploy',
items: [
'deploy/overview',
'deploy/local-development',
'deploy/docker',
'deploy/deployment-modes',
'deploy/database',
'deploy/secrets',
'deploy/storage',
'deploy/environment-variables',
],
},
{
type: 'category',
label: 'Adapters',
items: [
'adapters/overview',
'adapters/claude-local',
'adapters/codex-local',
'adapters/process',
'adapters/http',
'adapters/creating-an-adapter',
],
},
{
type: 'category',
label: 'API Reference',
items: [
'api/overview',
'api/authentication',
'api/companies',
'api/agents',
'api/issues',
'api/approvals',
'api/goals-and-projects',
'api/costs',
'api/secrets',
'api/activity',
'api/dashboard',
],
},
{
type: 'category',
label: 'CLI',
items: [
'cli/overview',
'cli/setup-commands',
'cli/control-plane-commands',
],
},
{
type: 'category',
label: 'Reference',
items: [
'agents-runtime',
'specs/agent-config-ui',
],
},
],
};
export default sidebars;
+76
View File
@@ -0,0 +1,76 @@
import React from 'react';
import Link from '@docusaurus/Link';
export default function LandingHero(): React.JSX.Element {
return (
<>
<section className="hero-shell">
<div>
<p className="hero-kicker">Paperclip documentation</p>
<h1 className="hero-title">
Run your company with <em>autonomous agents.</em>
</h1>
<p className="hero-summary">
Paperclip is the control plane for AI-run companies. Hire agents, delegate work, approve
the risky parts, and watch each heartbeat leave an audit trail.
</p>
<div className="hero-actions">
<Link className="button button--primary button--lg" to="/start/quickstart">
Start with quickstart
</Link>
<Link className="button button--secondary button--lg" to="/guides/board-operator/creating-a-company">
Read the setup guide
</Link>
</div>
</div>
<div className="hero-console" aria-label="Paperclip run status preview">
<div className="hero-console-header" aria-hidden="true">
<span className="hero-console-dot" />
<span className="hero-console-dot" />
<span className="hero-console-dot" />
</div>
<div className="hero-console-body">
<div className="hero-console-line">
<span className="hero-console-prompt">$</span>
<span>npx paperclipai start</span>
</div>
<div className="hero-console-line hero-console-muted">
<span>log</span>
<span>Company created</span>
</div>
<div className="hero-console-line hero-console-muted">
<span>log</span>
<span>Board approvals enabled</span>
</div>
<div className="hero-status-row">
<span className="hero-status-dot" />
<span className="hero-status-label">CTO agent</span>
<span className="hero-status-meta">in heartbeat</span>
</div>
<div className="hero-status-row">
<span className="hero-status-dot" />
<span className="hero-status-label">ACME-102</span>
<span className="hero-status-meta">Ship checkout</span>
</div>
</div>
</div>
</section>
<section className="hero-grid" aria-label="Paperclip highlights">
<div className="hero-panel">
<span>Control plane</span>
<strong>Track agents, issues, budgets, projects, approvals, and org structure in one place.</strong>
</div>
<div className="hero-panel">
<span>Execution</span>
<strong>Heartbeat-driven runs let agents work in discrete cycles with logs, costs, and resumable state.</strong>
</div>
<div className="hero-panel">
<span>Adapters</span>
<strong>Bring your own runtime with local CLIs, process adapters, HTTP workers, or custom integrations.</strong>
</div>
</section>
</>
);
}
+900
View File
@@ -0,0 +1,900 @@
@import url('https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
:root {
--pc-white: #ffffff;
--pc-bg: #ffffff;
--pc-bg-alt: #f5f3f0;
--pc-surface: #f0ece7;
--pc-border: #e0dcd6;
--pc-border-strong: #c8c3bc;
--pc-text: #1a1a1a;
--pc-text-secondary: #4a4a4a;
--pc-text-muted: #888880;
--pc-void: #0c0c0c;
--pc-active: #22c55e;
--pc-active-dark: #15803d;
--pc-mint: #dcfce7;
--pc-warning: #f59e0b;
--pc-radius-sm: 10px;
--pc-radius: 16px;
--pc-radius-lg: 24px;
--pc-radius-pill: 999px;
--pc-font-serif: 'Instrument Serif', Georgia, serif;
--pc-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--pc-font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
--ifm-color-primary: var(--pc-active);
--ifm-color-primary-dark: #1fb155;
--ifm-color-primary-darker: #1da64f;
--ifm-color-primary-darkest: #15803d;
--ifm-color-primary-light: #45cd75;
--ifm-color-primary-lighter: #6fd993;
--ifm-color-primary-lightest: #dcfce7;
--ifm-background-color: var(--pc-bg);
--ifm-background-surface-color: var(--pc-bg-alt);
--ifm-code-font-size: 92%;
--ifm-font-family-base: var(--pc-font-sans);
--ifm-font-family-monospace: var(--pc-font-mono);
--ifm-heading-font-family: var(--pc-font-serif);
--ifm-heading-font-weight: 400;
--ifm-heading-color: var(--pc-text);
--ifm-font-color-base: var(--pc-text);
--ifm-color-content-secondary: var(--pc-text-secondary);
--ifm-link-color: var(--pc-active-dark);
--ifm-link-hover-color: var(--pc-active-dark);
--ifm-navbar-height: 4rem;
--ifm-navbar-padding-horizontal: 1.5rem;
--ifm-navbar-background-color: rgba(245, 243, 240, 0.84);
--ifm-navbar-link-color: var(--pc-text-secondary);
--ifm-navbar-shadow: none;
--ifm-footer-background-color: var(--pc-bg-alt);
--ifm-footer-color: var(--pc-text-secondary);
--ifm-footer-link-color: var(--pc-text);
--ifm-footer-title-color: var(--pc-text);
--ifm-menu-color-background-active: var(--pc-mint);
--ifm-menu-color-background-hover: rgba(224, 220, 214, 0.42);
--ifm-toc-border-color: var(--pc-border);
--ifm-hr-border-color: var(--pc-border);
--ifm-table-border-color: var(--pc-border);
--ifm-border-radius: var(--pc-radius-sm);
--ifm-card-border-radius: var(--pc-radius-sm);
--ifm-global-radius: var(--pc-radius-sm);
--ifm-alert-border-radius: var(--pc-radius-sm);
--ifm-code-border-radius: 7px;
--ifm-button-border-radius: var(--pc-radius-pill);
}
html[data-theme='dark'] {
--pc-white: #0f1117;
--pc-bg: #0f1117;
--pc-bg-alt: #0b0d12;
--pc-surface: #181c27;
--pc-border: #252a3a;
--pc-border-strong: #353c52;
--pc-text: #e4e6f0;
--pc-text-secondary: #9ba3bf;
--pc-text-muted: #6b7290;
--pc-void: #07080c;
--pc-mint: rgba(34, 197, 94, 0.14);
--ifm-background-color: var(--pc-bg) !important;
--ifm-background-surface-color: var(--pc-surface) !important;
--ifm-heading-color: var(--pc-text) !important;
--ifm-font-color-base: var(--pc-text) !important;
--ifm-color-content-secondary: var(--pc-text-secondary) !important;
--ifm-link-color: #4ade80 !important;
--ifm-link-hover-color: #86efac !important;
--ifm-font-family-base: var(--pc-font-sans) !important;
--ifm-font-family-monospace: var(--pc-font-mono) !important;
--ifm-heading-font-family: var(--pc-font-serif) !important;
--ifm-heading-font-weight: 400 !important;
--ifm-navbar-background-color: rgba(15, 17, 23, 0.84) !important;
--ifm-navbar-link-color: var(--pc-text-secondary) !important;
--ifm-footer-background-color: var(--pc-bg-alt) !important;
--ifm-footer-color: var(--pc-text-secondary) !important;
--ifm-footer-link-color: var(--pc-text) !important;
--ifm-footer-title-color: var(--pc-text) !important;
--ifm-menu-color-background-active: rgba(34, 197, 94, 0.16) !important;
--ifm-menu-color-background-hover: rgba(255, 255, 255, 0.05) !important;
--ifm-toc-border-color: var(--pc-border) !important;
--ifm-hr-border-color: var(--pc-border) !important;
--ifm-table-border-color: var(--pc-border) !important;
}
html[data-theme='light'] {
--ifm-color-primary: var(--pc-active) !important;
--ifm-color-primary-dark: #1fb155 !important;
--ifm-color-primary-darker: #1da64f !important;
--ifm-color-primary-darkest: #15803d !important;
--ifm-color-primary-light: #45cd75 !important;
--ifm-color-primary-lighter: #6fd993 !important;
--ifm-color-primary-lightest: #dcfce7 !important;
--ifm-link-color: var(--pc-active-dark) !important;
--ifm-link-hover-color: var(--pc-active-dark) !important;
--ifm-font-family-base: var(--pc-font-sans) !important;
--ifm-font-family-monospace: var(--pc-font-mono) !important;
--ifm-heading-font-family: var(--pc-font-serif) !important;
--ifm-heading-font-weight: 400 !important;
}
:root {
--ifm-color-primary: var(--pc-active) !important;
--ifm-color-primary-dark: #1fb155 !important;
--ifm-color-primary-darker: #1da64f !important;
--ifm-color-primary-darkest: #15803d !important;
--ifm-color-primary-light: #45cd75 !important;
--ifm-color-primary-lighter: #6fd993 !important;
--ifm-color-primary-lightest: #dcfce7 !important;
--ifm-link-color: var(--pc-active-dark) !important;
--ifm-link-hover-color: var(--pc-active-dark) !important;
--ifm-font-family-base: var(--pc-font-sans) !important;
--ifm-font-family-monospace: var(--pc-font-mono) !important;
--ifm-heading-font-family: var(--pc-font-serif) !important;
--ifm-heading-font-weight: 400 !important;
}
html {
scroll-behavior: smooth;
}
body {
background:
linear-gradient(180deg, var(--pc-bg-alt) 0, var(--pc-bg) 22rem),
var(--pc-bg);
color: var(--pc-text);
}
body,
.navbar,
.theme-doc-sidebar-container,
.theme-doc-markdown,
.card,
.pagination-nav__link,
.menu__link,
.navbar__search-input {
transition: background-color 200ms ease, border-color 200ms ease, color 200ms ease;
}
[class*='skipToContent']:not(:focus):not(:focus-within) {
position: absolute !important;
top: 0 !important;
left: 0 !important;
width: 1px !important;
height: 1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
}
[class*='skipToContent']:focus,
[class*='skipToContent']:focus-within {
position: fixed !important;
top: 0.75rem !important;
left: 0.75rem !important;
z-index: 999 !important;
width: auto !important;
height: auto !important;
padding: 0.65rem 0.9rem !important;
clip: auto !important;
border-radius: var(--pc-radius-sm) !important;
background: var(--pc-text) !important;
color: var(--pc-bg) !important;
}
.navbar {
border-bottom: 1px solid color-mix(in srgb, var(--pc-border) 82%, transparent);
backdrop-filter: blur(20px) saturate(1.35);
}
.navbar__inner {
margin: 0;
max-width: none;
width: 100%;
}
.navbar__brand {
gap: 0.65rem;
}
.navbar__logo {
height: 1.7rem;
margin-right: 0;
}
.navbar__logo img {
height: 1.7rem;
width: 1.7rem;
}
.navbar__title {
color: var(--pc-text);
font-size: 0.96rem;
font-weight: 600;
letter-spacing: 0;
}
.navbar__item,
.navbar__link {
font-size: 0.88rem;
font-weight: 500;
}
.navbar__link:hover,
.navbar__link--active {
color: var(--pc-text);
}
.navbar-sidebar {
background: var(--pc-bg);
}
h1,
h2,
h3,
h4 {
font-family: var(--pc-font-serif);
font-weight: 400;
letter-spacing: 0;
}
h1 {
font-size: 3.25rem;
line-height: 1.05;
}
h2 {
font-size: 2.25rem;
line-height: 1.12;
}
h3 {
font-size: 1.55rem;
}
.theme-doc-markdown {
max-width: 780px;
}
.theme-doc-markdown:has(.hero-shell) {
max-width: 980px !important;
}
.theme-doc-markdown h1,
.theme-doc-markdown h2,
.theme-doc-markdown h3,
.theme-doc-markdown h4 {
font-family: var(--pc-font-serif) !important;
font-weight: 400 !important;
}
.theme-doc-markdown h1 {
font-size: 3.25rem !important;
line-height: 1.05 !important;
}
.theme-doc-markdown h2 {
font-size: 2.25rem !important;
line-height: 1.12 !important;
}
.theme-doc-markdown h3 {
font-size: 1.55rem !important;
line-height: 1.25 !important;
}
.theme-doc-markdown > p,
.theme-doc-markdown > ul li,
.theme-doc-markdown > ol li {
color: var(--pc-text-secondary);
font-size: 1rem;
line-height: 1.72;
}
.theme-doc-markdown strong {
color: var(--pc-text);
font-weight: 600;
}
.theme-doc-markdown blockquote {
margin: 1.4rem 0;
border-left: 3px solid var(--pc-active);
border-radius: var(--pc-radius-sm);
background: var(--pc-bg-alt);
color: var(--pc-text-secondary);
padding: 1rem 1.15rem;
}
.theme-doc-markdown blockquote > p:last-child {
margin-bottom: 0;
}
.theme-doc-sidebar-container {
border-right: 1px solid var(--pc-border);
background: color-mix(in srgb, var(--pc-bg-alt) 78%, var(--pc-bg));
}
.menu {
padding: 0.9rem;
}
.menu__link {
border-radius: 0;
color: var(--pc-text-secondary);
font-size: 0.9rem;
}
.menu__link:hover,
.menu__link--active {
color: var(--pc-text);
}
.menu__link--active {
background: transparent;
font-weight: 600;
}
.menu__caret {
border-radius: 0;
}
.menu__list-item-collapsible {
border-radius: 0;
}
.table-of-contents {
font-size: 0.82rem;
}
.table-of-contents__link {
color: var(--pc-text-muted);
}
.table-of-contents__link:hover,
.table-of-contents__link--active {
color: var(--pc-active-dark);
}
html[data-theme='dark'] .table-of-contents__link:hover,
html[data-theme='dark'] .table-of-contents__link--active {
color: #4ade80;
}
pre {
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius) !important;
box-shadow: none;
}
code {
border-radius: 7px;
font-family: var(--pc-font-mono);
}
:not(pre) > code {
border: 1px solid color-mix(in srgb, var(--pc-border) 74%, transparent);
background: var(--pc-bg-alt);
color: var(--pc-text);
}
.button {
border-radius: var(--pc-radius-pill);
font-weight: 500;
letter-spacing: 0;
transition: background-color 200ms ease, border-color 200ms ease, color 200ms ease;
}
.button--primary {
--ifm-button-background-color: var(--pc-text);
--ifm-button-border-color: var(--pc-text);
--ifm-button-color: var(--pc-bg);
background-color: var(--pc-text);
border-color: var(--pc-text);
color: var(--pc-bg);
}
.theme-doc-markdown .button.button--primary,
.button.button--primary {
--ifm-button-background-color: var(--pc-text) !important;
--ifm-button-border-color: var(--pc-text) !important;
--ifm-button-color: var(--pc-bg) !important;
background-color: var(--pc-text) !important;
border-color: var(--pc-text) !important;
color: var(--pc-bg) !important;
}
.button--primary:hover {
--ifm-button-background-color: var(--pc-active-dark);
--ifm-button-border-color: var(--pc-active-dark);
--ifm-button-color: #ffffff;
background-color: var(--pc-active-dark);
border-color: var(--pc-active-dark);
color: #ffffff;
}
.theme-doc-markdown .button.button--primary:hover,
.button.button--primary:hover {
--ifm-button-background-color: var(--pc-active-dark) !important;
--ifm-button-border-color: var(--pc-active-dark) !important;
--ifm-button-color: #ffffff !important;
background-color: var(--pc-active-dark) !important;
border-color: var(--pc-active-dark) !important;
color: #ffffff !important;
}
.button--secondary {
--ifm-button-background-color: color-mix(in srgb, var(--pc-bg) 72%, transparent);
--ifm-button-border-color: var(--pc-border-strong);
--ifm-button-color: var(--pc-text);
background-color: color-mix(in srgb, var(--pc-bg) 72%, transparent);
border-color: var(--pc-border-strong);
color: var(--pc-text);
}
.theme-doc-markdown .button.button--secondary,
.button.button--secondary {
--ifm-button-background-color: color-mix(in srgb, var(--pc-bg) 72%, transparent) !important;
--ifm-button-border-color: var(--pc-border-strong) !important;
--ifm-button-color: var(--pc-text) !important;
background-color: color-mix(in srgb, var(--pc-bg) 72%, transparent) !important;
border-color: var(--pc-border-strong) !important;
color: var(--pc-text) !important;
}
.button--secondary:hover {
--ifm-button-background-color: var(--pc-bg);
--ifm-button-border-color: var(--pc-text);
--ifm-button-color: var(--pc-text);
background-color: var(--pc-bg);
border-color: var(--pc-text);
color: var(--pc-text);
}
.theme-doc-markdown .button.button--secondary:hover,
.button.button--secondary:hover {
--ifm-button-background-color: var(--pc-bg) !important;
--ifm-button-border-color: var(--pc-text) !important;
--ifm-button-color: var(--pc-text) !important;
background-color: var(--pc-bg) !important;
border-color: var(--pc-text) !important;
color: var(--pc-text) !important;
}
.hero-shell {
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(18rem, 25rem);
gap: 3rem;
align-items: center;
min-width: 0;
margin: 0 0 2.5rem;
padding: 4.25rem 0 3.5rem;
}
.hero-shell > * {
min-width: 0;
}
.hero-shell::before {
position: absolute;
z-index: -1;
inset: -2rem -1.5rem 0;
content: '';
background:
linear-gradient(135deg, color-mix(in srgb, var(--pc-surface) 78%, transparent), transparent 58%),
linear-gradient(180deg, var(--pc-bg-alt), transparent 72%);
border-bottom: 1px solid var(--pc-border);
}
.hero-kicker {
display: inline-flex;
align-items: center;
gap: 0.55rem;
margin-bottom: 1.25rem;
padding: 0.38rem 0.95rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-pill);
background: color-mix(in srgb, var(--pc-bg) 72%, transparent);
color: var(--pc-text-secondary);
font-size: 0.78rem;
font-weight: 600;
letter-spacing: 0;
}
.hero-kicker::before {
display: block;
width: 0.44rem;
height: 0.44rem;
border-radius: 50%;
background: var(--pc-active);
content: '';
box-shadow: 0 0 0 0.28rem color-mix(in srgb, var(--pc-active) 16%, transparent);
}
.hero-title {
max-width: 46rem;
margin: 0;
color: var(--pc-text);
font-family: var(--pc-font-serif);
font-size: 3.75rem;
font-weight: 400;
line-height: 1;
overflow-wrap: anywhere;
}
.theme-doc-markdown h1.hero-title {
color: var(--pc-text);
font-family: var(--pc-font-serif) !important;
font-size: 3.75rem !important;
font-weight: 400 !important;
line-height: 1.04 !important;
}
.hero-title em {
color: var(--pc-active-dark);
font-style: italic;
}
html[data-theme='dark'] .hero-title em {
color: #86efac;
}
.hero-summary {
max-width: 42rem;
margin-top: 1.3rem;
color: var(--pc-text-secondary);
font-size: 1.08rem;
line-height: 1.65;
overflow-wrap: anywhere;
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: 0.8rem;
margin-top: 1.45rem;
}
.hero-console {
max-width: 100%;
overflow: hidden;
border: 1px solid color-mix(in srgb, var(--pc-border-strong) 64%, transparent);
border-radius: var(--pc-radius);
background: var(--pc-void);
color: #f0f0f0;
box-shadow: 0 24px 70px rgba(12, 12, 12, 0.16);
}
html[data-theme='dark'] .hero-console {
border-color: rgba(255, 255, 255, 0.12);
box-shadow: none;
}
.hero-console-header {
display: flex;
gap: 0.45rem;
align-items: center;
padding: 0.85rem 1rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.09);
}
.hero-console-dot {
width: 0.58rem;
height: 0.58rem;
border-radius: 50%;
}
.hero-console-dot:nth-child(1) {
background: #ff5f57;
}
.hero-console-dot:nth-child(2) {
background: #febc2e;
}
.hero-console-dot:nth-child(3) {
background: #28c840;
}
.hero-console-body {
padding: 1.15rem;
font-family: var(--pc-font-mono);
font-size: 0.86rem;
line-height: 1.85;
}
.hero-console-line {
display: flex;
gap: 0.7rem;
min-width: 0;
overflow-wrap: anywhere;
}
.hero-console-prompt {
color: var(--pc-active);
}
.hero-console-muted {
color: rgba(255, 255, 255, 0.7);
}
.hero-status-row {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: 0.7rem;
align-items: center;
margin-top: 0.75rem;
padding: 0.75rem;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: var(--pc-radius-sm);
background: rgba(255, 255, 255, 0.04);
font-family: var(--pc-font-sans);
}
.hero-status-dot {
position: relative;
width: 0.55rem;
height: 0.55rem;
border-radius: 50%;
background: var(--pc-active);
}
.hero-status-dot::after {
position: absolute;
inset: -0.35rem;
border-radius: inherit;
background: color-mix(in srgb, var(--pc-active) 22%, transparent);
content: '';
animation: pulseStatus 2s ease-in-out infinite;
}
.hero-status-label {
min-width: 0;
font-size: 0.82rem;
font-weight: 600;
overflow-wrap: anywhere;
}
.hero-status-meta {
min-width: 0;
color: rgba(255, 255, 255, 0.7);
font-size: 0.78rem;
overflow-wrap: anywhere;
}
@keyframes pulseStatus {
0%,
100% {
opacity: 0.65;
transform: scale(0.72);
}
50% {
opacity: 0;
transform: scale(1.25);
}
}
.hero-grid {
display: grid;
gap: 1rem;
grid-template-columns: repeat(3, minmax(0, 1fr));
margin: 1.8rem 0 2.7rem;
}
.hero-panel {
position: relative;
overflow: hidden;
min-height: 9.5rem;
padding: 1.25rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
}
.hero-panel::after {
position: absolute;
inset: 0 auto 0 0;
width: 3px;
background: var(--pc-active);
content: '';
transform: scaleY(0);
transform-origin: top;
transition: transform 200ms ease;
}
.hero-panel:hover::after {
transform: scaleY(1);
}
.hero-panel span {
display: inline-flex;
align-items: center;
gap: 0.4rem;
margin-bottom: 0.85rem;
padding: 0.28rem 0.72rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-pill);
background: color-mix(in srgb, var(--pc-bg) 72%, transparent);
color: var(--pc-text-secondary);
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0;
}
.hero-panel span::before {
display: block;
width: 0.38rem;
height: 0.38rem;
border-radius: 50%;
background: var(--pc-active);
content: '';
}
.hero-panel strong {
display: block;
color: var(--pc-text);
font-size: 1.02rem;
line-height: 1.45;
}
.footer {
border-top: 1px solid var(--pc-border);
background: var(--ifm-footer-background-color);
color: var(--ifm-footer-color);
}
.footer__title {
color: var(--ifm-footer-title-color);
font-family: var(--pc-font-sans);
font-size: 0.78rem;
font-weight: 600;
letter-spacing: 0;
}
.footer__link-item {
color: var(--ifm-footer-link-color);
}
.footer__link-item:hover {
color: var(--pc-text);
}
.footer__copyright {
color: var(--pc-text-muted);
font-size: 0.82rem;
}
.pagination-nav__link {
border-color: var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
}
.pagination-nav__link:hover {
border-color: var(--pc-border-strong);
}
.alert {
border-radius: var(--pc-radius-sm);
}
.tabs__item {
border-radius: var(--pc-radius-pill);
}
.navbar__search-input {
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background-color: color-mix(in srgb, var(--pc-bg) 74%, transparent);
color: var(--pc-text);
}
.navbar__search-input:focus {
border-color: var(--pc-border-strong);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--pc-active) 14%, transparent);
}
.dropdown__menu {
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
box-shadow: 0 18px 44px rgba(12, 12, 12, 0.09);
}
.dropdown__link {
border-radius: 7px;
}
.breadcrumbs__link {
border-radius: var(--pc-radius-pill);
}
table {
overflow: hidden;
border-radius: var(--pc-radius-sm);
}
thead {
background: var(--pc-bg-alt);
}
th {
color: var(--pc-text);
font-weight: 600;
}
@media (max-width: 996px) {
.hero-shell {
grid-template-columns: 1fr;
gap: 2rem;
padding-top: 3rem;
}
.hero-title {
font-size: 2.85rem;
}
.theme-doc-markdown h1.hero-title {
font-size: 2.85rem !important;
}
h1 {
font-size: 2.55rem;
}
.theme-doc-markdown h1 {
font-size: 2.55rem;
}
h2 {
font-size: 2rem;
}
.theme-doc-markdown h2 {
font-size: 2rem;
}
.hero-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 640px) {
.hero-shell {
padding-top: 2.4rem;
}
.hero-shell::before {
inset: -2rem 0 0;
}
.hero-title {
font-size: 2.35rem;
}
h1 {
font-size: 2.2rem;
}
.theme-doc-markdown h1,
.theme-doc-markdown h1.hero-title {
font-size: 2.35rem !important;
}
.hero-actions .button {
box-sizing: border-box;
width: 100%;
text-align: center;
}
.hero-status-row {
grid-template-columns: auto minmax(0, 1fr);
}
.hero-status-meta {
grid-column: 2;
}
.hero-console-body {
font-size: 0.78rem;
}
}
+160
View File
@@ -0,0 +1,160 @@
.cardGroup {
display: grid;
gap: 1rem;
grid-template-columns: repeat(3, minmax(0, 1fr));
margin: 1.5rem 0 2rem;
}
@media (max-width: 996px) {
.cardGroup {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 640px) {
.cardGroup {
grid-template-columns: 1fr;
}
}
.card {
position: relative;
display: flex;
flex-direction: column;
gap: 0.75rem;
min-height: 100%;
overflow: hidden;
padding: 1.2rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
color: inherit;
text-decoration: none;
box-shadow: none;
transition: border-color 200ms ease, background-color 200ms ease;
}
.card::after {
position: absolute;
inset: 0 auto 0 0;
width: 3px;
background: var(--pc-active);
content: '';
transform: scaleY(0);
transform-origin: top;
transition: transform 200ms ease;
}
.card:hover {
border-color: var(--pc-border-strong);
text-decoration: none;
}
.card:hover::after {
transform: scaleY(1);
}
.card strong {
color: var(--pc-text);
font-family: var(--pc-font-sans);
font-size: 1rem;
font-weight: 600;
line-height: 1.3;
}
.card div {
color: var(--pc-text-secondary);
font-size: 0.92rem;
line-height: 1.55;
}
.accordion {
margin: 1rem 0;
overflow: hidden;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
}
.accordion summary {
padding: 1rem 1.15rem;
cursor: pointer;
color: var(--pc-text);
font-weight: 600;
}
.accordion > div {
padding: 0 1.15rem 1rem;
color: var(--pc-text-secondary);
}
.field {
margin: 1rem 0;
padding: 1rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-bg-alt);
}
.fieldHeader {
display: flex;
flex-wrap: wrap;
gap: 0.55rem;
align-items: center;
margin-bottom: 0.55rem;
}
.fieldHeader span {
padding: 0.18rem 0.55rem;
border-radius: var(--pc-radius-pill);
background: var(--pc-mint);
color: var(--pc-active-dark);
font-size: 0.76rem;
font-weight: 600;
}
:global(html[data-theme='dark']) .fieldHeader span {
color: #86efac;
}
.required {
background: rgba(245, 158, 11, 0.14) !important;
color: var(--pc-warning) !important;
}
.fieldBody {
color: var(--pc-text-secondary);
}
.fieldBody :global(p:last-child) {
margin-bottom: 0;
}
.tabs {
display: grid;
gap: 0.9rem;
margin: 1.25rem 0;
}
.tabPanel {
padding: 1rem 1rem 0.25rem;
border: 1px solid var(--pc-border);
border-radius: var(--pc-radius-sm);
background: var(--pc-white);
}
.tabLabel {
display: inline-flex;
margin-bottom: 0.85rem;
padding: 0.25rem 0.7rem;
border-radius: var(--pc-radius-pill);
background: var(--pc-mint);
color: var(--pc-active-dark);
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0;
}
:global(html[data-theme='dark']) .tabLabel {
color: #86efac;
}
+110
View File
@@ -0,0 +1,110 @@
import React, {type ReactNode} from 'react';
import MDXComponents from '@theme-original/MDXComponents';
import Admonition from '@theme/Admonition';
import Link from '@docusaurus/Link';
import clsx from 'clsx';
import styles from './MDXComponents.module.css';
type ChildrenProps = {
children?: ReactNode;
};
type CardProps = ChildrenProps & {
href?: string;
title?: string;
};
type AccordionProps = ChildrenProps & {
title?: string;
};
type FieldProps = ChildrenProps & {
body?: string;
header?: string;
name?: string;
path?: string;
query?: string;
type?: string;
required?: boolean;
};
function AdmonitionBlock({
children,
type,
title,
}: ChildrenProps & {
type: 'info' | 'note' | 'tip' | 'warning';
title: string;
}) {
return (
<Admonition type={type} title={title}>
{children}
</Admonition>
);
}
function CardGroup({children}: ChildrenProps) {
return <div className={styles.cardGroup}>{children}</div>;
}
function Card({children, href, title}: CardProps) {
if (!href) {
return (
<div className={styles.card}>
<strong>{title}</strong>
<div>{children}</div>
</div>
);
}
const isExternal = /^https?:\/\//.test(href);
return (
<Link className={styles.card} href={isExternal ? href : undefined} to={isExternal ? undefined : href}>
<strong>{title}</strong>
<div>{children}</div>
</Link>
);
}
function Accordion({children, title}: AccordionProps) {
return (
<details className={styles.accordion}>
<summary>{title}</summary>
<div>{children}</div>
</details>
);
}
function Field({children, body, header, name, path, query, required, type}: FieldProps) {
const label = path ?? query ?? header ?? body ?? name ?? 'field';
return (
<div className={styles.field}>
<div className={styles.fieldHeader}>
<code>{label}</code>
<span>{type ?? 'value'}</span>
{required ? <span className={styles.required}>required</span> : null}
</div>
<div className={styles.fieldBody}>{children}</div>
</div>
);
}
export default {
...MDXComponents,
Accordion,
Card,
CardGroup,
Info: (props: ChildrenProps) => <AdmonitionBlock {...props} type="info" title="Info" />,
Note: (props: ChildrenProps) => <AdmonitionBlock {...props} type="note" title="Note" />,
ParamField: (props: FieldProps) => <Field {...props} />,
ResponseField: (props: FieldProps) => <Field {...props} />,
Tabs: (props: ChildrenProps) => <div className={clsx(styles.tabs)}>{props.children}</div>,
Tab: ({children, title}: AccordionProps) => (
<section className={styles.tabPanel}>
<div className={styles.tabLabel}>{title ?? 'Tab'}</div>
{children}
</section>
),
Tip: (props: ChildrenProps) => <AdmonitionBlock {...props} type="tip" title="Tip" />,
Warning: (props: ChildrenProps) => <AdmonitionBlock {...props} type="warning" title="Warning" />,
};
+35 -5
View File
@@ -5,9 +5,35 @@ summary: Get Paperclip running in minutes
Get Paperclip running locally in under 5 minutes.
## Option 1: Docker Compose (Recommended)
## Quick Start (npx)
The fastest way to start. No Node.js install needed.
The fastest way to get started. No cloning required — just run:
```sh
npx paperclipai
```
This walks you through setup and starts the server. Open [http://localhost:3100](http://localhost:3100) when it's ready.
To **start Paperclip again later**, run:
```sh
npx paperclipai run
```
> **npx vs pnpm:** Use `npx paperclipai` to run Paperclip as an end user. The `pnpm paperclipai` command only works inside a cloned copy of the Paperclip source repo (see Local Development below). If you get a "Command not found" error, you're probably using `pnpm` outside the repo — switch to `npx`.
### Passing API keys
To enable local Claude Code or Codex agent runs, pass your API keys:
```sh
ANTHROPIC_API_KEY=sk-... OPENAI_API_KEY=sk-... npx paperclipai run
```
## Docker Compose
No Node.js install needed.
```sh
docker compose -f docker-compose.quickstart.yml up --build
@@ -15,18 +41,22 @@ docker compose -f docker-compose.quickstart.yml up --build
Open [http://localhost:3100](http://localhost:3100). That's it.
The Docker image includes Claude Code CLI and Codex CLI pre-installed for local adapter runs. Pass API keys to enable them:
Pass API keys for local adapter runs:
```sh
ANTHROPIC_API_KEY=sk-... OPENAI_API_KEY=sk-... \
docker compose -f docker-compose.quickstart.yml up --build
```
## Option 2: Local Development
## Local Development (Contributors)
This section is for contributors working on Paperclip itself. If you just want to use Paperclip, use the Quick Start above.
Prerequisites: Node.js 20+ and pnpm 9+.
```sh
git clone https://github.com/nichochar/paperclip.git
cd paperclip
pnpm install
pnpm dev
```
@@ -35,7 +65,7 @@ This starts the API server and UI at [http://localhost:3100](http://localhost:31
No Docker or external database required — Paperclip uses an embedded PostgreSQL instance by default.
## Option 3: One-Command Bootstrap
Inside the cloned repo, you can also use the one-command bootstrap:
```sh
pnpm paperclipai run
+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<rect width="32" height="32" rx="6" fill="#1a1a1a"/>
<g transform="translate(4 4)">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#f0f0f0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#f0f0f0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 333 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" stroke="#1a1a1a" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 333 B

+11
View File
@@ -0,0 +1,11 @@
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"ignoreDeprecations": "6.0"
},
"exclude": [
".docusaurus",
"build",
"node_modules"
]
}