Stability policy

June 15, 2026 · View on GitHub

Every AgentsKit package declares a stability tier in its package.json under the agentskit field:

{
  "name": "@agentskit/core",
  "agentskit": {
    "stability": "stable",
    "stabilityNote": "Sacred package. Contract-stable per ADRs 0001-0006."
  }
}

Each package's README.md displays a corresponding badge at the top.

The three tiers

stable

Safe for production. Breaking changes require a major version bump and a deprecation cycle.

  • API is frozen at the minor level — we will not break public exports in a minor or patch release
  • Contracts are pinned to ADRs — any contract change needs a new ADR and coordinated major bump of all affected packages
  • Deprecation path required — a deprecated API remains available for at least one minor release before removal
  • Changesets describe every user-facing change explicitly

beta

Usable in production, but expect some rough edges and occasional breaking changes between minor versions.

  • Public API shape may still be adjusted as real usage teaches us
  • Breaking changes land in minor bumps with migration notes in the CHANGELOG (not a major bump — that's reserved for stable contracts)
  • Contracts derived from ADRs are respected; conveniences and helpers around them are still evolving
  • Semver-within-tier: within 0.x, a minor bump can break beta packages; a patch bump cannot

alpha

Early, promising, and still moving. Expect API changes as the package sharpens.

  • Anything may change in any release — including removal
  • No deprecation guarantees
  • Useful for exploring a design before committing to a contract
  • A package stays alpha until it either graduates to beta or is removed

Current tier map

This table is the single source of truth. A gate (check-stability-tier) asserts every package's package.json tier matches its row here, and check-readme-badge asserts each README badge matches too — so this table, the package metadata, and the badges can never drift apart.

PackageTierRationale
@agentskit/corestableSacred package. Contract-stable per ADRs 0001–0006; the only package past v1.0
@agentskit/adaptersbetaAdapter contract is stable; promotion to stable pending an API-freeze RFC + 1.0.0 bump
@agentskit/runtimebetaReAct loop is solid; topology and durable APIs settling toward an RFC freeze
@agentskit/toolsbetaCore tools usable in production; integrations and MCP ergonomics still evolving
@agentskit/memorybetaMain backends working; vector-store surface sharpening toward freeze
@agentskit/skillsbetaSkill contract proven; strongest stable candidate, pending promotion RFC
@agentskit/observabilitybetaObserver contract stable; integration coverage growing
@agentskit/reactbetaProduction-ready; the shared ChatReturn surface is still tracked toward 1.0
@agentskit/inkbetaTerminal UI strong; parity and keyboard UX still being refined
@agentskit/clibetaCore commands useful now; programmatic surface large and still settling
@agentskit/ragbetaRetriever contract (ADR 0004) shipped; chunking/reranking defaults still moving
@agentskit/evalbetaReplay + suite concepts in place; multi-subpath surface not frozen yet
@agentskit/sandboxbetaE2B backend works; fallback and policy APIs still maturing
@agentskit/templatesbetaAuthoring toolkit usable; scaffolding surface still expanding
@agentskit/validationbetaArgsValidator contract stable (ADR-0008); Ajv-backed, tiny surface
@agentskit/eval-braintrustbetaScorer API stable; Braintrust SDK peer-resolved at runtime
@agentskit/observability-langfusebetaAdapter contract stable; Langfuse SDK peer-resolved at runtime
@agentskit/integrationsalphaDescriptor + registry contract in place; catalog and OSS/AKOS split still being decided
@agentskit/mcpalphaMCP server bridge works; export + CLI surface still settling
@agentskit/vuebetaFirst binding at full headless component parity with React; useChat + 7 primitives, 100% component coverage
@agentskit/sveltebetaAt headless component parity with React (Svelte 5 runes); createChatStore + 8 components
@agentskit/solidbetaAt headless component parity with React (Solid JSX, data-ak-*); useChat + 8 components, 100% component coverage
@agentskit/react-nativebetaHeadless component parity with React via RN primitives (testID-keyed); useChat + 8 components, 100% component coverage
@agentskit/angularbetaService + 8 headless standalone components at React parity (JIT; AOT/ng-packagr build tracked); Signals + RxJS surface

Until v1.0.0

AgentsKit is pre-1.0 at the project level while every package is tier-declared individually. That is intentional: the substrate (core + the six ADR contracts) has stable semantics today, and we want to mark the packages implementing them honestly — but the project as a whole hasn't yet passed the version-1 commitment threshold (long-running public use, external contributors in steady state, stabilized CI gates).

Reaching v1.0.0 means:

  • All six core contracts have at least one external consumer outside our repo
  • The CI gates (bundle size, coverage) have held for two full sprints without regression
  • A public commitment to the semver discipline above is documented and honored — see SEMVER-COMMITMENT.md

Progress against these three criteria + cross-framework binding parity is tracked in V1-READINESS-TRACKER.md.

How to change a tier

  • alphabeta: open a PR that updates package.json.agentskit.stability, the README badge, and explains in the PR what changed to earn the bump. No RFC needed.
  • betastable: requires an RFC and at least one minor release where the package operated at beta without breaking changes. The RFC documents the public API surface being committed to.
  • stablebeta or lower: requires an RFC and a major version bump of the package. Do not demote a stable package lightly.

How consumers should read this

If a package is stable, pin it with ^x.y.z and trust the minor-bump contract. If it's beta, use ~x.y.z if you're conservative, or accept minor bumps may break you. If it's alpha, pin exact and read the changelog on every update.

References

  • This policy lives at /docs/STABILITY.md
  • Cross-referenced from the Manifesto (principle 1 — "the core is a promise") and from every package README badge
  • Related ADRs: 0001 Adapter, 0002 Tool, 0003 Memory, 0004 Retriever, 0005 Skill, 0006 Runtime