From 638bcc4806e5df145068bf46c55e91ff7bfeef67 Mon Sep 17 00:00:00 2001 From: Albert Mavashev Date: Wed, 6 May 2026 14:06:28 -0400 Subject: [PATCH 1/2] chore(seo): retarget PyPI metadata for category-search discovery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Python adoption side has been lagging TypeScript materially (PyPI flat for ~6 weeks pre-source-change; cycles-client-python at 157 unique GitHub cloners vs cycles-client-typescript at 288). Diagnostic showed the biggest sub-gap is discovery: Cycles doesn't rank for natural Python search queries while named competitors (AgentBudget, AgentGuard, agent-cost-guardrails) do. The brand-led PyPI description was a contributor. Three changes: 1. Description rewritten to lead with the literal category-search phrase "Python AI agent budget control" instead of the brand-led "Python client for the Cycles budget-management protocol." 2. Keywords expanded from 12 to 21, organized into three groups: category-search keywords (ai-agent, agent-budget, budget-control, cost-control, cost-enforcement, spending-limit, llm-cost, runtime-authority, action-control, multi-tenant), framework targeting (langchain, langgraph, crewai, autogen, openai-agents, mcp, openai, anthropic), and brand (cycles, runcycles). Drops `metering` (low search volume) and adds the missing framework tags. 3. Classifier added: Topic :: Scientific/Engineering :: Artificial Intelligence — standard PyPI classifier for AI/ML packages, materially improves browse-by-category discovery. Takes effect on next PyPI publish (version bump required). Suggest 0.4.0 → 0.4.1 since this is metadata-only. Companion change: GitHub topics already updated separately (governance dropped, mcp added) to mirror cycles-client-typescript's topic set. --- pyproject.toml | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 675c41c..65381f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,22 +5,34 @@ build-backend = "hatchling.build" [project] name = "runcycles" version = "0.4.0" -description = "Python client for the Cycles budget-management protocol" +description = "Python AI agent budget control — enforce LLM cost limits, tool permissions, and multi-tenant policies before agent actions execute." readme = "README.md" license = "Apache-2.0" requires-python = ">=3.10" keywords = [ - "cycles", - "budget", + # Category-search keywords (lead with these — what people actually type) + "ai-agent", + "agent-budget", + "agent-governance", + "budget-control", "cost-control", - "metering", - "ai", - "llm", - "agents", - "governance", + "cost-enforcement", + "spending-limit", + "llm-cost", + "runtime-authority", + "action-control", + "multi-tenant", + # Framework-specific (the integrations we want to surface for) + "langchain", + "langgraph", + "crewai", + "autogen", + "openai-agents", + "mcp", "openai", "anthropic", - "langchain", + # Brand + "cycles", "runcycles", ] classifiers = [ @@ -32,6 +44,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Software Development :: Libraries", + "Topic :: Scientific/Engineering :: Artificial Intelligence", "Framework :: AsyncIO", "Typing :: Typed", ] From 5735896e85e3174b303c04e1ee59de746e789171 Mon Sep 17 00:00:00 2001 From: Albert Mavashev Date: Wed, 6 May 2026 14:11:43 -0400 Subject: [PATCH 2/2] chore: bump version to 0.4.1 + CHANGELOG / AUDIT entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Metadata-only release. Bumps pyproject.toml version 0.4.0 → 0.4.1 and adds the corresponding CHANGELOG and AUDIT.md entries for the PyPI discovery-metadata refresh shipped earlier in this branch. No code, no test, no protocol changes — wire format and public API are identical to 0.4.0. Ready for `python -m build` + `twine upload` on merge. --- AUDIT.md | 15 +++++++++++++++ CHANGELOG.md | 9 +++++++++ pyproject.toml | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/AUDIT.md b/AUDIT.md index 3c50900..79ab246 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -224,3 +224,18 @@ Widened the `@cycles` decorator to accept callables — in addition to constants - **Signature change:** `_build_reservation_body` now takes `args` and `kwargs` parameters; both `CyclesLifecycle.execute` and `AsyncCyclesLifecycle.execute` thread them through. Protocol conformance: No protocol or wire-format changes. The reservation request body shape is unchanged — only the source of each field's value is widened. Verified by new unit tests in `TestCallableSubjectFields`, `TestCallableActionFields`, `TestCallableDimensions` plus an end-to-end decorator test asserting the captured request body. + +## PyPI Metadata Refresh (added 2026-05-08) + +**Files:** `pyproject.toml` +**Version:** 0.4.1 + +Metadata-only release retargeting the package for category-search discovery on PyPI. No code, no test, no protocol changes — wire format and API are identical to 0.4.0. + +- **Description rewritten** to lead with the literal category-search phrase: `"Python AI agent budget control — enforce LLM cost limits, tool permissions, and multi-tenant policies before agent actions execute."` +- **Keywords expanded 12 → 21**, organized into category-search terms (`ai-agent`, `agent-budget`, `budget-control`, `cost-control`, `cost-enforcement`, `spending-limit`, `llm-cost`, `runtime-authority`, `action-control`, `multi-tenant`), framework targeting (`langchain`, `langgraph`, `crewai`, `autogen`, `openai-agents`, `mcp`, `openai`, `anthropic`), and brand (`cycles`, `runcycles`). +- **Classifier added:** `Topic :: Scientific/Engineering :: Artificial Intelligence`. + +Driven by Python-side adoption diagnostic finding the biggest sub-gap was discovery, not SDK feature parity. Companion changes: GitHub topics on this repo (`governance` dropped, `mcp` added) and Python framework integration guide retitling on `runcycles/docs` (PR #568). + +Protocol conformance: No protocol or wire-format changes. Existing test suite at 100% coverage; no test additions. diff --git a/CHANGELOG.md b/CHANGELOG.md index 4299eb6..1a1ab1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.4.1] - 2026-05-08 + +PyPI metadata refresh for category-search discovery. No code changes; package wire format and API are identical to 0.4.0. + +### Changed + +- `pyproject.toml`: rewrote `description` to lead with the literal category-search phrase ("Python AI agent budget control — enforce LLM cost limits, tool permissions, and multi-tenant policies before agent actions execute"). Expanded `keywords` from 12 to 21, organized into category-search terms, framework targeting (`langgraph`, `crewai`, `autogen`, `openai-agents`, `mcp`, etc.), and brand. Added `Topic :: Scientific/Engineering :: Artificial Intelligence` classifier for PyPI browse-by-category surfacing. + ## [0.4.0] - 2026-04-27 Dynamic subject and action fields on the `@cycles` decorator. @@ -120,6 +128,7 @@ Initial public release. - Comprehensive error handling and improved API model validation (#1) +[0.4.1]: https://github.com/runcycles/cycles-client-python/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/runcycles/cycles-client-python/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/runcycles/cycles-client-python/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/runcycles/cycles-client-python/compare/v0.1.3...v0.2.0 diff --git a/pyproject.toml b/pyproject.toml index 65381f3..ca55d8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "runcycles" -version = "0.4.0" +version = "0.4.1" description = "Python AI agent budget control — enforce LLM cost limits, tool permissions, and multi-tenant policies before agent actions execute." readme = "README.md" license = "Apache-2.0"