Describe the bug
A repository target is cloned into /workspace/<subdir> and included in the list returned by collect_local_sources() (strix/interface/utils.py:1268), exactly like a local_code target. But the two whitebox checks test only type == "local_code", so scanning a GitHub repo — alone or alongside a domain — runs with is_whitebox=False:
strix/core/runner.py:211 (inlined) gates skills: neither coordination/source_aware_whitebox nor custom/source_aware_sast is preloaded (strix/agents/prompt.py:47-49). Although the agent can load custom/source_aware_sast on demand, coordination/* is in _INTERNAL_SKILL_CATEGORIES, so coordination/source_aware_whitebox is unavailable through load_skill.
strix/interface/utils.py:1247 (is_whitebox_scan) feeds telemetry: both posthog.py:70 and scarf.py:72 record the scan as blackbox.
Meanwhile the agent has full source in the workspace, diff-scoping already drives off that same local_sources list (main.py:996-1003), and report/state.py:489-493 reads cloned_repo_path to stamp commitSha/branch into SARIF. The rest of the codebase treats a cloned repo as source-in-hand.
Both docs/quickstart.mdx:63 and docs/usage/cli.mdx:105 document this invocation as "white-box testing".
Bisects to 1e641e5 (Apr 25), which replaced bool(args.local_sources) with a type == "local_code" check — that covers the first branch of collect_local_sources but not the repository / cloned_repo_path one. Working as expected before that (e78c931, Mar 31); broken on main since April 25.
To Reproduce
strix -t https://github.com/org/repo -t https://your-app.com
- The repo is cloned into
/workspace/repo and the agent can read it.
- The root agent's resolved skills contain neither
custom/source_aware_sast nor coordination/source_aware_whitebox.
- Equivalently, this minimal reproduction demonstrates the underlying predicate mismatch without running a scan:
from strix.interface.utils import collect_local_sources, is_whitebox_scan
targets = [{"type": "repository", "details": {"cloned_repo_path": "/clone", "workspace_subdir": "repo"}}]
print(bool(collect_local_sources(targets))) # True — source is in the workspace
print(is_whitebox_scan(targets)) # False — but not treated as whitebox
Expected behavior
Any target that puts source in the workspace counts as a whitebox scan, so a repo (or repo + domain) target preloads the source-aware skills and reports as whitebox — matching the documented multi-target white-box examples. If excluding repository is deliberate, that's worth documenting, since the docs examples, diff-scoping, and SARIF provenance all currently assume otherwise.
Screenshots
N/A
System Information:
- OS: macOS (Darwin 24.6.0)
- Strix Version or Commit: 1.3.1 / 8157ccb
- Python Version: 3.14.2 (repro is version-independent — pure dict inspection)
- LLM Used: N/A — deterministic config-resolution bug, independent of provider
Additional context
Impact is partial rather than total: the white-box sections of system_prompt.jinja are unconditional, and scan_modes/*.md carry a "Whitebox (source available)" block that always loads — so the agent keeps some source-aware direction, just not the dedicated skills.
Opening a PR shortly.
Describe the bug
A
repositorytarget is cloned into/workspace/<subdir>and included in the list returned bycollect_local_sources()(strix/interface/utils.py:1268), exactly like alocal_codetarget. But the two whitebox checks test onlytype == "local_code", so scanning a GitHub repo — alone or alongside a domain — runs withis_whitebox=False:strix/core/runner.py:211(inlined) gates skills: neithercoordination/source_aware_whiteboxnorcustom/source_aware_sastis preloaded (strix/agents/prompt.py:47-49). Although the agent can loadcustom/source_aware_saston demand,coordination/*is in_INTERNAL_SKILL_CATEGORIES, socoordination/source_aware_whiteboxis unavailable throughload_skill.strix/interface/utils.py:1247(is_whitebox_scan) feeds telemetry: bothposthog.py:70andscarf.py:72record the scan as blackbox.Meanwhile the agent has full source in the workspace, diff-scoping already drives off that same
local_sourceslist (main.py:996-1003), andreport/state.py:489-493readscloned_repo_pathto stampcommitSha/branchinto SARIF. The rest of the codebase treats a cloned repo as source-in-hand.Both
docs/quickstart.mdx:63anddocs/usage/cli.mdx:105document this invocation as "white-box testing".Bisects to 1e641e5 (Apr 25), which replaced
bool(args.local_sources)with atype == "local_code"check — that covers the first branch ofcollect_local_sourcesbut not therepository/cloned_repo_pathone. Working as expected before that (e78c931, Mar 31); broken on main since April 25.To Reproduce
strix -t https://github.com/org/repo -t https://your-app.com/workspace/repoand the agent can read it.custom/source_aware_sastnorcoordination/source_aware_whitebox.Expected behavior
Any target that puts source in the workspace counts as a whitebox scan, so a repo (or repo + domain) target preloads the source-aware skills and reports as whitebox — matching the documented multi-target white-box examples. If excluding
repositoryis deliberate, that's worth documenting, since the docs examples, diff-scoping, and SARIF provenance all currently assume otherwise.Screenshots
N/A
System Information:
Additional context
Impact is partial rather than total: the white-box sections of
system_prompt.jinjaare unconditional, andscan_modes/*.mdcarry a "Whitebox (source available)" block that always loads — so the agent keeps some source-aware direction, just not the dedicated skills.Opening a PR shortly.