error events now carry phase (startup/preflight/sandbox_init/agent_setup/
agent_loop) and the exception class name (plus its cause), never the message
or trace. Startup and preflight failures that exit(1) before the scan starts
are beaconed with a stable error_type instead of vanishing. scan_ended
distinguishes budget_exceeded, rate_limited, and headless agent_stopped
from user_exit.
The warm-up thread imports strix.core.runner while warm_up_llm and
preflight_model_connection import agents.models.interface. Both walk the
agents SDK graph from different entry points, CPython fails one side to
break the import-lock cycle, and the orphan purge then removes agents.*
from sys.modules while the main thread is still importing it, crashing
strix -n with KeyError: 'agents.models'.
- Every payment-required error now ends with a "Next step" line: the
platform hint when one is sent, else the topup command and the billing
URL for the configured platform. JSON output gets the same text as
next_step. The platform hint is no longer repeated inside the error.
- An archive file passed to --source is rejected with guidance to pass
the directory instead, which packs and excludes deps/build output.
- An oversize archive names its largest files and points to --exclude
and --dry-run --show-files.
- uploads request help points to scans start --source for local code.
Add Claude Fable 5.1, Gemini 3.7 Flash, and Z.ai GLM-5.3 / GLM-5.3-Flash
to RECOMMENDED_MODEL_NAMES, add a Z.ai GLM frontier family so GLM-5.x is
accepted through OpenRouter and Novita routes, and drop the superseded
GPT-5.4, GPT-5.3-codex, Opus 4.8, Sonnet 4.6, Gemini 3.6 Flash, and
Qwen3.7 entries. Update the README, docs provider pages, quickstart, and
CLI hint strings to the same current models, including DeepSeek V4,
Kimi K3, and GLM-5.3.
The interactive start screen skipped validate_environment() entirely, and
a bare prompt sent verify=false so the model preflight never ran. Both
kinds of setup launch now verify the model before leaving the start
screen, environment validation runs for every mode, and quitting setup
without a scan still shows the update notice.
* feat(cli): add strix login for managed platform sign-in (device flow)
* feat(cli): add --scopes flag to strix login
* docs: document strix login and managed billing in README, AGENTS, docs, and managed skill
* fix(cli): handle malformed login responses and credential file failures
* fix(cli): reject sign-in responses without an API token
* feat(login): interactive workspace and scope selection with presets
* fix(login): reject malformed API token values in sign-in responses
* fix(login): skip the scope prompt when stdin is not a terminal
* fix(login): tolerate malformed selection containers and remove unreadable credential files on logout
* fix(login): treat overflowing timing values as invalid
* fix(login): show the configured platform host in the sign-in banner
* fix(login): bound device flow timing values and clean up unreplaced secret temp files
* feat(cli): add the strix cloud command surface for the managed platform
* feat(cli): manage workspaces and hosted onboarding links from strix cloud
* fix(cli): report a leftover temporary secret file instead of hiding it
* feat(cli): pass a Stripe payment method to the top-up wallet client
* docs(cloud): recommend the Stripe agent wallet as the default payment path
* fix(cloud): preserve API auth during MPP payment
* fix(cloud): drop knowledge query and settings commands removed from the API
* fix(cloud): align agent commands with API contracts
* fix(cloud): send required PR review integration fields
* fix(cloud): preserve scopes when switching workspaces
* fix(cloud): make session command help non-destructive
* feat(cloud): improve human navigation and output
* feat(cli): add native shell completions
* feat(cloud): tailor human list and detail views
* feat(cloud): upload local source for managed scans
* fix(cloud): infer scan type from local targets
* Add agent-friendly managed cloud CLI
* Harden cloud CLI type boundaries
* Clarify cloud test user MFA options
* Correct cloud vulnerability status guidance
* Clarify chat file path handling
* Allow signed storage upload URLs
* Fix provider token request handling
* Improve cloud CLI human list views
* Make cloud CLI workflows actionable and safe
* Make cloud workspace switching session-safe
* Preserve CLI session metadata in JSON output
* Remove preview protection bypass plumbing from cloud CLI
* add a generic MCP client and a config for connecting MCP servers
* Add MCP docs and CLI polish: docs page, startup connect summary, --mcp-config flag, compact tool output
* Add MCP connection notes and per-run selection; clean up on cancel and dedupe names
* Show errored MCP tool calls as failed in the TUI
* Sanitize namespaced tool names so model APIs accept them
* Show MCP tool calls distinctly in the terminal and the run viewer
* Say what MCP servers are worth connecting for
* Correct the notes docstring to match how notes reach the agent
* keep the mcp tests from reading your shell's STRIX_MCP_* vars
* add extra-files plumbing so orchestrators can drop single files into the sandbox workspace
* reject extra-file paths that collide with a local source tree
* add --workspace-file so CLI users can place files in the sandbox workspace
* reject repeated and control-character workspace paths
* revalidate persisted workspace files when resuming a run
* drop the workspace-file size limit
* make the working-directory prompt answer the mouse
Its Confirm and Cancel were drawn as buttons and did nothing when clicked: the
modal mouse handler had a case for every dialog except this one, so a click fell
through and the scan sat waiting on an answer the user believed they had given.
Only the keyboard could answer it.
The prompt is docked in a corner rather than centered, so it also needs its own
bounds; the centered ones every other dialog uses would have put the buttons in
the wrong place. Those bounds now come from the same placement cornerOverlay
draws with.
Two returns that hand back the model alongside a call that mutates it are now
sequenced explicitly. They work, but only because the compiler happens to
evaluate the call first, and one of them is what puts the prompt back in the
composer when the mount is declined.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* skip the mount instead of abandoning the scan
Declining the working-directory prompt threw the whole launch away and dropped
back to the start screen, which is a lot to lose for answering one question
about one directory. The two answers are now about the directory alone: mount it,
or run without it. The prompt is the whole of the input either way.
The buttons say which is which - Mount and Skip rather than Confirm and Cancel -
and the prompt says what skipping costs.
A run with neither target nor directory is a real run, so two things follow it.
It can be resumed: its instruction is what drives it, and that is in the run
record. And it tells the agent plainly that it has neither, because an agent
given no scope goes looking for the one it assumes it was meant to have.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* perf(cli): fast startup — lazy heavy imports + onedir standalone build
* perf(cli): drop legacy single-file compat from install/self-update
* perf(cli): simplify — drop constants module and extra lazy-import refactors
* refactor(update): strix --update just re-runs the install script
* perf(cli): drop packaging/install/update changes; deepen lazy imports instead
Reverts the onedir build, install.sh, and self-update changes so release
mechanics stay untouched. Startup cost is addressed purely by deferring
heavy imports (agents/openai, config.models, report state/writer, docker)
until a scan actually runs; DEFAULT_MAX_TURNS moves to strix.config.settings
so argparse no longer pulls the agents SDK.
---------
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>