Skip to content
Back to skills

Infranodus

ASecurity

Text network analysis and knowledge graphs via the InfraNodus MCP server: analyze text structure, find content gaps, generate research questions and ideas, compare texts, optimize content for SEO/GEO, analyze Google search results, GraphRAG retrieval, structured memory. Accepts text, URLs (YouTube transcription included), and saved graphs. Also builds knowledge graphs of code repos and Obsidian vaults: invoked in a project folder ("graph this repo", "analyze this vault", "/infranodus") it min...

  • 119 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added August 31, 2026
ai-agentspythongoreactnodegitapi

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add infranodus/skills --skill infranodus --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Infranodus?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Infranodus
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/infranodus-infranodus/badge)](https://www.skillsdirectory.com/skills/infranodus-infranodus)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: infranodus
description: >-
  Text network analysis and knowledge graphs via the InfraNodus MCP server:
  analyze text structure, find content gaps, generate research questions and
  ideas, compare texts, optimize content for SEO/GEO, analyze Google search
  results, GraphRAG retrieval, structured memory. Accepts text, URLs (YouTube
  transcription included), and saved graphs. Also builds knowledge graphs of
  code repos and Obsidian vaults: invoked in a project folder ("graph this
  repo", "analyze this vault", "/infranodus") it mines docs, PDF text,
  docstrings, WHY/NOTE comments, and commit/PR/issue history into saved graphs
  with a report, and keeps them current by replacing the statements of changed
  files in place. When infranodus/manifest.json exists in the project root,
  answer questions about themes, decisions, rationale, or gaps by querying the
  existing graphs FIRST, before reading files. For an LLM-authored knowledge
  base built from sources (wiki pages, curated ontologies), prefer the llm-wiki
  skill.
metadata:
  homepage: https://infranodus.com
  openclaw:
    emoji: "πŸ•ΈοΈ"
    requires:
      env: ["INFRANODUS_API_KEY"]
    primaryEnv: INFRANODUS_API_KEY
---

# InfraNodus

Text network analysis and knowledge graph tools via the InfraNodus MCP server.

## How this skill talks to InfraNodus

- **Queries and analysis** β€” use the native MCP tools in the session
  (`mcp__infranodus__<tool>`, or the InfraNodus connector's equivalents).
  The server's own instructions and tool schemas are the authoritative
  reference for every tool's parameters and workflow patterns β€” do not
  duplicate or second-guess them here.
- **Bulk uploads (repo/vault graphs) β€” session server FIRST.** Prefer the
  InfraNodus MCP server already connected to this session (e.g. the
  claude.ai InfraNodus connector): the agent performs the upload itself
  with that server's `create_knowledge_graph` tool, chunk by chunk,
  following the upload contract in
  [references/repo-graph.md](references/repo-graph.md) Step 3 (one
  `graphName` per scope, heading-aware chunks, `maxNodes: 500`, the
  scope's declared `wikilinksMode`, paced calls, 429 backoff, 413
  bisection, and the same manifest + report bookkeeping the script does).
- **Fallback β€” the bundled script.** Only when the session has NO
  InfraNodus MCP tools connected, use `scripts/upload_scopes.py`, which
  uploads through the MCP server configured in this agent's own config β€”
  `<project>/.mcp.json`, then `~/.claude.json` (this project's section,
  then global), then `~/.claude/settings.json` β€” with project scope
  winning. An `http` entry is reached at its own `url`; a `stdio` entry
  (a local or self-hosted server) is launched as its own subprocess.
  Preflight: `upload_scopes.py [project_dir] --check-auth`. The script
  can never reach a cloud OAuth connector β€” that token lives remotely β€”
  which is exactly why the connector path above is agent-driven.
- **Credentials (script path only) are never read from config files.**
  For an `http` server the key comes from `INFRANODUS_API_KEY` in the
  environment and nowhere else; for a `stdio` server the entry's own
  `env` block is passed to the subprocess untouched. There is no endpoint
  default and no credential fallback: one server, one attempt, and a
  failed connection falls back to the session connector if one exists β€”
  otherwise it is a hard stop. Do not work around this by exporting a key
  you found in some other application's config β€” that is how content
  lands in an account the user never chose.
- **If neither is available** (no session tools AND no configured server),
  `--check-auth` prints the `claude mcp add` commands for both the hosted
  and the local option. Offer to run one of them, or offer to keep the
  extracted scope files local. Never guess an endpoint.
- **Provenance** β€” each uploaded scope records `endpoint`, `transport`,
  `account`, and `verified` (the date the graph was successfully read back)
  in the manifest. When a graph query fails, compare the manifest's
  `endpoint`/`account` against the session's own server before assuming the
  graph is missing: the same `graphName` means different graphs on different
  servers and accounts.

## Quick orientation (details live in the server's tool schemas)

- Structural overview of a text/URL/graph: `generate_knowledge_graph`,
  `generate_topical_clusters`; persist with `create_knowledge_graph`
  (uploads to the same `graphName` append statements); remove statements
  from a saved graph with `delete_statements` (by category, exact text,
  query, date, ids, or all β€” `confirm: false` is a dry run that lists the
  matches; the repo/vault update flow uses it to replace changed files in
  place); edit statements IN PLACE (id, date, order kept) with
  `update_statements` β€” `edits: [{match, content}]` to correct individual
  lines (a digest principle, a memory item), or one selector plus `set`
  (add/remove categories, timestamp) / `replace: {pattern, with}` to
  relabel a source or rename a `[[concept]]` across a graph; same dry
  run β†’ `confirm: true` contract.
- What's missing / ideation: `generate_content_gaps` β†’
  `generate_research_questions` / `generate_research_ideas`;
  `develop_text_tool` for the combined pipeline.
- Retrieval: `retrieve_from_knowledge_base` (GraphRAG over a saved graph),
  `analyze_existing_graph_by_name` (structure of a saved graph),
  `generate_contextual_hint` (lightweight structural overview β€” good
  context injection before answering broad questions),
  `generate_responses_from_graph` (prompt-based answers and expert
  advice generated from a saved graph β€” good for advice/recommendation
  questions the graph should answer in its own voice),
  `list_graphs` / `search` / `fetch` for discovery.
- Reasoning check: `optimize_reasoning` on a draft synthesis β€” diagnoses
  biased/focused/diversified/dispersed and suggests which topics or gaps
  to develop further.
- Comparison: `overlap_between_texts`, `difference_between_texts`,
  `merged_graph_from_texts` (each takes a `contexts` array).
- SEO/GEO: `generate_seo_report` (90s+ timeout) or the individual
  `analyze_google_search_results` / `analyze_related_search_queries` /
  `search_queries_vs_search_results` tools.
- Diversity stats in responses: `biased` β†’ too concentrated, `focused` β†’
  somewhat concentrated, `diversified` β†’ balanced, `dispersed` β†’ scattered.

## Repo / Vault Graphs (invoked inside a project folder)

When asked to graph, analyze, or ask questions about a repo, project, or
Obsidian vault, follow [references/repo-graph.md](references/repo-graph.md)
β€” it is the single authoritative runbook. In short:

1. `infranodus/manifest.json` exists + the request is a question β†’ route
   via the manifest (each graph records its `purpose` and `topics`) and
   query the graphs; do NOT re-extract. The content lives only in the
   graphs β€” there are no local content files.
   Manifest exists + build/update intent (or bare `/infranodus`) β†’ run
   `python3 scripts/repo2statements.py . --detect` first and lead the
   AskUserQuestion with "Update changed scopes (<its summary>)", then
   "Rebuild a scope in place", "Add a new scope", "Full rebuild". Update =
   `repo2statements.py . --update [--scope X]` β†’ `upload_scopes.py .`
   (the uploader deletes the changed files' old statements by category
   with `delete_statements`, then appends the delta to the same graph;
   files that only moved β€” same content, new path β€” are relabelled in
   place with `update_statements`, nothing re-extracted); rebuild =
   re-extract β†’ `upload_scopes.py . --force` (clears the graph first,
   same name). No changes β†’ offer query mode. Correcting a few lines of
   the authored digest = edit the file + `update_statements` edits, not a
   rebuild (repo-graph.md, Digest step 4).
2. On a bare launch with no manifest (no target named), inventory the folder, then
   AskUserQuestion what to build: full graph (recommended) / a specific
   folder / docs containing certain terms / one document (see the runbook
   for the follow-up questions). Skip that question when the user already
   named the target. Then ALWAYS ask the build mode (multi-select): **full
   ingestion** (all prose scopes, no LLM), **structure map** (deterministic:
   tree, imports, exports, docstring headlines in a repo, page links in a
   vault β€” cheap, no LLM), **digest + structural feedback** (YOU read the
   target and write simple statements on how it works β€” principles, rules,
   procedures, hand-offs β€” then `optimize_knowledge_base` on the uploaded
   graph: what dominates, what is under-developed, which clusters never
   connect), and/or
   **ontology** (the server distils entities and typed relations from the
   structure or docs graph into `onto-<project>` β€” how the parts fit together;
   costs server LLM tokens). The digest is for reviewing and improving the
   project; ontology is for navigating it. Ontology needs a structure or docs
   upload to exist first; the digest needs nothing.
3. Build: `python3 scripts/repo2statements.py .` (full), `... --structure`,
   and/or `... --digest` (prints the reading list and the format, exit
   code 2 = "now write the file", not an error; write the file it names;
   run it again with the same flags to register) β€” one flag per run β†’
   `python3 scripts/upload_scopes.py .`
   (upload, run in background β€” records routing metadata into the
   manifest, appends a dated section to the append-only
   `INFRANODUS_REPORT.md` log, deletes the intermediate scope files; add
   `--ontology` for the ontology layer, or call `generate_ontology_graph`
   with `sourceGraphName` yourself on Path A) β†’
   `upload_scopes.py . --register-project` (once). The register step asks
   ONE AskUserQuestion (spec in the runbook's Step 4; skip it when
   CLAUDE.md already has the `infranodus-memory` marker block): routing
   rules only, or also the end-of-session insight-memory convention
   (`--register-project --with-memory`) β€” a second marker block that has
   every substantive session distill the USER's insights and save them,
   on their approval, to a `<slug>-insights` memory graph via
   `memory_add_relations` (recall: `memory_get_relations`). Never install
   it unasked. Insights are the user's realizations β€” keep them apart
   from project-learnings (agent operations) and from the content graphs
   (what the files say).

## Companion skills

Sibling skills from the same family that compose with this one. Invoke
via the Skill tool ONLY when the skill appears in the available-skills
listing (match by name/description β€” never assume an install path; names
can vary slightly by install). If one is absent, mention it can be
installed from https://github.com/infranodus/skills and continue.

Knowledge-base workflows:

- **llm-wiki** β€” builds and maintains an LLM-authored knowledge base
  (summarized wiki pages, curated ontologies) from raw sources. Route
  there when the corpus needs authored content β€” scanned PDFs, "second
  brain" / research-wiki requests, anything meant to compound over time.
  This skill maps what exists; llm-wiki writes new knowledge on top. Its
  curated scopes share the same `infranodus/` manifest and their `wiki-*`
  graphs are equally queryable (see the runbook's policy rules).
- **project-learnings** β€” what agents *learned operating in* a project
  (traps, conventions, where things live, decisions), saved to an opt-in
  `learn-<project>` graph via the server's `get_project_learnings` /
  `add_project_learnings` tools. This skill maps what a repo contains; that
  one records what working in it taught the agent. Same entity names, so
  the graphs compose (`difference_between_texts` between them shows modules
  with code but no learnings). Route there at the start/end of substantive
  tasks and on "save what you learned" β€” never enable it unasked.
- **ontology-generator** β€” LLM-generated `[[wikilinks]]` ontology with
  `[relationCode]` tags from a topic or text. Offer it when the user
  wants semantic relations (X causes Y) rather than this skill's
  deterministic co-occurrence mining; output pastes straight into
  InfraNodus.
- **seo-analysis** β€” full SEO research workflow (keyword research, search
  intent, informational supply vs demand) on the same MCP tools. Prefer
  it when the request is an SEO project rather than a one-off report
  (a single `generate_seo_report` call needs no extra skill).

Thinking and analysis lenses β€” offer these when a graph diagnosis
suggests them, or on the user's own cues:

- **shifting-perspective** β€” diagnoses a discourse's structural diversity
  (`optimize_text_structure`) and develops under-represented viewpoints.
  Offer when a graph comes back biased/focused or the user is stuck in
  one frame ("what am I missing?").
- **cognitive-variability** β€” guides shifts between zoom levels and
  connect/explore modes to break rigid or looping thinking; the natural
  follow-up to a shifting-perspective structural diagnosis.
- **critical-perspective** β€” questions assumptions and hunts blind spots
  through curiosity-driven challenge. Offer when a synthesis needs to be
  challenged rather than expanded.
- **rhetorical-analyst** β€” analyzes arguments and debate tactics across
  persuasion, rhetoric, and logic; it opens with this skill's graph
  tools. Offer for debates, speeches, comment threads, "why is this
  persuasive?".
- **perspective-reversal** β€” flips a conflict or negotiation to the
  opponent's viewpoint for tactical advice. Offer when the analyzed
  discourse is adversarial (dispute, standoff, negotiation).
- **embodied-navigation** β€” applies embodied movement principles
  (equanimous scanning, adaptive fluidity, tensegrity) to situations
  mapped as networks. Offer for stuckness, rigidity, or conflict framed
  as dynamics rather than argument.
- **vipassana-meditation** β€” equanimous, non-reactive observation that
  breaks fixation loops. Offer when the conversation shows craving for a
  particular outcome or aversion to an uncomfortable finding, and bare
  attention should precede analysis.

Files in this skill

  • SKILL.md13.3 KB
  • references/repo-graph.md34.1 KB
  • scripts/repo2statements.py70.1 KB
  • scripts/tests/test_incremental.py18.2 KB
  • scripts/upload_scopes.py69.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.