diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 6d731e73..618b430b 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -230,15 +230,6 @@ export default defineConfig({ nav: [ { text: 'Why Cycles', link: '/why-cycles' }, { text: 'Quickstart', link: '/quickstart/what-is-cycles' }, - { text: 'Protocol', link: '/protocol/' }, - { - text: 'Tools', - items: [ - { text: 'All tools', link: '/calculators/' }, - { text: 'Blast Radius Risk Calculator', link: '/calculators/ai-agent-blast-radius-standalone' }, - { text: 'Cost Calculator (Claude vs GPT)', link: '/calculators/claude-vs-gpt-cost-standalone' }, - ], - }, { text: 'Docs', items: [ @@ -258,6 +249,7 @@ export default defineConfig({ items: [ { text: 'API Reference (Interactive)', link: '/api/' }, { text: 'Admin API (Interactive)', link: '/admin-api/' }, + { text: 'Protocol Reference (Interactive)', link: '/protocol/' }, { text: 'Protocol Spec', link: 'https://github.com/runcycles/cycles-protocol' }, { text: 'Configuration', link: '/configuration/python-client-configuration-reference' }, ], @@ -272,10 +264,23 @@ export default defineConfig({ }, ], }, + { + text: 'Tools', + items: [ + { text: 'All tools', link: '/calculators/' }, + { text: 'Blast Radius Risk Calculator', link: '/calculators/ai-agent-blast-radius-standalone' }, + { text: 'Cost Calculator (Claude vs GPT)', link: '/calculators/claude-vs-gpt-cost-standalone' }, + ], + }, + { text: 'Pricing', link: '/pricing' }, { text: 'Blog', link: '/blog/' }, - { text: 'Partners', link: '/design-partners' }, - { text: 'Contact', link: '/contact' }, - { text: 'GitHub', link: 'https://github.com/runcycles' } + { + text: 'Contact', + items: [ + { text: 'Talk to the team', link: '/contact' }, + { text: 'Become a design partner', link: '/design-partners' }, + ], + }, ], sidebar: { '/api/': [ @@ -608,7 +613,7 @@ export default defineConfig({ ], }, socialLinks: [ - { icon: 'github', link: 'https://github.com/runcycles/cycles-docs' } + { icon: 'github', link: 'https://github.com/runcycles' } ] }, transformPageData(pageData) { diff --git a/.vitepress/theme/HomeContact.vue b/.vitepress/theme/HomeContact.vue index deca4849..a251ae46 100644 --- a/.vitepress/theme/HomeContact.vue +++ b/.vitepress/theme/HomeContact.vue @@ -123,6 +123,7 @@ const issuesUrl = 'https://github.com/runcycles/cycles-docs/issues' .reason { display: flex; flex-direction: column; + margin: 0; /* override .vp-doc `li + li` margin when rendered inside markdown */ padding: 16px 18px; border: 1px solid var(--vp-c-divider); border-radius: 10px; @@ -181,6 +182,8 @@ const issuesUrl = 'https://github.com/runcycles/cycles-docs/issues' .cta-button:hover { background: var(--vp-c-brand-2); + color: var(--vp-c-bg); + text-decoration: none; } .cta-button:active { diff --git a/.vitepress/theme/Pricing.vue b/.vitepress/theme/Pricing.vue new file mode 100644 index 00000000..ceafaf5a --- /dev/null +++ b/.vitepress/theme/Pricing.vue @@ -0,0 +1,401 @@ + + + + + diff --git a/.vitepress/theme/SiteFooter.vue b/.vitepress/theme/SiteFooter.vue index 855e7db0..20a3c9ba 100644 --- a/.vitepress/theme/SiteFooter.vue +++ b/.vitepress/theme/SiteFooter.vue @@ -4,6 +4,7 @@ const links = [ { text: 'Security', href: '/security' }, { text: 'Tools', href: '/calculators/' }, { text: 'Blog', href: '/blog/' }, + { text: 'Pricing', href: '/pricing' }, { text: 'Changelog', href: '/changelog' }, { text: 'Contact', href: '/contact' }, { text: 'GitHub', href: 'https://github.com/runcycles', external: true }, diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 483ff541..e8280728 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -24,6 +24,8 @@ import NetworkZones from './NetworkZones.vue' import AdoptionLadder from './AdoptionLadder.vue' import CostCalculator from './CostCalculator.vue' import BlastRadiusCalculator from './BlastRadiusCalculator.vue' +import Pricing from './Pricing.vue' +import HomeContact from './HomeContact.vue' export default { extends: DefaultTheme, @@ -47,6 +49,8 @@ export default { app.component('AdoptionLadder', AdoptionLadder) app.component('CostCalculator', CostCalculator) app.component('BlastRadiusCalculator', BlastRadiusCalculator) + app.component('Pricing', Pricing) + app.component('HomeContact', HomeContact) }, setup() { const route = useRoute() diff --git a/pricing.md b/pricing.md new file mode 100644 index 00000000..93ff5c25 --- /dev/null +++ b/pricing.md @@ -0,0 +1,55 @@ +--- +title: "Pricing" +description: "Cycles is Apache 2.0 open-source software — self-host it for free. Paid plans add support, implementation help, and compliance-readiness assurance. No license fees, no seat fees, no percentage of agent spend." +--- + +# Pricing + +**Self-host Cycles for free. Pay only when you want our people involved.** No license key, no seat fees, and no percentage of agent spend. + +Today, paid plans support self-hosted Cycles deployments. A managed cloud (RunCycles.io) is planned but [not yet available](#managed-cloud-coming). + +## How pricing works + +- **Apache 2.0 open-source software.** Cycles is Apache 2.0 open-source software. Self-host it for free. Paid plans do not unlock hidden features; they add support, implementation help, and assurance. No license key, no feature gating, no seat fees. +- **No agent-spend tax.** We never take a percentage of your model, tool, or agent spend. Support pricing is flat and independent of tokens, requests, agents, tenants, or downstream provider spend — the opposite of gateways that bill a cut of every call. +- **You pay for humans and guarantees, not bits.** Response targets, expert integration help, and compliance-readiness evidence are the product. The software stays free. + + + +## Design partners are a separate track + +The [Design Partner program](/design-partners) is not a pricing tier. It's a small, selective, **free** cohort: founder access and priority support during a 60-day integration window, in exchange for running a real workload, pushing us hard on what's missing, and an opt-in public artifact. Paid support is for teams that want guaranteed response and expert help **without** the design-partner commitments — or who are outside or past the cohort. + +Running a real multi-tenant workload and willing to shape the next two protocol releases? [Apply to become a design partner →](/design-partners) + +## Managed cloud — coming {#managed-cloud-coming} + +A fully managed Cycles (RunCycles.io) is on the roadmap: we run Redis, the runtime, the admin server, and the events service, on a SOC 2 track, so you don't have to. It is **planned but not yet available** — until then, every paid plan above supports your self-hosted deployment. + +Join the managed-cloud waitlist → + +## Frequently asked + +**Is the software really free?** +Yes — Apache 2.0, no feature gating, no license key. Paid plans add support and assurance, not capabilities. + +**Do you take a cut of our agent spend?** +No. We never take a percentage of your model, tool, or agent spend. Support pricing is flat and independent of usage. + +**Do I need a support plan to run in production?** +No. Many teams run self-hosted on community support. Paid plans are for guaranteed response and expert help. Note that Production support covers the Cycles deployment — not building or operating your agent application. + +**How is a support plan different from the design partner program?** +The [design partner program](/design-partners) is free, selective, and feedback-for-access: you run a real workload and shape the roadmap. A support plan is open to anyone, gives you a defined response target, and carries no feedback or co-marketing obligation. + +**Can a services engagement turn into a subscription?** +Yes. A Production Readiness Review or an Integration Sprint commonly precedes a Production support plan. + +**What about managed cloud?** +It's on the roadmap. [Join the waitlist](#managed-cloud-coming). + +**How do you bill?** +Subscriptions are billed annually. Services are 50% on start and 50% on delivery, or net-30. + +