Skip to content

chore(seo): broader crates.io framing — spend, risk, audit#31

Merged
amavashev merged 1 commit into
mainfrom
chore/seo-broader-framing
May 8, 2026
Merged

chore(seo): broader crates.io framing — spend, risk, audit#31
amavashev merged 1 commit into
mainfrom
chore/seo-broader-framing

Conversation

@amavashev
Copy link
Copy Markdown
Contributor

Summary

Cycles is the runtime authority for AI agents across three problems that observation alone can't fix: spend, risky tool actions, and audit gaps. The previous Cargo.toml description and README opening leaned on the spend dimension only, which understated what the crate actually does and missed half the search-intent keyword pool on crates.io and Google.

This PR broadens the framing — no code changes, metadata + docs only.

Changes

Cargo.toml

Field Before After
description "Rust client for the Cycles budget-management protocol — deterministic spend control for AI agents and LLM workflows" "Runtime authority for AI agents in Rust — hard limits on agent spend, risky tool actions, and audit gaps. Tokio-native client for the Cycles protocol (reserve-commit lifecycle, RAII guards)."
keywords ["cycles", "budget", "llm", "ai-agents", "cost-control"] ["ai-agents", "llm", "budget", "governance", "audit-log"]

Why the keyword swap:

  • cycles — brand-only. People who know the brand find the crate by name regardless. Wasted slot.
  • cost-control — niche compound. Low search.
  • governance — captures action-authority + compliance searches.
  • audit-log — captures audit-trail searches explicitly.
  • Kept ai-agents, llm, budget — the three highest-volume relevant search terms.

README.md

  • H1 broadened from "AI agent budget and action authority SDK" to "Runtime Authority for AI Agents (Spend, Actions, Audit)".
  • Opening section rewritten with one bullet per pillar (spend / risky actions / audit gaps) rather than leading with budget enforcement and treating the others as secondary. Surfaces the Decision model (Allow / AllowWithCaps / Deny) up front. Mentions Python / TypeScript / Spring Boot interop.

AUDIT.md

  • Date line gets a third entry noting today's metadata refresh. No behavioral or conformance changes; audit results unchanged.

Test plan

  • cargo build — clean
  • After publishing the next 0.2.x patch, verify the new description and keywords surface on https://crates.io/crates/runcycles
  • Watch crates.io download trend in the following 2-4 weeks for any signal change vs the prior 30-day baseline (~53 cumulative downloads)

Cycles is the runtime authority for AI agents across three problems
that observation alone can't fix: spend, risky tool actions, and
audit gaps. Previous metadata and README opening focused only on
the spend dimension, which understated what the crate actually does
and missed half the search-intent keyword pool.

Cargo.toml:
  description: "Rust client for the Cycles budget-management
                protocol — deterministic spend control for AI agents
                and LLM workflows"
  →            "Runtime authority for AI agents in Rust — hard
                limits on agent spend, risky tool actions, and audit
                gaps. Tokio-native client for the Cycles protocol
                (reserve-commit lifecycle, RAII guards)."

  keywords: ["cycles", "budget", "llm", "ai-agents", "cost-control"]
  →         ["ai-agents", "llm", "budget", "governance", "audit-log"]

  Why the keyword swap:
    - "cycles" is brand-only; people who know the brand will find
      the crate by name regardless. Wasted slot.
    - "cost-control" is a niche compound term with low search.
    - "governance" captures the action-authority dimension and
      compliance-adjacent searches.
    - "audit-log" captures the audit-trail dimension explicitly.
    - Kept "ai-agents", "llm", "budget" — the three highest-volume
      relevant search terms.

README.md:
  H1 broadened from "AI agent budget and action authority SDK" to
  "Runtime Authority for AI Agents (Spend, Actions, Audit)".

  Opening section rewritten to introduce all three pillars
  (spend / risky actions / audit gaps) with a short bullet for each,
  rather than leading with budget enforcement and treating the
  others as secondary. Clarifies the Decision model (Allow /
  AllowWithCaps / Deny) up front and notes that the same wire
  protocol is shared with Python / TypeScript / Spring Boot clients.

AUDIT.md:
  Date line gets a third entry noting today's metadata refresh.
  No behavioral or conformance changes; protocol audit results
  unchanged.

Verified: cargo build clean. No code changes — metadata and
documentation only.
@amavashev amavashev enabled auto-merge May 8, 2026 11:42
@amavashev amavashev merged commit cbfd4d0 into main May 8, 2026
8 checks passed
@amavashev amavashev deleted the chore/seo-broader-framing branch May 8, 2026 11:42
@amavashev amavashev mentioned this pull request May 8, 2026
4 tasks
amavashev added a commit that referenced this pull request May 8, 2026
Releases the broader crates.io framing landed in #31. No behavioral
or API changes — metadata, README, and CHANGELOG only.

  Cargo.toml: version 0.2.3 → 0.2.4
  CHANGELOG.md: new [0.2.4] - 2026-05-08 entry under "Changed"
  Cargo.lock: regenerated by cargo build with the new version

After this PR merges, push the v0.2.4 tag to trigger the automated
crates.io publish step in .github/workflows/ci.yml (on: push: tags:
["v*"] → "Publish to crates.io" job → cargo publish).

Conformance audit results unchanged from 0.2.3 (95.55% coverage,
all 9/9 endpoints + 6/6 request schemas + 10/10 response schemas
match v0.1.24 spec).
amavashev added a commit to runcycles/cycles-docs that referenced this pull request May 8, 2026
…udit

A read-only audit of quickstart/ found 8 pages framing Cycles as a
spend/budget tool, missing the other two pillars (risky tool actions
and audit gaps). Earlier today we made the same correction in the
cycles-client-rust crate metadata, README, and the related blog post
(runcycles/cycles-client-rust#31, #32, #33; #585).

This commit applies the same pattern to the public quickstart surface
using a light-touch approach:

  - Frontmatter `description` rewritten on each page to name spend +
    action + audit (replaces "budget enforcement" framing)
  - One short ::: tip ::: callout inserted near the top of each page,
    listing the three pillars with concrete primitives — caps for
    risky actions, signed events for audit
  - No title changes, no restructuring, no code-example edits

Pages updated (8):

  Light SDK pattern (4): same callout, identical except for SDK name
  - quickstart/getting-started-with-the-python-client.md
  - quickstart/getting-started-with-the-typescript-client.md
  - quickstart/getting-started-with-the-cycles-spring-boot-starter.md
  - quickstart/getting-started-with-the-rust-client.md

  MCP server (1): callout uses MCP tool names (cycles_decide,
  cycles_create_event) instead of generic primitives
  - quickstart/getting-started-with-the-mcp-server.md

  Explainer / strategy (3): same callout + small body tweaks
  - quickstart/what-is-cycles.md (one-line opener also broadened)
  - quickstart/how-to-add-hard-budget-limits-to-spring-ai-with-cycles.md
  - quickstart/how-to-choose-a-first-cycles-rollout-...md (callout adds
    a sentence noting which pillar each rollout option primarily
    addresses, since the page is about choosing scope)

Pages intentionally NOT changed (audited and judged appropriate as-is):
  - quickstart/index.md (already cross-links to /protocol/, /how-to/)
  - quickstart/end-to-end-tutorial.md (runbook format)
  - quickstart/architecture-overview-* (technical reference)
  - quickstart/deploying-* and self-hosting-* (operations focus)
  - quickstart/mcp-claude-* + cursor + windsurf (setup guides;
    existing warning correctly clarifies MCP availability ≠ enforcement)

Title and URL slug on each page intentionally preserved to keep
inbound search-link equity. The two spend-only strategy pages
(spring-ai how-to, rollout-choice) keep their existing slugs since
those are the canonical search targets for "spring ai budget limit"
and "cycles rollout" queries respectively.

Diff shape: each file gets a description swap (1 line replaced) and a
callout insertion (5-7 lines added). +59 insertions / -9 deletions
total across 8 files.

Verified:
  - 83/83 tests pass
  - npm run build succeeds (98s)
  - rendered HTML <meta name="description"> reflects new copy
  - rendered HTML contains the callout block exactly once per page
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant