Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 20:20
· 72 commits to main since this release
v0.3.0
83521e7

v0.3.0

Highlights

  • Passkeys. People with no account in your identity provider can sign in
    with a passkey. A deployment can also run with no identity provider at all.
    An administrator adds someone with keera user add <email> --passkey and
    sends them the one-time set-up link. Off unless KEERA_PASSKEYS=true. See
    docs/sso.md#passkeys.
  • The directory is asked again every 15 minutes. Keera keeps the refresh
    token from the sign-in, encrypted, and uses it while the person is active.
    Someone removed from the directory loses their sessions and keera login
    tokens within 15 minutes, not when they expire. Role changes apply in that
    time too.
  • Teams are now projects. Every key is in a project. A new organisation
    starts with one called default. A project can have a description.
  • Rename things. Operators rename organisations (keera org set --name).
    Administrators rename projects (keera project set). Anyone renames their
    own keys (keera key set). The panel has a pencil for each.
  • My clients. A new panel screen lists the clients that called with your
    keys, and which key each used. Connect client sets up a new one, with
    every model and router your key may use.
  • Simpler Claude subscription setup. An administrator issues a member a
    subscription key, and keera connect claude-code --subscription on the
    member's machine takes it over. The command respects managed settings that
    already set the gateway's address. It also writes modelOverrides and turns
    tool search back on, so Claude Code knows each model's context and features.
    See docs/subscriptions.md.

Security

  • Where the gateway may connect. KEERA_UPSTREAM_DENY lists addresses the
    gateway never sends a request to. By default: loopback, link-local (cloud
    metadata) and AWS's IPv6 metadata address. DNS names are checked by the
    address they resolve to. Redirects from backends and MCP servers are no
    longer followed. See docs/install.md#where-the-gateway-may-connect.
  • A stored model or MCP credential only goes to the hosts it was entered for.
    Moving a backend to a new host needs the key again, or --no-api-key.
  • The sign-in callback only works in the browser that started the sign-in.
  • An MCP key that may call only some tools no longer reaches the server's
    resources, prompts, completions or tasks/list.
  • MCP tool calls now count against the key's rate limits, and against budgets
    when the key has filters.
  • KEERA_METRICS_TOKEN may not be the same as the operator key.
  • Only an administrator issues keys. A member can no longer choose a key's
    lifetime when rotating it.

Panel and CLI

  • keera key create makes a key that lasts 90 days, as the panel does.
    --expires never makes one that does not expire.
  • keera key rotate asks you to type the key's name first. --yes skips that.
  • --org works on keera guardrail, limit and budget, and a project or
    key can be named by its name there.
  • Answers carry X-Keera-Budget-Scope and X-Keera-RateLimit-Scope, which say
    which level a limit comes from.
  • Users hides disabled people until you tick Show disabled.
  • Overview is now Dashboard. Buttons that create something say Add.
  • Filters, Routers, MCP and Sandboxes fold into one sidebar entry until the
    organisation uses them.
  • Claude Code's dated model ids, such as claude-haiku-4-5-20251001, reach the
    matching subscription model.
  • The binary reports the tag, the short commit, and -dirty when built from a
    changed tree.

Performance

  • Streams flush once per read from upstream rather than once per token. This
    was most of the CPU a stream cost.
  • Renaming the model in each streamed chunk no longer allocates.
  • /metrics no longer holds a lock while a slow reader reads.

Fixes

  • The live request log works with several gateway replicas.
  • The image builds from a plain clone. It writes vendor/ itself when it is
    missing.
  • Every latency histogram in /metrics now has its _sum.
  • An unknown KEERA_LOG_LEVEL or KEERA_LOG_FORMAT stops the start, instead
    of being ignored.
  • Organisation names are unique, ignoring case.
  • keera logout makes the one sign-in left the default.
  • A project or prompt can be called help.

Sandboxes

  • The podman driver is for local development and tests only. Use
    kubernetes in production.
  • The variables the gateway passes to the sandbox entrypoint are documented,
    for images that replace it.
  • Pi's version is pinned with a lock file.

Breaking changes

  • Start with a new database. The schema changed in place, so a v0.2.0
    database cannot be upgraded.
  • Team is now project, everywhere. keera team is keera project,
    --team is --project, the guardrail scope team is project, and
    keera usage --by team is --by project. In the control API, /v1/teams
    is /v1/projects and team_id is project_id.
  • A key's alias is now its name. keera key create --alias is
    --name, and so is the field in the control API.
  • Only administrators issue keys. Members ask for their first key, then
    rotate it themselves.
  • Keys from keera key create expire after 90 days unless --expires
    says otherwise.
  • The gateway no longer connects to loopback. A model on 127.0.0.1 needs
    KEERA_UPSTREAM_DENY without the loopback entries. make dev does this.
  • Scripts that rotate keys need --yes.