gitnexus-cli
Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki,…
Use when working on, reviewing, or extending GitNexus's CFG/taint/PDG subsystem (the `--pdg` layers), or when reasoning about source→sink data-flow findings. Examples: \"How does taint analysis work here?\", \"Why didn't explain find this flow?\", \"Add a new sink/source\",
Claude Code
$ npx -y skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis --agent claude-code
Codex
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a codex -y
Cursor
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a cursor -y
Gemini CLI
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a gemini-cli -y
GitHub Copilot
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a github-copilot -y
OpenCode
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a opencode -y
Windsurf
$ npx skills add abhigyanpatwari/GitNexus --skill gitnexus-taint-analysis -a windsurf -y
name: gitnexus-taint-analysis description: "Use when working on, reviewing, or extending GitNexus's CFG/taint/PDG subsystem (the `--pdg` layers), or when reasoning about source→sink data-flow findings. Examples: \"How does taint analysis work here?\", \"Why didn't explain find this flow?\", \"Add a new sink/source\", \"Review the interprocedural taint code\"."
Expert knowledge for the opt-in `--pdg` program-analysis subsystem: control-flow graphs, reaching definitions, and intra- + inter-procedural taint. Read this before touching `gitnexus/src/core/ingestion/cfg/**` or `gitnexus/src/core/ingestion/taint/**`, or when explaining a finding.
Taint runs **on** the graph, not beside it. Each layer is opt-in behind `--pdg` and a default `analyze` run is **byte-identical** (the golden parity gate is the hard floor for every change here).
L1 CFG per-function basic blocks + control-flow edges (M1 #2081) L2 REACHING_DEF GEN/KILL def→use data dependence (pure solver) (M2 #2082) L3 Taint (intra) source→sink over RD facts, minus sanitizers (M3 #2083) L4 Taint (inter) per-function summaries composed over CALLS (M4 #2084)
CFG + harvests def/use + call-site facts onto `ParsedFile.cfgSideChannel` (plain, structured-clone-safe data — never AST nodes). The main thread runs the pure solvers. NEVER re-parse on the main thread (re-introduces the #1983 OOM).
pdg window (`scope-resolution/pipeline/run.ts`, gated `input.pdg === true`), because the disk-backed ParsedFile store is cleared when that phase ends — a standalone post-`mro` phase would read empty data. The cross-function fixpoint (L4) is the exception: it runs in its OWN registered phase (`taintSummaries`) AFTER scope-resolution, because it needs the COMPLETE call graph, and consumes small plain summary data threaded out via `ScopeResolutionOutput`.
`harvestFunctionSummary`, and `solveInterprocTaint` are pure and deterministic (no graph, no I/O, no logger; sorted outputs). Snapshot tests and content-derived edge ids depend on it.
Forward reachability over RD facts from matched **sources** to matched **sinks**, killed by **sanitizers**. Key design points worth internalizing:
`exec(escape(x))` (safe) from `exec(x)` (finding); the harvest records nested call structure (`SiteRecord.parent`/via-tags) so sanitizer interposition is precise.
`SinkKind`s; a sink fires unless its kind is in the set. So `escape(req.body)` suppresses `res.send` (xss) but STILL fires `db.query` (sql) — a kind-blind kill would be a suppressed live injection (the forbidden FN direction). `path.basename(t)` neutralizes path-traversal only, not command-injection.
distinct findings; `exec(req.body, req.query)` is two findings).
`reason` column via the shared versioned codec (`taint/path-codec.ts`).
The production approach (Sharir-Pnueli 1981; the same shape as Meta's Pysa and Mariana Trench, and FB Infer) — NOT full IFDS tabulation. Each function is reduced to a compact **summary**, and summaries are composed over the already- resolved `CALLS` graph.
**Summary shape** (`taint/summary-model.ts`, whole-parameter granularity):
| Edge | Meaning | Analogue | |------|---------|----------| | `param→return` | a param flows to the return value | TITO — **reserved** (the floor already covers its recall; precision pass deferred) | | `param→callee-arg` | a param flows into arg *j* of a call (carries the path's neutralized sink kinds) | TITO into callee | | `param→sink` | a param reaches a modelled sink | partial/triggered sink | | `source→return` | the function generates+returns a source | generative — **composed** via the caller's `callResults` | | `source→callee-arg` | a generated source flows into a call | fixpoint SEED | | `callResults` | a user-function call's result flows to a sink/return/callee-arg in the caller | composes with callee `source→return` |
**The fixpoint** (`taint/interproc-solver.ts`): the unit is `(function, parameter, source)`. Seed from `source→callee-arg`, propagate via `param→callee-arg`, fire a finding when a tainted param meets `param→sink`.
lattice (`fn × param × source`), so the worklist converges — a recursive call just re-proposes an already-visited entry. SCC condensation would only refine processing order; correctness/termination don't require it.
too. Keying only by `(fn, param)` collapses multi-source flows: a sink param tainted by source A is marked visited and a later flow from source B is dropped before firing — the recurring multi-source bug class. (Bit M3; bit M4 U9.)
CALLEE NAME, not call-site line — line-base parity (CFG 1-based vs reference site) is fragile; the callee ide
GitNexus indexes a codebase into a knowledge graph of symbols, calls, dependencies and execution flows. Use it through your coding agent's MCP tools, the CLI, or a web graph explorer.
Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki,…
Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: \"Why is X failing?\", \"Where…
Use when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of…
Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or…
Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples:…
Use when the user wants the GitNexus engineering pipeline run end-to-end on a task: gitnexus-plan (plan depth chosen up front), a…
Query and invoke tools on MCP servers using fastmcp list and fastmcp call. Use when you need to discover what tools a server…
Design n8n AI agents the right way. Use when building or editing any @n8n/n8n-nodes-langchain.* AI node — an AI Agent, LLM chain,…
小红书内容发布技能。支持两种发布模式:(1) 上传图文模式 - 图片+短文;(2) 写长文模式 - 长篇文章+排版模板。 支持两种输入方式:用户提供完整内容和图片/图片URL,直接发布;或提供网页URL,自动提取内容和图片。…