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
4 changes: 4 additions & 0 deletions .vitepress/theme/Layout.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import DefaultTheme from 'vitepress/theme'
import { useData } from 'vitepress'
import NotFound from './NotFound.vue'
import HomeCodeSnippet from './HomeCodeSnippet.vue'
import TrustStrip from './TrustStrip.vue'
import BlogPost from './BlogPost.vue'
import BlogPostNav from './BlogPostNav.vue'
import PageFeedback from './PageFeedback.vue'
Expand All @@ -14,6 +15,9 @@ const { frontmatter } = useData()

<template>
<Layout>
<template #home-hero-info-after>
<TrustStrip v-if="frontmatter.layout === 'home'" />
</template>
<template #home-features-before>
<HomeCodeSnippet v-if="frontmatter.layout === 'home'" />
</template>
Expand Down
67 changes: 67 additions & 0 deletions .vitepress/theme/TrustStrip.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<script setup>
</script>

<template>
<div class="trust-strip">
<div class="trust-badges">
<a href="https://pypi.org/project/runcycles/" target="_blank" rel="noopener" aria-label="runcycles on PyPI">
<img src="https://img.shields.io/pypi/dm/runcycles?label=PyPI&color=00C9A7&style=flat-square" alt="PyPI downloads" loading="lazy" />
</a>
<a href="https://www.npmjs.com/package/runcycles" target="_blank" rel="noopener" aria-label="runcycles on npm">
<img src="https://img.shields.io/npm/dm/runcycles?label=npm&color=00C9A7&style=flat-square" alt="npm downloads" loading="lazy" />
</a>
<a href="https://www.npmjs.com/package/@runcycles/mcp-server" target="_blank" rel="noopener" aria-label="MCP Server on npm">
<img src="https://img.shields.io/npm/dm/@runcycles/mcp-server?label=MCP%20Server&color=00C9A7&style=flat-square" alt="MCP Server downloads" loading="lazy" />
</a>
<a href="https://github.com/runcycles/cycles-protocol" target="_blank" rel="noopener" aria-label="Apache 2.0 license">
<img src="https://img.shields.io/badge/license-Apache%202.0-48484A?style=flat-square" alt="Apache 2.0" loading="lazy" />
</a>
<a href="https://github.com/runcycles/cycles-protocol" target="_blank" rel="noopener" aria-label="Open protocol">
<img src="https://img.shields.io/badge/protocol-open-48484A?style=flat-square" alt="Open Protocol" loading="lazy" />
</a>
</div>
</div>
</template>

<style scoped>
.trust-strip {
display: flex;
justify-content: center;
padding: 16px 24px 0;
}

.trust-badges {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 8px;
}

.trust-badges a {
display: inline-flex;
text-decoration: none;
transition: opacity 0.2s;
}

.trust-badges a:hover {
opacity: 0.8;
}

.trust-badges img {
height: 20px;
}

@media (max-width: 640px) {
.trust-strip {
padding: 12px 16px 0;
}

.trust-badges {
gap: 6px;
}

.trust-badges img {
height: 18px;
}
}
</style>
15 changes: 15 additions & 0 deletions how-to/ecosystem.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,20 +109,35 @@ Connect Cycles to OpenClaw for budget-controlled multi-agent orchestration.

### Python Client

[![PyPI downloads](https://img.shields.io/pypi/dm/runcycles?label=downloads&color=00C9A7&style=flat-square)](https://pypi.org/project/runcycles/)

The official Cycles Python client. Install from PyPI and start enforcing budgets in minutes.

- [runcycles on PyPI](https://pypi.org/project/runcycles/)
- [Python quickstart](/quickstart/getting-started-with-the-python-client)

### TypeScript Client

[![npm downloads](https://img.shields.io/npm/dm/runcycles?label=downloads&color=00C9A7&style=flat-square)](https://www.npmjs.com/package/runcycles)

The official Cycles TypeScript client for Node.js and browser environments.

- [runcycles on npm](https://www.npmjs.com/package/runcycles)
- [TypeScript quickstart](/quickstart/getting-started-with-the-typescript-client)

### MCP Server

[![npm downloads](https://img.shields.io/npm/dm/@runcycles/mcp-server?label=downloads&color=00C9A7&style=flat-square)](https://www.npmjs.com/package/@runcycles/mcp-server)

The Cycles MCP server exposes runtime authority as tools for Claude Desktop, Claude Code, Cursor, and Windsurf.

- [@runcycles/mcp-server on npm](https://www.npmjs.com/package/@runcycles/mcp-server)
- [MCP quickstart](/quickstart/getting-started-with-the-mcp-server)

### Spring Boot Starter

[![Maven Central](https://img.shields.io/maven-central/v/io.runcycles/cycles-client-java-spring?label=Maven%20Central&color=00C9A7&style=flat-square)](https://central.sonatype.com/artifact/io.runcycles/cycles-client-java-spring)

Auto-configured Cycles integration for Spring Boot applications, available on Maven Central.

- [cycles-client-java-spring on Maven Central](https://central.sonatype.com/artifact/io.runcycles/cycles-client-java-spring)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ description: "Integrate budget enforcement into Spring Boot apps using the @Cycl

# Getting Started with the Cycles Spring Boot Starter

[![Maven Central](https://img.shields.io/maven-central/v/io.runcycles/cycles-client-java-spring?label=Maven%20Central&color=00C9A7&style=flat-square)](https://central.sonatype.com/artifact/io.runcycles/cycles-client-java-spring)

The Cycles Spring Boot Starter provides a declarative way to add budget enforcement to any Spring application.

Instead of manually calling the Cycles API for every reservation, commit, and release, the starter provides an `@Cycles` annotation that handles the full lifecycle automatically.
Expand Down
2 changes: 2 additions & 0 deletions quickstart/getting-started-with-the-mcp-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ description: "Add budget enforcement to Claude Desktop, Claude Code, Cursor, Win

# Getting Started with the Cycles MCP Server

[![npm downloads](https://img.shields.io/npm/dm/@runcycles/mcp-server?label=MCP%20Server%20downloads&color=00C9A7&style=flat-square)](https://www.npmjs.com/package/@runcycles/mcp-server)

The Cycles MCP Server gives any MCP-compatible AI agent runtime authority. Instead of integrating an SDK into your application code, you add the MCP server to your agent's tool configuration and the agent gets direct access to budget tools — reserve, commit, release, check balance, and more.

This is the fastest way to add budget awareness to an AI agent. One config change, zero code changes.
Expand Down
2 changes: 2 additions & 0 deletions quickstart/getting-started-with-the-python-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ description: "Add budget enforcement to Python apps using the runcycles package

# Getting Started with the Python Client

[![PyPI downloads](https://img.shields.io/pypi/dm/runcycles?label=PyPI%20downloads&color=00C9A7&style=flat-square)](https://pypi.org/project/runcycles/)

The `runcycles` Python package provides both a `@cycles` decorator and a programmatic `CyclesClient` for adding budget enforcement to any Python application.

The decorator wraps any function in a reserve → execute → commit lifecycle:
Expand Down
2 changes: 2 additions & 0 deletions quickstart/getting-started-with-the-typescript-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ description: "Add budget enforcement to Node.js apps using the runcycles TypeScr

# Getting Started with the TypeScript Client

[![npm downloads](https://img.shields.io/npm/dm/runcycles?label=npm%20downloads&color=00C9A7&style=flat-square)](https://www.npmjs.com/package/runcycles)

The `runcycles` TypeScript package provides a `withCycles` higher-order function, a `reserveForStream` streaming adapter, and a programmatic `CyclesClient` for adding budget enforcement to any Node.js application.

The `withCycles` HOF wraps any async function in a reserve → execute → commit lifecycle:
Expand Down
Loading