Changelog

What changed, and why.

The recent history below is a copy of CHANGELOG.md — see that file for the complete record back to v0.1.0.

1.2.30

2026-08-13

Changed

  • New app icon and logo mark (the eye-covered figure inside a compass ring) across every platform (Windows .ico, macOS .icns, all PNG sizes) and the in-app mark on the Live Attack idle screen.

1.2.29

2026-08-13

Changed

  • GUI: removed the "estimated watch" duration on Set the Watch — it was computed from placeholder multipliers with no real timing data behind them (a Deep sweep of the full roster showed 6.7h, which read as absurd).
  • GUI: Live Attack now shows real per-agent completion. Every attack agent already emits its own "sweep complete" event when it finishes; that was streaming into the feed unused. Agent tiles now show a DONE tag and stop their running animation once that real event lands.
  • GUI: Dashboard's posture panel now reads "of 19" (the real attack-agent roster size) instead of "of 51" (the vulnerability-class catalogue the eye field itself binds to) — those are two different real counts, and showing 51 next to "19 agents" elsewhere in the app read as inconsistent.

1.2.28

2026-08-13

Changed

  • GUI: redesigned all three screens (The Watch, Set the Watch, The Register) to the pinned "keeper's watch-ledger" visual world — dotted-leader rows, Bodoni Moda/IBM Plex Mono typography, a single gold accent with grave-red reserved for critical findings, no cards/gradients/glow.
  • GUI: the hundred-eyes field on The Watch is a real rotating Fibonacci-sphere canvas, sized and positioned correctly regardless of window size; every screen now fits the app window with no page-level scrolling, with only genuinely long lists (agent roster, findings) scrolling in their own bounded lane.
  • GUI: raised the desktop window's minimum size (960×640 → 1180×760) to match what the redesigned layout actually needs.

1.2.27

2026-07-22

Fixed

  • A sandboxed target's port was published to every network interface (0.0.0.0), not just the scanning machine's loopback, for the whole duration of any sandboxed attack.
  • A generated sandbox container could leak a real repo's .git/.env — the static-site/PHP auto-sandbox cases serve any copied file verbatim. Now excluded from the build context, restored to the exact prior repo state afterward either way.
  • The LLM Dockerfile fallback broke on a markdown-fence-wrapped response (common even with strict JSON mode), silently discarding an otherwise-correct answer.
  • The DB-connection-string secret fix from 1.2.25 had its own real bug: either side of a credential pair merely looking like a common word (e.g. a username literally being "token") suppressed the entire finding — hiding a genuinely random, real password next to it.
  • Secrets committed then reverted in git history were never caught for the generic-secret pattern class — the single most common "oops" shape — due to an unexplained exclusion.
  • Several smaller robustness fixes: attack-provider resolution no longer adds a real network delay to plain --url attacks that never need it; capped an unbounded directory walk and file reads in the new stack-detection code against adversarial/oversized repos.

1.2.26

2026-07-22

Added

  • Phase 2 can now sandbox almost any repo, not just a fixed stack list. When no deterministic stack probe recognizes a repo (Go, Rust, Java, .NET, unusual layouts, ...) and an LLM provider is configured, Argus asks it to identify the stack and write a Dockerfile — verified before it's ever trusted. Raw-scan-only mode (no provider configured) is unaffected.

1.2.25

2026-07-22

Fixed

  • False-positive "hardcoded DB connection string" secret. A .env.example-style placeholder like postgresql://USER:PASSWORD@HOST was flagged as a real secret because the placeholder filter was never applied to that detector at all. Now checks the actual matched username/password against common placeholder field-names.
  • Phase 2 now works for two very common no-Dockerfile cases: plain static sites and basic PHP apps. Previously only Django, Flask, FastAPI, Rails, and Node were auto-sandboxed.

1.2.24

2026-07-22

Changed

  • Smoother, crisper desktop UI. Every interactive element now eases its hover/active state over a uniform 140ms instead of snapping, action buttons give a subtle press-down on click, and navigating between screens glides with a quick fade-and-rise instead of a hard cut. Reduced-motion is respected.

1.2.23

2026-07-22

Added

  • Argus now clearly reports when a scan is blocked by bot protection. ReconBot now detects the common anti-automation providers (Vercel, Cloudflare, Imperva, Sucuri, AWS WAF, generic CAPTCHA walls) and reports a plain-language notice that the real app wasn't reached.
  • Two clear scan modes in the desktop app: Code vs Website. New Scan now starts with a single choice — scan a repo/local folder, or scan a live website URL — instead of two overlapping fields and toggles.

1.2.22

2026-07-22

Fixed

  • Reports no longer show a misleading "closed since" diff across different targets. A live-URL attack could display a previous local code scan's findings as if they'd been fixed on the current target. The since-last-scan diff now renders only when the previous scan was the same target.

1.2.21

2026-07-22

Added

  • A fresh desktop install now starts with an empty Recent Scans list. Scan history lives in ~/.argus (which survives an uninstall/reinstall), so a reinstalled app used to show the previous install's scans. The app now records each install's moment and shows only scans run after it.

1.2.20

2026-07-22

Fixed

  • argus mcp-server crashed with a raw traceback on a base install missing the optional [mcp] extra, instead of the clean install-hint message every other optional integration already gives.

1.2.19

2026-07-21

Fixed

  • Blind SSRF/SQLi/XSS callback detection silently failed against Argus's own Docker-sandboxed targets. The callback URL handed to a sandboxed target said 127.0.0.1, which inside that container means its own loopback, not the host running the callback listener. Now advertises host.docker.internal to targets Argus sandboxed itself.

1.2.18

2026-07-16

Fixed

  • Phase 2 was attacking github.com itself when given a .git repo URL. Pointing Argus at a GitHub clone URL for "Strike the app" sent real HTTP requests straight at GitHub's own server and reported its ordinary responses as confirmed vulnerabilities — entirely fabricated findings. A git clone URL is now refused as an attack target from every entry point.

1.2.17

2026-07-16

Fixed

  • Desktop app window going fully "Not Responding" mid-scan under heavy local-LLM/CPU load — every command that shells out to the CLI now runs strictly off the window's own thread, and the CLI child runs at a lower OS priority so it can't starve the GUI.
  • Glitchy double-tooltip on the vulnerability-check "eyes" (a native browser tooltip and the custom hover panel firing at once).
  • Risk-score number/"100" baseline misalignment on the Reports screen, and inconsistent digit spacing in Dashboard's recent-scans risk column.

1.2.16

2026-07-16

Fixed

  • A systematic full-codebase audit (GUI, backend pipeline, attack agents) found and fixed: the provider-display bug from 1.2.15 recurring in New Scan and the sidebar badge; argus attack never applying suppressions; three more attack agents missing the fallback-baseline false-positive guard shipped for BusinessLogicAgent in 1.2.14; synthesized attack-chain findings always reporting flat "high" confidence regardless of a weak constituent finding; two unguarded concurrent-write races in local state files; and three config options that were silently no-ops.

1.2.15

2026-07-16

Fixed

  • Settings — switching to a cloud LLM provider appeared to silently fail. The status refresh right after a click was overwriting the selection with whatever the backend resolved to instead of what was actually clicked. The picker now shows your real selection and a "selected — add an API key below to activate it" hint when a key is needed.
  • "Strike the app" alone didn't skip "Read the code." Deselecting "Read the code" and leaving only "Strike the app" on still ran full static analysis first, which tries to git clone the target — fatal against a live URL that isn't a repo. The desktop app now has a real Phase-2-only mode that goes straight at the target.
  • New Scan now has a separate field for a running app's URL, instead of one box overloaded for both "read this repo" and "attack this URL."
  • Live Attack's Cancel button did nothing during "Read the code"-only scans — the backend never recorded a killable process handle for that path.
  • "Read the code"-only scans showed zero progress for their entire duration, stuck on a static message even after several minutes on a large codebase. Static analysis now streams the same kind of live per-step feed Phase 2 already had.

1.2.14

2026-07-16

Fixed

  • Settings page no longer feels frozen. argus status was calling Ollama's local API twice per invocation for the same data — each call taking ~2.2s on a typical machine. Merged into a single probe, roughly halving load time.
  • New Scan / Live Attack was silently hiding 5 real agents (SSTIProber, AuthzTester, MCPSecurityAgent, PromptInjectionAgent, BusinessLogicAgent) — the GUI's agent list had drifted out of sync with the backend registry.
  • BusinessLogicAgent no longer reports fake findings on SPA-fallback targets. Its LLM-proposed abuse paths could invent plausible admin paths that "succeed" against any catch-all handler. Now requires at least one response to be genuinely distinct from a baseline fallback response before confirming a finding.
  • Reports screen's "Export report" button was dead (no handler at all) — now exports via argus report and shows the resulting file path.

1.2.13

2026-07-14

Added

  • argus scan --targets-file repos.txt — batch-scan every target in a file, one aggregate summary table.
  • SSTIProber — a new agent detecting server-side template injection across Jinja2/Twig, FreeMarker/Velocity/Thymeleaf, Ruby/JSF EL, and ERB.
  • --rate-limit <req/s> — caps requests/second across the whole attack swarm.
  • --request-log <path> — writes a JSON log of every request sent during Phase 2.
  • Explicit, logged authorization before Phase 2. attack/audit now ask for interactive confirmation before sending a single request, or require --yes-i-am-authorized for CI/non-interactive use.
  • Benchmark suite now measures false positives, not just detection rate.
  • The desktop Reports screen's scan-to-scan diff view now shows a severity-colored dot per changed finding.
  • A new marketing website at sarthak-47.github.io/ARGUS, with Docs/Download/Changelog/Security pages, published via GitHub Pages.

Fixed

  • A regression-guard test now fails if a future refactor drops the baseline-comparison usage from the four agents that probe path/header existence, silently reintroducing the v1.2.12 false-positive bug class.

1.2.12

2026-07-11

Fixed

  • Path-probing agents (ReconBot, CrawlerBot) reported fake findings on any site with a catch-all/SPA-fallback handler. A site that serves the same page with HTTP 200 for every unmatched route was misread as "found /.env" (CRITICAL), fake Jenkins/phpMyAdmin/WordPress panels, and more — reproduced live: 28 fake findings, risk score 99/CRITICAL, on a static site with zero real exposure. Fixed with shared, correctly-truncated baseline-comparison helpers used by both agents. Verified: the same target now correctly scores 46/MEDIUM.
  • The same false-positive class existed in three more agents, found via a full audit: AuthzTester (BOLA/BFLA), HeaderPoker (access-control-bypass-via-header), and Injector (time-based blind SQLi reusing a stale baseline timing). All three now confirm a genuine, baseline-distinct signal before reporting.
  • Risk scoring itself was not miscalibrated — a single real HIGH-severity finding is deliberately meant to floor the score at 70+. The "always above 70" symptom was these false-positive findings manufacturing a floor that shouldn't have applied.

1.2.11

2026-07-11

Security

  • Off-origin links/forms/redirects on a target page could enter the attack surface and be requested. Every request now enforces the exact scheme+host+port the operator authorized.
  • TLS certificate verification and redirect-following were disabled on the main attack client — both are now on/off by default.
  • The desktop app shipped with csp: null — replaced with a strict policy scoped to the app's own origin.
  • Docker-compose sandbox runs now use a unique project name per run.

Added

  • Live Attack has a working Cancel button.
  • --max-requests hard cap on Phase 2 traffic, independent of the concurrency limit.
  • argus benchmark --min-detection-rate gates a release on a genuine accuracy regression; the benchmark workflow now runs before the draft release is published, not after.

1.2.9

2026-07-11

Fixed

  • Dashboard showed a different risk band than Reports for the same scan — a threshold mismatch between the frontend and backend, now matched exactly.
  • "Strike the app" (Live Attack) showed nothing for a Docker-unavailable or URL-shaped target — both fixed: URL targets bypass Docker entirely, and a genuine skip now streams a real event instead of going silent.

Changed

  • Settings: removed the Argus CLI section — no longer needed now that the backend is bundled directly inside the installer.
  • Settings: pick your own local Ollama model instead of only ever seeing the one size-recommended default.

1.2.8

2026-07-11

Changed

  • The desktop app now bundles the Argus CLI directly inside the installer instead of depending on a separately pip install'd argus reachable on PATH — the root cause behind every "argus not found" report.

Full history back to v0.1.0 on GitHub →