August 15, 2026 — Tightened CORS preflight header advertisement
- Cross-origin preflight responses now advertise only the request headers a browser client sends (
authorization,content-type,mcp-session-id,x-ara-org-slug,x-ara-trace-id,accept). Operator and inbound-webhook signing headers, which are only used on server-to-server routes that never preflight, are no longer disclosed.
August 15, 2026 — Secret access auditing and write-only immutability
- Secret access is now tracked in audit logs: decrypting secrets for a session run or
brokered connector invocation emits a canonical
secret.accessedaudit event with the exact secret names and target run/connector scope. - Workspace secrets support an immutable
revealableflag (defaulting tofalsefor new secrets). Write-only secrets (revealable: false) cannot be escalated back to revealable once stored, and their plaintext values are never disclosed on reveal endpoints. - Relay egress observation mode is active for org-MCP and vendor broker relays, recording destination origin/host and allowlist verification telemetry on every outbound request without disrupting active integrations.
August 12, 2026 — Per-organization memory for new cloud machines
- A cloud sandbox’s writable filesystem is RAM-backed at roughly half its memory,
so a box’s memory is also its disk ceiling.
BLAXEL_SANDBOX_ORG_MEMORY_MBnow acceptsorgId:mbpairs and sizes newly provisioned machines for those organizations, for repositories whose dependency tree does not fit the default. - An explicit memory request is now clamped at the real 32 GB per-machine cap rather than the 16 GB large-repository tier. A request above the old ceiling was silently halved, so a machine asked for at 32 GB came up at 16 GB.
- This applies only when a machine is CREATED. A persistent box is reused by name and keeps the size it was born with, so an existing machine takes the new size at its next reset.
August 12, 2026 — Retry a session on a different model over REST
POST /v3/organizations/{org}/sessions/{id}/messagesnow accepts optionalmodelandreasoning_effort, so a stalled or failed session can be retried on a different model through the REST API. Previously only the MCP tools could do this: REST accepted the fields and silently ignored them, returning200with the session still on its original model.- A model override always starts a new continuation run, because a run’s model is fixed at its first execution. Omitting both fields preserves today’s behavior exactly.
- Both surfaces now validate through one resolver, so an id accepted on one is
accepted on the other. An unusable override is refused with
400(invalid_model/invalid_reasoning_effort) instead of being dropped. - An override is refused with
409 model_override_requires_finished_sessionwhile the session is still queued or running, because switching models requires a new continuation run and a live run would have kept its original model. Send the message without an override to steer a live session. - An overridden model is credential-checked before the message is stored, so a
model whose provider credential is disconnected returns the actionable
agent_model_key_missinginstead of a run that dies when a worker picks it up.
August 11, 2026: Sessions cannot give an MCP server a command to run
- A running session can no longer create or update an organization MCP server that
uses
stdiotransport, or that supplies acommand. It getsmcp_server_command_requires_human. Add those in workspace settings instead. - Everything else is unchanged. A session can still connect, update and disconnect
httpandsseservers, supply write-only secrets for them, toggle them on and off, and use every tool a configured server exposes. The one-click plugin flow is unaffected. - External principals are unaffected: your API keys, the
araCLI, the Ara MCP server you connect from your machine, and workspace settings can all still add a stdio server. - Why: a stdio server’s
commandis executed by Ara inside your later sessions, and a new server applies to your workspace by default. Repo content and issue text can influence an agent, so choosing what gets executed belongs to a person.
August 11, 2026: Sessions ask for secrets instead of storing them
- A running session can no longer store or delete a secret.
ara_secret_setandara_secret_deleteare now available only to external principals: your own API keys, thearaCLI, and the Ara MCP server you connect from your machine. A session that tries getssecret_write_requires_human. - Sessions can still LIST secret names, and still use every secret the workspace has. Only storing a value changed.
- When an agent needs a credential it does not have, it calls
request_secret, which shows an “Add secret” card in the session with the exact variable name and why it is needed. You supply the value and it reaches the agent’s next turn. Nothing about that flow changed; it is now the only route. - Why: a stored secret applies to every later session in the workspace, so a session that can store one can change what all your future sessions trust. Repo content and issue text can influence an agent, so that decision belongs to a person. Existing secrets, and writes from the dashboard or your API keys, are unaffected.
August 11, 2026: Reserved secret names, and mid-session secret delivery
- Secret writes now refuse names that control how a later process loads code or
resolves the program it runs, because a stored secret is re-applied to every
later session in the workspace.
POST /v3/organizations/{org}/secretsreturnsinvalid_secret_nameforBASH_ENV,ENV,PATH,NODE_OPTIONS,PYTHONPATH,RUBYOPT,JAVA_TOOL_OPTIONS, git’s own hooks such asGIT_SSH_COMMANDandGIT_PAGER, and anything starting withLD_,DYLD_,GIT_CONFIG, orBASH_FUNC_. Set these from your repository’s own scripts instead, where they apply only to the commands you intend. - A value already stored under one of those names is no longer applied to new sessions. Delete it and, if you still need it, set it from your repository setup instead. Deleting such a name continues to work.
- Names that point a tool at a different server are unaffected, so private
registries and proxies keep working:
NPM_CONFIG_REGISTRY,PIP_INDEX_URL,HTTPS_PROXY, and custom CA bundles are all still accepted. - Adding, changing, or deleting a workspace secret now reliably reaches sessions that are already running, so an agent’s next command sees it without waiting for a new session. Sessions using a persistent workspace previously kept the value they started with until their next session.
August 10, 2026: Organization secrets and optional usage notes
- Secret list, set, and delete operations accept
scope: organizationfor workspace-wide secrets. These secrets are available to runs throughout the workspace rather than being stored per repository. - Secret writes accept an optional
note. Use it to tell Ara or teammates how to use a secret, and include a repository name when the value is intended for one codebase. Lists return the note but never return the secret value. - The former
reposcope remains a compatibility alias. Its repository fields are accepted but ignored, and the stored secret is organization-wide. Add useful repository context tonote. Personalusersecrets are unchanged. GET /v3/organizations/{org}/setup-helperhas been removed. Its deprecated empty compatibility payload no longer exists; start a repository-optional session and describe the device or codebase instead.- The old repository Environment blueprint, image-build, required-plugin,
authored setup-script, and readiness storage has also been removed. Connected
repository access, workspace secrets, native
.ara/runbook.md, and plugin connections remain independent capabilities that an agent can use during a task; none is a session-start prerequisite. - The internal
environment_not_readyrun status has been retired. Historical rows are normalized toinfra_error; new sessions are never blocked on repository setup, keys, plugins, or readiness metadata.
August 9, 2026: Session-scoped environment variables on create
POST /v3/organizations/{org}/sessionsaccepts an optionalenvobject of environment variables for that session only. They are injected into the agent’s shell alongside your repository and account secrets, override both on a name collision, and follow the session across follow-up messages (continuation turns see the same environment). Nothing is written to your organization’s secret stores.- Names must be valid shell environment names (
^[A-Za-z_][A-Za-z0-9_]*$) and may not use reserved inference names such asOPENAI_API_KEYorANTHROPIC_API_KEY; violations return400 invalid_env. At most 64 variables, 32 KB per value, 256 KB total. - Values are write-only: encrypted at rest, never returned by any read endpoint, and redacted from logs and transcripts, matching the secrets API’s write-only philosophy.
August 8, 2026: Guardrails gain merge-policy fields
- The
Guardrailsobject onGET/PUT/v3/organizations/{org}/repositories/{owner}/{repo}/guardrailsgains three optional fields:auto_merge_protected_paths(newline-separated globs whose matches require a standing human approval before an unattended merge),auto_merge_max_changed_lines(0 disables the size limit), andauto_merge_delete_branch(post-merge source-branch cleanup; forks and branches other open pull requests target are never deleted). Additive and optional, so existing clients are unaffected.
August 8, 2026 — Point a session at a branch, a pull request, or a ref
POST /v3/organizations/{org}/sessionsaccepts three new, mutually-exclusive start targets. Set at most one; setting more than one returns400 conflicting_target, and absence keeps the previous behavior (a freshara/agent/*branch off the default that opens a new pull request).branch: check out an existing branch and commit onto it (created off the default branch if it does not exist yet).pr_number: continue an existing GitHub pull request. The agent checks out its head branch and commits land back on the pull request, with no new one opened. The pull request is validated at create time: an unknown number is404 pr_not_found, a closed or merged one is409 pr_not_open, and a pull request whose head is on a fork is422 pr_head_is_fork(the app cannot push there). GitLab is not yet supported for this field.ref: snapshot a commit SHA, tag, or branch. The agent starts a fresh working branch from that ref and opens a new pull request. The ref is resolved to an immutable commit at create time, so an unknown ref is404 ref_not_found, and abbreviated SHAs and moving branches/tags are pinned to the revision you requested rather than whatever the tip is when the run starts.
- A malformed or blank
branch/refreturns400 invalid_branch/400 invalid_ref. Abranchpointing at a protected branch (the default,main, ormaster) returns422 branch_protected, because the agent cannot push there.
August 8, 2026: Loop-configured session creates fail fast while Loop is unavailable
POST /v3/organizations/{org}/sessionswithlong_running_enabled: truenow returns400 invalid_requestat admission while Loop mode is unavailable on the current runtime. Previously the session was accepted and queued, then failed at execution withharness1_pi_long_running_not_supported.- The request fields themselves are unchanged; nothing changes for sessions that
do not set
long_running_enabled.
August 8, 2026 — Repo-scoped secret writes from an agent run require owner or admin
- An agent run writing a repository-scoped secret through Ara’s own MCP surface
now requires the run’s user to be an owner or admin of the workspace, matching
the rule already enforced on
/v3and in the web app. A repo secret is pushed into every running session for that repository, so it is workspace configuration rather than a per-run setting. - Listing secret names is unchanged, and a run can still manage the caller’s own user-scoped secrets.
August 7, 2026 — Attachments always download, and their content type comes from the file itself
POST /v3/organizations/{org}/attachmentsno longer stores theContent-Typeyour multipart part declares. The stored type is derived from the file’s own bytes: a real PNG, JPEG, GIF, WebP, WebM, or MP4 keeps its media type, and everything else is stored asapplication/octet-stream. Thecontent_typefield returned by the upload and list endpoints reports that stored type, so it always matches what a download actually returns.- Downloads are now served with
Content-Disposition: attachment, so a browser saves the file instead of rendering it. An HTML or SVG file uploaded as an attachment can no longer execute as a page on the storage host. - Files uploaded before this change that were stored under a markup or script
content type (
text/html,image/svg+xml,application/javascript, …) are no longer downloadable:GET /v3/organizations/{org}/attachments/{id}answers404, and those entries come back from the list endpoint withurl: null. Re-upload the file to get a working download URL. Documents, archives, text, and media uploaded earlier are unaffected.
August 7, 2026 — Repository secret writes require owner or admin
POSTandDELETEon/v3/organizations/{org}/secretswithscope: "repo"now require the caller to be an owner or admin of the workspace, answering403otherwise. User-scoped secrets are unchanged: any member manages their own. A repo-secret write is pushed into every running session for that repository, so it is workspace configuration rather than a personal setting.- The same rule already applied to repository-secret operations in the web app; this brings the public API in line with it. An integration that performs these writes needs a key minted by an owner or admin.
August 7, 2026 — Failed-authentication throttling
- Repeated requests that present an invalid or expired credential from the same
client are now throttled. After a burst of failed authentications the API
answers
429with aRetry-Afterheader; back off for that long before retrying. This bounds API-key guessing and token enumeration. Successful requests and requests with no credential are unaffected, so ordinary authenticated traffic is never throttled.
August 6, 2026: Credentials are no longer read from the URL query string
- The API no longer accepts a bearer credential passed as an
?access_token=query parameter. Requests authenticate with theAuthorization: Bearerheader only; a token sent via the query string is ignored and the request answers401with{"error": "missing_bearer"}. - URLs are routinely recorded in browser history, proxy logs, and
Refererheaders, so a credential placed there can leak outside the request (CWE-598). Header-only authentication closes that path. - No published client or SDK ever sent tokens in the query string, so no integration changes are expected. The MCP OAuth compatibility endpoint, whose discovery flow requires a query credential, is unchanged.
August 6, 2026 — Rate limiting on authentication endpoints
- The email-code sign-in and verification endpoints now enforce a per-client,
per-account rate limit. When the limit is hit they answer
429with aRetry-Afterheader (seconds to wait); back off for that long before retrying. This guards accounts against code-guessing and send-spam and does not affect ordinary authenticated/v3traffic.
August 1, 2026 — Provider connection routes retired
-
The agent-auth provider-connection endpoints remain in the published contract
but now answer
410with{"error": "provider_connections_temporarily_unavailable"}. Provider credentials can no longer be submitted, stored, or used through the API. The affected routes are: -
GET /v3/organizations/{orgId}/agent-auth/modelsstays live and is now the way to discover which models a workspace can run. Ara serves a curated model catalog rather than per-workspace provider credentials. -
GET /v3/organizations/{orgId}/agent-auth/statusstays live.
July 19, 2026 — System automations hidden by default
/v3automation listings omit Ara’s own system automations by default, so a client sees the automations its workspace authored rather than internal plumbing.
July 15, 2026 — Automations resource and scopes
-
Added an automation-centric resource with triggers as sub-resources:
-
Added the
automations:readandautomations:writeAPI-key scopes that govern them.
July 15, 2026 — Repository memory and notes
-
Added workspace memory and knowledge notes to the public API:

