Commit Graph
709 Commits
Author SHA1 Message Date
Ahmed AllamandAhmed Allam 575e10a404 fix(runtime): also suppress OverflowError for non-finite STRIX_SANDBOX_CPUS 2026-07-15 18:31:03 -07:00
Ahmed AllamandAhmed Allam 84185db23b feat(runtime): opt-in resource limits for docker sandbox containers
Apply cgroup caps (mem_limit, shm_size, nano_cpus, pids_limit) to the
sandbox container from STRIX_SANDBOX_* env vars. Unset values keep
docker's unbounded default, so behavior is unchanged unless opted in.
2026-07-15 18:31:03 -07:00
devin-ai-integration[bot]andGitHub 899e07d3a2 fix(core): bound per-agent image memory (proactive budget + inherited-context scrub) (#779) 2026-07-15 18:13:42 -07:00
914207ffb3 feat(runtime): resolve sandbox ports over a shared Docker network (#775)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-15 11:57:42 -07:00
alex sandGitHub 40f4e67320 fix(runtime): retry transient sandbox startup failures (#768)
* fix(runtime): retry transient sandbox startup failures

* fix(runtime): fail closed when sandbox teardown fails
2026-07-14 23:27:06 -04:00
alex sandGitHub d44ca88a18 fix(runtime): stage symlink-safe copies for LocalDir uploads (#766)
The sandbox SDK's LocalDir walker rejects any symlink outright
(LocalDirReadError, reason=symlink_not_supported), so uploading a cloned
repository that commits symlinks (common in JS/TS monorepos) aborts before
the agent starts. Stage such trees into a temp copy first: in-tree links
are dereferenced; out-of-tree, dangling, and cyclic links are dropped and
never followed, preserving the walker's path-escape safety. Symlink-free
trees are uploaded as-is.
2026-07-14 17:40:23 -04:00
91d9a84716 chore: release v1.1.0 (#765)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
v1.1.0
2026-07-14 04:38:32 -07:00
e69c8f6633 Default sandbox exec commands to Bash (#764)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-14 03:44:05 -07:00
Ahmed AllamandGitHub 81a8b2139b Update README 2026-07-13 17:57:40 -07:00
b959d528a2 Warn when configured LLM is not frontier-recommended (#586)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-13 17:41:44 -07:00
daf39a2305 chore(telemetry): minor telemetry updates (#761)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-13 16:29:04 -07:00
5304baa424 feat(llm): change OpenRouter LLM request headers (#760)
* feat(llm): attribute OpenRouter usage to Strix app

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

* scope OpenRouter category header to OpenRouter models; add OR_APP_CATEGORIES override

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

* clear stale OpenRouter category header when switching providers

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

* hardcode OpenRouter attribution headers; drop env overrides and docs section

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

* drop attribution comments

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

---------

Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-13 16:12:07 -07:00
993fd41f32 fix(tui): restore snappy sweep/progress animation frame rate (#759)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-13 14:21:28 -07:00
StarkandGitHub b7a1259593 feat: add weak password detection skill (#621) (#654) 2026-07-13 11:33:48 -07:00
alex sandGitHub 48521deb62 Deduplicate scan ended telemetry (#758)
* Deduplicate scan ended telemetry

* Delete tests/test_telemetry.py

* Retry failed scan ended telemetry

* Preserve scan ended retry reason
2026-07-13 14:24:17 -04:00
d6cefc176a docs(prompts): strengthen report guidance (severity, chaining, report structure) (#754)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-12 20:37:58 -07:00
a87bfb4881 fix(reporting): require advisory_cvss for dependency findings + add SCA TUI renderer (#753)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-12 17:31:49 -07:00
alex sandGitHub 24279e3279 Use core LiteLLM dependency (#752) 2026-07-12 15:41:21 -04:00
alex sandGitHub 4537f33f11 Add dependency reporting fields (#751) 2026-07-12 15:30:33 -04:00
ee779987d3 fix(deps): cap openai<2.45 and add litellm[proxy] so fresh installs can run (#748)
* fix(deps): cap openai<2.45 and add litellm[proxy] so fresh installs can run

* chore(deps): sync uv.lock with openai cap and litellm[proxy]

Regenerate the lockfile so locked/frozen installs pick up the openai<2.45 cap and litellm[proxy] extras (fastapi, orjson, ...); remove inline dependency comments.

Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>

---------

Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-12 09:56:57 -07:00
alex sandGitHub a5f28c6b4b Add root scan prompt options (#750) 2026-07-12 12:31:15 -04:00
alex sandGitHub 4b46a748e4 Add skill directory registration (#746) 2026-07-12 12:05:58 -04:00
alex sandGitHub 205e0b3707 Allow scan agent tool registration (#733) 2026-07-11 23:58:51 -04:00
alex sandGitHub c13960ae01 Support routed OpenAI required tool choice (#732) 2026-07-10 18:43:07 -04:00
alex sandGitHub 22d327d21f feat(settings): add force_required_tool_choice to LlmSettings (#730)
feat(inputs): implement logic for required tool choice based on model

test(inputs): add tests for force_required_tool_choice behavior

test(runner): update tests to include force_required_tool_choice in settings
2026-07-10 18:36:33 -04:00
Ayush7614andAhmed Allam f528a6d265 Address Greptile review: GCP and Auth0 recon guidance
- Use curl instead of gsutil for anonymous GCS checks
- Document userinfo requires bearer access token
2026-07-10 08:15:22 -07:00
Ayush7614andAhmed Allam 054725ccb6 Add GCP and Auth0 security skills
Expand cloud and technology coverage for GCP IAM/storage
and Auth0 tenant/API misconfiguration testing.
2026-07-10 08:15:22 -07:00
882664f70b fix(providers): match google submodule imports and walk full exception chain
Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-10 07:21:47 -07:00
Ousama Ben YounesandAhmed Allam e1abac0f0f test(providers): cover wrapped bedrock import errors 2026-07-10 07:21:47 -07:00
Ousama Ben YounesandAhmed Allam df4bfafcd3 fix(providers): show vertex extra hint for wrapped import errors 2026-07-10 07:21:47 -07:00
5c6cbe0884 fix(tui): key render cache by content string and return copies
Co-Authored-By: Ahmed Allam <ahmed39652003@gmail.com>
2026-07-10 06:55:38 -07:00
Hardik-369andAhmed Allam dd29d99b85 fix(tui): reduce scroll stutter by throttling UI refresh and caching renders
- Increased UI update interval from 350ms to 500ms
- Reduced dot animation frequency from 60ms to 250ms
- Reduced splash animation frequency from 50ms to 100ms
- Added content hash cache for rendered agent messages to avoid
  re-parsing markdown and re-running Pygments on every tick
- Added guard to prevent redundant scroll_end callbacks from queuing
  during rapid updates

Closes #581
2026-07-10 06:55:38 -07:00
alex sandGitHub 9f6d0b106b fix(report): omit SARIF provenance for multiple repos (#726) 2026-07-10 09:41:18 -04:00
Dustin PersekGitHubAhmed AllamDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>Ahmed Allam
e53b0bd11f fix(ci): lower Linux release glibc baseline (#707)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Ahmed Allam <49919286+0xallam@users.noreply.github.com>
2026-07-10 06:13:14 -07:00
ZiziGitHubAhmed AllamDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
0bf992ecbf fix(logging): keep verbose openai.agents DEBUG off sandbox stdout (#704)
Co-authored-by: Ahmed Allam <ahmed39652003@gmail.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-10 06:00:40 -07:00
alex sandGitHub f7fa54c12d fix(container): allow configured Caido UI domains (#723) 2026-07-10 00:38:29 -04:00
alex sandGitHub b9994e2e0e fix(session): use HTTPS scheme for Caido endpoint if TLS is enabled (#722) 2026-07-10 00:23:27 -04:00
0fb005c73f fix(runtime): swallow torn-down docker socket in sandbox delete() (#721)
StrixDockerSandboxClient.delete() best-effort-kills the sandbox container via
containers.get(id).kill() before delegating to the SDK's delete(), suppressing
docker NotFound/APIError. But when the docker daemon socket is already going
away — the normal case on a host/CI teardown — containers.get() ->
inspect_container raises requests' ConnectionError, which is a *sibling* of
docker.errors.APIError under requests.RequestException, not a subclass. So it
escapes the APIError-only suppress and surfaces a full traceback on teardown
even though the kill is meant to be best-effort.

Add RequestException to the suppress so the best-effort kill is genuinely
best-effort regardless of daemon reachability.

Test: tests/test_docker_client_delete.py — the kill raising ConnectionError
(and NotFound/APIError) is swallowed and delete() still delegates; unrelated
errors still propagate; no-container_id is a no-op. The ConnectionError case
fails against the pre-fix APIError-only suppress.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 00:13:35 -04:00
Rome ThorstensonandGitHub e1940769de fix(providers): declare bedrock + vertex extras and add provider import-error hints (#588)
* feat: add bedrock + vertex optional extras with install docs and import hints (#574)

Declare [project.optional-dependencies] with vertex (google-auth) and
bedrock (boto3) extras so "strix-agent[vertex]" / "strix-agent[bedrock]"
install the provider SDKs. Add an Installation section to the Bedrock docs
mirroring Vertex, and a _provider_import_hint helper in warm_up_llm that
surfaces a pip-install hint when a provider dependency is missing.

Fixes #574, #573

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(providers): use pipx in install hint to match docs

A pipx-installed strix can't add an extra with 'pip install' (wrong env);
mirror the documented 'pipx install "strix-agent[...]"' command. Addresses
Greptile review.
2026-07-07 10:24:49 -04:00
alex sandGitHub 9f278b9a5c Add target list CLI option (#711)
* Add target list CLI option

* Handle target list comments and encoding errors
2026-07-06 23:33:08 -04:00
375fc9c3d0 feat(report): tag SARIF rules with STRIDE legs derived from CWE (#708)
Builds on the SARIF 2.1.0 emitter (#626): give each SARIF rule one or more
`stride:<leg>` tags (Spoofing / Tampering / Repudiation / Information
disclosure / Denial of service / Elevation of privilege) derived from the
finding's CWE, so consumers — the GitHub code-scanning Security tab, ASPM
dashboards, coverage reports — can group and filter findings by
threat-model leg. SARIF results inherit their rule's tags via ruleId, so
tagging the rule is sufficient.

- _CWE_TO_STRIDE maps common CWEs to legs (dominant leg first where a CWE
  spans several); unmapped / no-CWE findings fall back to a default
  (tampering + information-disclosure) so every finding carries >=1 leg
  and downstream reports have no coverage gaps.
- Includes mappings for CWEs surfaced by real scans: 798 (hardcoded
  creds), 862 (missing authz), 259 (hardcoded password), 1391 (weak
  credential).

Tests: tests/report/test_sarif_stride.py (14 cases — mapping, normalization
of CWE-306/306/"cwe: 306" forms, default fallback, rule-tag emission).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 21:19:53 -04:00
Felix-AyushandGitHub 754508c70b test: add report writer artifact tests (#667)
Cover run record I/O, vulnerability markdown rendering,
CSV severity ordering, and executive report output.
2026-07-06 11:45:29 -04:00
sean-kim05andGitHub a5112f9433 fix(config): make env vars win over persisted JSON across all aliases (#689)
_read_json_overrides is documented to let env vars outrank the
persisted cli-config.json, but it decided per-alias and broke on the
first alias found in either env or the file. When a multi-alias field
(e.g. api_key via LLM_API_KEY/OPENAI_API_KEY) was set in the env under
one alias but stored in the file under another, the stale file value
was surfaced as an init kwarg and overrode the live env var. A
lowercase env var was also missed (settings use case_sensitive=False).

Decide whether a field is already set in the environment by checking
all of its aliases case-insensitively before consulting the file. Add
regression tests for the cross-alias and case-insensitive cases.

Closes #688
2026-07-06 11:36:41 -04:00
Ahmed AllamandGitHub f28ebe3668 Update README (#705) 2026-07-06 07:38:52 -07:00
Viper DroidandGitHub 90cab1bbe3 Add LLM Prompt Injection skill (vulnerabilities) (#616) 2026-07-06 03:52:24 -07:00
sean-kim05andGitHub aec5f14455 fix(tui): show 'more content available' for view_request over 15 lines (#687) 2026-07-06 03:50:02 -07:00
302efedca6 feat(report): SARIF 2.1.0 emitter for CI / code-scanning integration (#626)
* feat(report): SARIF 2.1.0 emitter for CI / code-scanning integration

Strix emits CSV + markdown + JSON but no SARIF, so findings can't feed
GitHub code-scanning, an ASPM, or any SARIF-consuming CI gate. Add a
stdlib-only emitter (strix/report/sarif.py) and always write findings.sarif
from ReportState._save_artifacts, beside the existing artifacts.

Design invariants (learned from running this in production):
- Stable partialFingerprints.primaryLocationLineHash per finding, so a
  re-scan that re-words a title doesn't churn code-scanning alert IDs.
- Class/category hashing so the same vuln class maps to a stable ruleId
  across scans rather than drifting.
- Findings with no code location anchor to SECURITY.md with a synthetic
  location marker instead of being silently dropped.
- Always emit (even with zero findings) so a clean re-scan overwrites a
  stale findings.sarif and code-scanning auto-resolves fixed alerts.
- tool.driver.version reports the strix package version.
- Fully isolated in its own try/except: a SARIF build error must never
  break the CSV/MD/run-record path.

Verified end-to-end on v1.0.4 against a SQLi/cmd-inj/weak-hash fixture:
3 findings -> valid SARIF 2.1.0, 3 results, real code locations, distinct
per-finding fingerprints.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(report): complete SARIF code scanning metadata

---------
Co-authored-by: bearsyankees <bearsyankees@gmail.com>
2026-07-03 10:43:31 -04:00
7e808f7d34 Add five security skills: OAuth, AWS, prototype pollution, deserialization, Django (#617)
* Add five community security skills for agent specialization

Expand coverage with OAuth flow testing, AWS misconfigurations, prototype
pollution, insecure deserialization, and Django framework playbooks.

* Address Greptile review feedback on AWS and deserialization skills

- Use head-bucket for S3 existence checks instead of duplicating s3 ls
- Add Node.js to insecure_deserialization frontmatter description

* Clarify S3 existence vs public listing checks in aws skill

Split unauthenticated enumeration into separate head-bucket/HTTP
and s3 ls steps with interpretation guidance per review.

* some tools ads

---------

Co-authored-by: bearsyankees <bearsyankees@gmail.com>
2026-07-03 00:15:53 -04:00
Sonai BiswasandGitHub c3997cdb35 fix: report cost for streamed OpenRouter calls (#634)
* fix: capture cost for streamed LiteLLM responses

* docs: note LiteLLM streaming metadata callbacks
2026-07-03 00:10:28 -04:00
Sadovoi GrigoriiandGitHub dc8b790cf8 fix: avoid note ID collisions (#630) 2026-07-02 22:54:44 -04:00