0x0pointer / 0x0pointer/agent-smith
Knowledge-graph view is unreadable when the matrix is large — no node cap, no clustering
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 129
- Forks
- 10
- Avg merge
- 8h 52m
- Merged PRs (30d)
- 5
Description
What happens
The world map renders every endpoint in the coverage matrix as a node, with no cap, no clustering and no filtering. With the matrix above that is ~620 nodes (561 endpoints + 59 params), of which 360 are paths that do not exist.
The result is a solid field of identical blue nodes labelled GET /.git/config, GET /.env.sql, GET /.htaccess.old, GET /appeal.conf ... The genuinely interesting nodes — the target host, Nginx, HSTS, authenticity_token, client_id, group_id, query — are visually indistinguishable from the noise. (Screenshot available; the operator's words were "that thing became unreadable".)
Where
core/graph/build.py:63 _add_endpoint_nodes iterates matrix["endpoints"] wholesale. The only limit in the graph package is core/graph/views.py:71,94 (next_targets, unrelated). There is no cap on rendered nodes.
Why this matters
The graph's entire value is visual — reachability, data flow and attack chains that the flat matrix cannot express (per core/graph/__init__.py:5). A view that degrades to mush is not a degraded feature, it is a removed one. And it fails exactly when it is most needed: on a large, real engagement.
Expected
The map stays legible regardless of matrix size.
Suggested fix
Independent of the data fix in the companion issue, the renderer should be robust to a noisy matrix:
- cap rendered endpoint nodes (top-N by interest: has findings, has params, has tested cells) with a "+N more" affordance;
- cluster endpoints by normalised path prefix, expandable on click;
- default-hide endpoints with 0 params and 0 tested cells — these are dead weight by definition;
- optionally a provenance filter in the UI, once
discovered_byis trustworthy again.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at core/graph/build.py:63, where _add_endpoint_nodes iterates matrix["endpoints"], and review core/graph/views.py:71,94 to distinguish existing limits from graph rendering. Read core/graph/init.py:5 for the graph’s intended value. Done means large matrices remain legible through a defined combination of capping, clustering, filtering, and an expansion affordance.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data-visualization, security
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100