Skip to content

What's new in 0.17.0

In development: Python SDK rayito 0.17.0, TypeScript SDK rayito 0.17.0 and rayd 0.17.0.

0.17.0 lets you reconnect an agent fleet by its name alone, from any process, and have it behave like the fleet that was deployed: the same VMs, the same gateways and the real scaling in status. It also fixes several agent deploy bugs: URLs with credentials in the host logs, --create-secret with presets and the secret prefix, the rayito-base-caps image that had to be published by hand, and OpenCode without a project file.

Connecting with an explicit project (AgentFleet.connect(name, project=...)) works exactly as in 0.16 and makes no new call.

The fleet recipe

After the MicroVM fleet starts, deploy_agent() and rayito agent deploy save its recipe in Parameter Store (/rayito/agents/<name>/recipe): the project after the flags, the image version, the gateway presets and the scaling. It holds secret names only, never values or the access token.

from rayito import AgentFleet

fleet = AgentFleet.connect("my-agent", access_token="<fleet-token>")
print(fleet.status().scaling_source)
fleet.invoke("Hello")
import { AgentFleet } from "rayito";

const fleet = await AgentFleet.connect("my-agent", { accessToken: "<fleet-token>" });
console.log((await fleet.status()).scalingSource);
await fleet.invoke("Hello");
  • FleetStatus.scaling_source (scalingSource) says where the scaling comes from: explicit, project, recipe or default. With no project and no recipe, rayito agent status no longer makes up a min 1, max 1.
  • stop() deletes the recipe it saved or read; --keep-recipe keeps it.
  • A failure to save it is a warning with a code, never a failed deploy.

Cost and activation

It is the only feature that is on by default (ADR-034): a standard SecureString parameter has no charge, and each write or read is one KMS request inside the free tier (then $0.03 per 10,000). Turn it off with AgentDeployOptions(save_recipe=False) (saveRecipe: false, --no-save-recipe). Details and IAM in The fleet recipe.

Warm slots with their gateways

A fleet reconnected from another process used to open a warm slot without the project's gateways, so the agent started without the model gateway. Now the fleet opens them when it takes the slot, through the same path as SandboxPool.take(gateways=), and replaces the slot if it cannot. You no longer need to deploy with --warm 0. Warm slots and gateways.

--scale-in-after and Bedrock key renewal

  • rayito agent deploy --scale-in-after SECONDS (AgentDeployOptions.scale_in_after_seconds, scaleInAfterMs) sets the idle time after which a VM above min_vms is terminated.
  • Scale-in finally happens. Up to 0.16 it was a no-op: fleet VMs were created without max_lifetime/on_timeout and rayd rejected the set_timeout that ends an extra VM (the warning «no se pudo acotar la vida de un VM sobrante»). Now a fleet that can grow (max_vms > min_vms) creates all its VMs and warm slots with a logical deadline in kill mode, and PoolConfig gains optional max_lifetime and on_timeout. A fixed-size fleet is created as in 0.16. VMs created by 0.16 are not scaled in: redeploy. Scaling in, suspending and restarting.
  • --renew-gateway-keys (renew_gateway_keys, renewGatewayKeys), off by default, renews a short-term Bedrock key in the gateways with the bedrock preset. It needs the bedrock-keys extra in Python or the optional peer @aws/bedrock-token-generator in TypeScript. Only the caller turns it on: AgentFleet.connect(name) does not inherit it from the recipe (it warns recipe_renewal_ignored), and it never renews a secret that a gateway to another upstream also reads. From the CLI, rayito agent invoke <fleet> --renew-gateway-keys asks for it on reconnect. Renew the short-term Bedrock key.

rayito setup publishes rayito-base-caps

rayito setup also publishes the rayito-base-caps image that rayito agent deploy uses on MicroVM, from the same rayito-image.zip. The plan and --dry-run show the step and its cost (≈ $0.04 per week). Only with rayito setup --caps-image: it is not published by default because it costs money; if it is missing, rayito agent deploy on MicroVM says so and asks for that command. Set up AWS.

Fixes

  • Agent host logs. The httpx and httpcore loggers start at WARNING, so they no longer write each request URL with its query string (where a credential can travel). A malformed request no longer leaves an AttributeError in the log. Security.
  • --create-secret finds the key by the gateway preset (preset = "bedrock" reads AWS_BEARER_TOKEN_BEDROCK) and no longer doubles the secret prefix.
  • OpenCode without a project file uses the root AGENTS.md and the permissions in opencode.json. OpenCode without a project file.
  • --env rejects names that look like secrets (*_SECRET and the segments PASS, PASSWD, PAT, CREDENTIAL(S) too, and AUTH or BEARER at the end or next to TOKEN, KEY or HEADER) and points to --secret-env and --secret-env-from.

Changes to keep in mind

There are no breaking API changes. There is one in the CLI:

  • Breaking: rayito agent deploy --env rejects names that look like secrets, *_SECRET too, names with a PASS, PASSWD, PAT, CREDENTIAL or CREDENTIALS segment, and names with AUTH or BEARER as the last segment or next to TOKEN, KEY or HEADER (0.16 accepted them; AUTH_MODE, AUTH_URL or AUTHOR_NAME are still accepted). Migration: pass the value with --secret-env NAME=<secret> or --secret-env-from <secret>. The project's env values are stored in the recipe: nothing secret in env.
  • Cost: rayito setup --caps-image publishes rayito-base-caps, one more image version (≈ $0.04 per week); off by default.

  • The detected gateway secret changes name. 0.16 detection created it at rayito/rayito/agents/...; now it lives at rayito/agents/<project>/<provider>. If only the 0.16 one exists, the deploy reuses it. See Coming from 0.16.

  • IAM. The launcher and caller policies gain the AgentRecipe statement on parameter/rayito/agents/*: CallerPolicy with ssm:PutParameter, GetParameter and DeleteParameter, and SandboxLauncherPolicy with only GetParameter and DeleteParameter (writing the recipe amounts to deploy rights: ImagePublisherPolicy gains ssm:PutParameter). Without it, deploy and reconnect carry on with the recipe_access_denied warning. Details in IAM.
  • TypeScript: two new optional peers, @aws-sdk/client-ssm and @aws/bedrock-token-generator: the first for the recipe (without it, connecting by name behaves as in 0.16) and the second only with renewGatewayKeys.

The full detail is in the Changelog.