End-to-end research workflow: analytics, graceful shutdown, CLI fixes, UX improvements, README#25
End-to-end research workflow: analytics, graceful shutdown, CLI fixes, UX improvements, README#25
Conversation
…l.sh Agent-Logs-Url: https://github.com/root-Manas/macaron/sessions/00996222-29d9-4f07-861f-153472cf533b Co-authored-by: root-Manas <97402139+root-Manas@users.noreply.github.com>
root-Manas
left a comment
There was a problem hiding this comment.
Give me exact details of what you implemented and also give me a plan of making this cli tool to just make it better if it's not already and make it easier to use like make it fully functional and have better ux from start to end.
…trings Agent-Logs-Url: https://github.com/root-Manas/macaron/sessions/d6bb3d0b-c7d5-40b3-b491-e195b8b62ce5 Co-authored-by: root-Manas <97402139+root-Manas@users.noreply.github.com>
Here's a precise breakdown of everything implemented across both commits, and what was done in this pass to make the tool more usable end-to-end. What was implemented (commit
|
| Area | Change |
|---|---|
| Bug fix | macaron scan with no targets used to throw a pflag parse error — now shows help |
| Bug fix | lookupGeo ignored request cancellation — now uses http.NewRequestWithContext |
| Graceful shutdown | macaron serve now catches Ctrl-C and shuts down cleanly with a 5-second drain window |
| Analytics backend | Store.Analytics() computes: total findings across all scans, per-day activity, top-10 targets by vuln count, severity distribution |
| Analytics API | /api/analytics endpoint added to the web server |
| Analytics dashboard | "Analytics" toggle button in the topbar opens a full-width panel with totals row, daily activity bar chart, top targets chart, and severity distribution |
| CLI help | printHelp() and printGuide() rewritten to use -- double-dash flags that actually work |
| README | Rewritten with accurate command reference, profiles table, stages table, and dashboard description |
| install.sh | Now adds PATH to ~/.zshrc and ~/.profile in addition to ~/.bashrc |
UX improvements (commit 7111afb)
| Area | Change |
|---|---|
| Branding | Removed all "macaronV2" strings from terminal output → just "macaron" |
--version |
Now prints macaron 3.0.0 (Go go1.25.0) instead of macaronV2 3.0.0 (Go go1.25.0, stable) |
macaron status (empty) |
Now says No scans found.\nRun: macaron scan example.com with correct command syntax |
macaron status table |
Added SUBS + PORTS columns; truncated IDs to 12 chars; human date format (2026-01-02 15:04) |
macaron results --wht live |
Now renders as a go-pretty table with STATUS / URL / TITLE columns |
macaron results --wht vulns |
Now renders as a go-pretty table with SEVERITY / TEMPLATE / MATCHED columns |
| Post-scan hint | After a scan completes, prints "What next?" with macaron status, macaron results --dom <target> --wht live, macaron results --dom <target> --wht vulns, macaron serve |
macaron setup |
Shows installed count (4/10 tools installed), counts missing required tools, prints next-steps workflow when all required tools are present |
Dashboard screenshots:
Main scan view (scan list + detail panel with metrics, stage yield, geo map):
Analytics panel (totals, daily activity bars, top targets, severity distribution):
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
api.demo.dev- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
api.example.com- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
api.testapp.io- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
demo.dev- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
example.com- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
testapp.io- Triggering command:
/tmp/macaron /tmp/macaron serve --str /tmp/mactest_serve --addr 127.0.0.1:8188 copilot/build-e2-c=4 ux-amd64/pkg/tool/linux_amd64/vet --depth 3 REDACTED ux-amd64/pkg/tool/linux_amd64/vet rg/t�� 04jvgDt9G --global pkg/mod/golang.org/toolchain@v0.-o committer.email bis(dns block)
- Triggering command:
If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to the custom allowlist in this repository's Copilot coding agent settings (admins only)


The tool had several broken flows for researchers:
macaron scanwith no targets caused a pflag parse error, the dashboard had no analytics,servecouldn't be stopped cleanly, and the help text referenced non-existent flag syntax. This PR also improves the overall CLI UX from first run through to export.Bug fixes
macaron scan(no targets) – removed the dangling--scnstub appended toos.Args, which caused pflag to fail instead of showing helplookupGeousedhttp.NewRequest(no cancellation); replaced withhttp.NewRequestWithContextcontinueinstead of accumulating zero values into totalsAnalytics
Store.Analytics()aggregates across all scans: cumulative totals, per-day activity (vulns + live hosts), top-10 targets by vuln count, severity distribution/api/analyticsendpoint returns this as JSONGraceful shutdown
Serve()now takes acontext.Contextand callshttp.Server.Shutdownon cancellation instead of blocking forever:CLI UX improvements
printHelp()andprintGuide()updated to use--flags matching pflag registration (previously showed-dom,-prf, etc.)macaron scan/macaronwith no args now show help cleanly--versionprintsmacaron 3.0.0 (Go ...)cleanlymacaron status(empty state) now shows the correct command syntax in the promptmacaron statustable: added SUBS + PORTS columns, IDs truncated to 12 chars, human-readable date formatmacaron results --wht live: now renders as a go-pretty table with STATUS / URL / TITLE columnsmacaron results --wht vulns: now renders as a go-pretty table with SEVERITY / TEMPLATE / MATCHED columnsstatus,results,serve)macaron setup: shows installed/total tool count, reports how many required tools are missing, and prints a next-steps workflow once all required tools are presentInstall & README
install.shadds PATH to~/.zshrcand~/.profilein addition to~/.bashrc(macOS / non-bash users)