0x0pointer / 0x0pointer/agent-smith

Knowledge-graph view is unreadable when the matrix is large — no node cap, no clustering

Open
#182 0 comments 0 reactions 0 assignees View on GitHub

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_by is trustworthy again.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.