AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Doc Wiki

skill-narailabs-doc-wiki-doc-wiki · by narailabs

Manage the current codebase's doc-wiki — bootstrap with optional atlas (init), full-doc generation (atlas), source ingest from Jira/Confluence/GitHub/Notion/AWS/GCP/databases/files/URLs with `--refresh` for re-fetch (ingest), search + synthesis with promote-to-page and shortest-path modes (query), health check + self-heal (lint), targeted page edit (edit), restore an archived page (unarchive), to…

No reviews yet
0 installs
47 views
0.0% view→install

Install

$ agentstack add skill-narailabs-doc-wiki-doc-wiki

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-narailabs-doc-wiki-doc-wiki)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Doc Wiki? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

doc-wiki — Documentation Wiki Generator & Maintainer

You are an orchestrator for a multi-skill documentation ecosystem. Your job is to route /doc-wiki:* commands to the right combination of TypeScript scripts and sub-agents, compile wiki pages from multiple sources, and maintain the wiki's quality over time.

How this works

  1. The user invokes a /doc-wiki:* command (or describes what they want in natural language)
  2. You read wiki.config.yaml to understand the wiki's configuration
  3. You call TypeScript scripts (compiled to JavaScript, invoked via node) for deterministic operations
  4. You dispatch sub-agents (via Agent tool) for platform-specific source fetching
  5. You use your own reasoning for compilation, cross-referencing, and quality decisions
  6. Post-operation hooks (crosslink + tag-harmonize) run automatically after write operations

Scripts location

All TypeScript scripts live at: {skill_path}/scripts/ and are compiled to .js siblings via npm run build.

Before first use, install dependencies and build:

npm install
npm run build

Requires Node 20.

Commands

The wiki exposes 8 slash commands, dispatched by this section. Each subsection below documents the flow:

  • /doc-wiki:init — scaffold + onboard (+ optional atlas chain)
  • /doc-wiki:atlas — full application documentation
  • /doc-wiki:ingest — fetch + extract + compile a source (--refresh re-fetches)
  • /doc-wiki:query — summary-first search and synthesis (--promote saves an answer; --review triages archives)
  • /doc-wiki:lint — health check + auto-heal
  • /doc-wiki:edit — targeted page changes
  • /doc-wiki:unarchive — restore an archived page from wiki/_archive/
  • /doc-wiki:stats — token efficiency and cost metrics

/doc-wiki:init — Bootstrap a wiki (scaffold + onboard + optional atlas)

This is the single first-run command. It scaffolds the wiki directory, runs the ecosystem onboarding Q&A, and offers to dispatch /doc-wiki:atlas at the end so a brand-new repo reaches a usable wiki in one invocation.

Args: [--path ] [--domain ] [--name ] [--no-atlas | --atlas]

--atlas and --no-atlas are mutually exclusive; passing both errors before any side effects.

Phase 1 — Detect existing state.

  • If /wiki.config.yaml exists: AskUserQuestion "Wiki already initialized. Re-run onboarding?". Skip Phase 2 (scaffold) either way; on "yes" continue to Phase 3 (onboarding Q&A); on "no" skip directly to Phase 4 (atlas decision).
  • Otherwise: continue to Phase 2.

Phase 2 — Scaffold.

Create the directory scaffold and initial configuration.

node {skill_path}/scripts/init_wiki.js --path  --domain "" --name ""

This creates: wiki/, raw/, graph/, audit/, log/, outputs/, .wiki-cache/, .wiki-ignore, and a default wiki.config.yaml.

Default path inference (when --path is omitted): Before invoking the script, derive a sensible default and confirm with the user via AskUserQuestion. Inference rule:

  1. Read the project name from the first marker file present in the cwd: package.json (name field, strip @scope/ prefix), then pyproject.toml ([project] name or [tool.poetry] name), then Cargo.toml ([package] name), then go.mod (last segment of module path), then pom.xml (`), then Gemfile/*.gemspec, else fall back to basename(cwd)`.
  2. Convert the name to kebab-case: lowercase, replace runs of [^a-z0-9]+ with -, strip leading/trailing -.
  3. Default path = docs/-wiki/ (relative to cwd).

Always present this default to the user via AskUserQuestion with two options: (a) accept the default docs/-wiki/, (b) "Other" → free-form path entry. Do NOT proceed silently to the script with an inferred path; init is a one-time scaffold and the path becomes a long-lived convention, so the explicit confirmation is worth the extra turn. Apply the same AskUserQuestion pattern for --domain (default: kebab-name) and --name (default: derived from the package's display name or kebab-name) when those are also omitted, but accept the inferred values as a single bundled question rather than three separate prompts.

The wrapper commands/init.md only routes into this skill — it does not pre-collect arguments. Arg collection happens here so the inference + confirmation logic stays co-located with the rest of the orchestrator.

After running the script, create initial files:

  • wiki/index.md — master catalog (empty, will populate during ingest)
  • wiki/summaries.md — enriched summary index (empty initially)
  • wiki/overview.md — evolving big-picture synthesis

Phase 3 — Onboarding Q&A.

Interactive setup that detects the codebase ecosystem and configures wiki infrastructure. This is YOUR reasoning — not a script. Uses parse_config.ts for config I/O and dispatches wiki-orm-agent for ORM/database detection.

Phase 3, step 1 — Auto-detect language/framework:

Scan the project root for build files and infer the stack:

| Marker file | Detection | |---|---| | pom.xml, build.gradle | Java (Maven / Gradle) | | requirements.txt, pyproject.toml, setup.py | Python | | package.json | Node.js / TypeScript | | Gemfile | Ruby | | *.csproj, *.sln | .NET / C# | | go.mod | Go | | Cargo.toml | Rust |

Present findings and ask user to confirm or correct.

Phase 3, step 2 — Detect ORM:

Dispatch wiki-orm-agent (via Agent tool) to scan for entity definitions matching shipped ORM profiles:

  • JPA: @Entity, @Table, @Column annotations in .java/.kt files
  • SQLAlchemy: declarative_base(), Base = declarative_base(), mapped_column in .py files
  • Django: models.Model subclasses in models.py / models/ directories
  • Prisma: schema.prisma file with model definitions
  • TypeORM: @Entity(), @Column() decorators in .ts files
  • Entity Framework: DbContext subclasses, [Table] attributes in .cs files
  • ActiveRecord: ApplicationRecord or ActiveRecord::Base subclasses in .rb files

Present detected ORM profile and entity count. Ask user to confirm.

Phase 3, step 3 — Detect database:

Detect the database engine yourself by reading these files (no subagent dispatch needed):

  • Docker Compose services (docker-compose.yml, compose.yaml): image names like postgres:, mysql:, mongo:
  • Connection strings in config files (.env, application.properties, database.yml, settings.py)
  • ORM config (e.g., DATABASES dict in Django, spring.datasource.url in Spring Boot)

When live introspection is needed (verify schema matches code), run gather({ prompt: "describe schema for ", consumer: "doc-wiki" }) — the db connector inside narai-primitives handles it via the policy gate. Present detected database(s) and connection details (redacted credentials). Ask user to confirm.

Phase 3, step 4 — External services Q&A:

Ask the user about each external source integration:

  1. "Do you use Jira for issue tracking? If so, what project key(s)?"
  2. "Do you use Confluence for documentation? If so, what space key(s)?"
  3. "Do you use GCP (BigQuery, Cloud SQL, Pub/Sub)? Which services?"
  4. "Do you use AWS (RDS, DynamoDB, S3)? Which services?"
  5. "Do you use Notion for documentation or knowledge base?"
  6. "Do you use GitHub wikis, discussions, or project boards?"

For each "yes", record the connector ID (e.g. jira, confluence) — these go into the enabled allowlist for consumers.doc-wiki in Phase 3, step 4b.

Phase 3, step 4b — Set up connector access:

/doc-wiki:ingest step 7 calls gather() from narai-primitives, which reads ~/.connectors/config.yaml (user-global) and ./.connectors/config.yaml (repo overlay) to know which connectors are enabled and how to authenticate. If neither file exists yet, walk the user through creating one.

  1. Check existence:

``bash ls -1 ~/.connectors/config.yaml ./.connectors/config.yaml 2>/dev/null ``

  1. If both are missing — bootstrap from the example:
  • Tell the user: "Your wiki needs ~/.connectors/config.yaml to access the external services you enabled. I'll generate a starter from .connectors/config.example.yaml."
  • For each connector the user said "yes" to in Phase 3, step 4, ask one credential question:
  • Jira/Confluence: "Where does your Atlassian API token live? (env var name, keychain label, or file path)"
  • GitHub: "Where does your GitHub personal access token live?"
  • Notion: "Where does your Notion integration token live?"
  • AWS: "Use the default SDK credential chain (env / ~/.aws/credentials / IAM role)? Or a specific profile?"
  • GCP: "Use Application Default Credentials? Or a service account key file?"
  • Compose the YAML and write it to ~/.connectors/config.yaml. Include only the enabled connectors and a consumers.doc-wiki block listing them.
  • Verify the file parses by reading it back and looking for the expected connectors keys (no need to invoke loadResolvedConfig() from a one-shot script — a bad YAML file will be obvious).
  1. If at least one already exists — just confirm the enabled connectors line up with the user's Phase 3, step 4 answers. Suggest edits if there's a gap (e.g., user said "yes Confluence" but no confluence: block exists). Never edit an existing config without explicit confirmation.

Once the file is in place, the user's /doc-wiki:ingest calls will resolve credentials automatically via the connector's own credential loader — doc-wiki never reads or stores the secrets directly.

Phase 3, step 5 — Choose autonomy mode:

Present the four autonomy modes and ask user to choose:

  • conservative — ask before every write
  • balanced — auto-fix safe changes, ask for structural
  • autonomous — auto-fix everything, notify after
  • auto — choose per-operation based on risk score

Default: balanced.

Phase 3, step 6a — README quickstart preference:

Ask the user via AskUserQuestion:

> "Do you want doc-wiki to maintain a quickstart block in your README.md? It'll be auto-generated from wiki/getting-started.md on every /doc-wiki:atlas run, with hand-edits salvaged via LLM merge. You can change this later in wiki.config.yaml."

| Choice | Effect on wiki.config.yaml | |---|---| | Yes — generous (~30 lines) | ecosystem.readme.{enabled: true, quickstart_depth: generous, insert_markers_on_init: true} | | Yes — standard (~15 lines) | ecosystem.readme.{enabled: true, quickstart_depth: standard, insert_markers_on_init: true} | | Yes — minimal (~5 lines) | ecosystem.readme.{enabled: true, quickstart_depth: minimal, insert_markers_on_init: true} | | No, skip | ecosystem.readme.enabled: false |

If the user picked any "Yes", dispatch Agent(wiki-readme-agent) with {action: "init", project_root, wiki_root, quickstart_depth} to insert markers into README.md if it exists and has none.

Phase 3, step 6 — Install hooks + scaffold:

  1. Offer to install PreToolUse always-on hooks for the detected platform

Phase 3, step 6b — Optional multimodal deps (Q&A):

Ask the user once, before writing the config:

> "Your wiki may ingest audio/video files (.mp4, .mp3, .wav, ...) or YouTube URLs later. The extraction uses two optional tools that aren't installed by default: > - faster-whisper for local audio transcription (≈100 MB model on first use) > - yt-dlp for downloading YouTube audio (single binary) > > Shall I help you set these up? > - Yes, both → record ecosystem.multimodal.enabled: on and print exact install commands for the user's OS > - Yes, yt-dlp only → record on; still print the yt-dlp install command (whisper will be skipped when triggered) > - No, skip for now → record ecosystem.multimodal.enabled: optional (default); multimodal ingests will warn-and-skip until the user installs the tools later > - Never ask again → record ecosystem.multimodal.enabled: off; multimodal ingests are silenced entirely"

When the user says yes, print the exact commands (but DO NOT run them — Claude cannot assume a package manager):

  • macOS: brew install yt-dlp and pipx install faster-whisper
  • Linux: pipx install yt-dlp faster-whisper (or the distro's package manager)
  • Windows: pipx install yt-dlp faster-whisper
  1. Generate/update wiki.config.yaml with all detected settings (including the ecosystem.multimodal.enabled choice from Phase 3, step 6b):

``bash node {skill_path}/scripts/parse_config.js --config /wiki.config.yaml ``

  1. If wiki scaffold does not exist, run /doc-wiki:init automatically:

``bash node {skill_path}/scripts/init_wiki.js --path --domain "" --name "" ``

Output of Phase 3: A fully configured wiki.config.yaml with language, framework, ORM profile, database, external sources, autonomy mode, and multimodal preference. Wiki scaffold created if it did not already exist.

Phase 4 — Atlas decision.

  • If --no-atlas: stop.
  • If --atlas: dispatch /doc-wiki:atlas with the default facet set.
  • Otherwise: AskUserQuestion "Generate full documentation now with /doc-wiki:atlas? (Recommended for first-run.)"
  • Yes → dispatch /doc-wiki:atlas.
  • No → stop, print "Run /doc-wiki:atlas later when ready."

/doc-wiki:atlas — Full application documentation

Generate a comprehensive wiki for the entire codebase in one orchestrated pass: discover topics, ingest curated sources per topic × facet, synthesize global aggregation pages, validate existing content against current source state, produce drift/cost audit artifacts.

This is a meta-orchestrator over /doc-wiki:ingest. It does not replace the per-source ingest workflow — it batches it across all detected topics and facets, then runs a synthesis pass for the three global pages (wiki/overview.md, wiki/integrations.md, wiki/deploy.md) that aggregate per-topic content.

Synopsis:

/doc-wiki:atlas [--facets ] [--scope ] [--yes] [--dry-run]
                [--max-cost ] [--since ]
                [--validate-mode shallow|full] [--resume]
                [--wiki-root ]

| Flag | Default | Purpose | |---|---|---| | --facets | architecture,data-model,environments,api,operations | Per-topic facets to generate. Additive — never deletes pages outside this set from prior runs. | | --scope | (all detected) | Restrict to one topic for incremental runs. | | --yes | off | Skip phase confirmation gates (CI/unattended). | | --dry-run | off | Show planned ingests + cost estimate, write nothing. Validation pass still runs (read-only). | | --max-cost | 200.00 | Abort pre-write if estimate exceeds. Re-run with explicit higher value to override. | | --since | Smart default: timestamp of last op: atlas event in events.jsonl; else all-time (no git log --since). | Window for the gitlog drift scan. | | --validate-mode shallow\|full | shallow | shallow: structural + gitlog + semantic on sampled pages. full: semantic on every existing atlas page. | | --resume | off | Continue from .wiki-checkpoint.json (opName "atlas") without prompting. |

Phases:

  1. Detect state — call node {skill_path}/scripts/atlas_orchestrator.js detect-state --wiki-root . Output JSON ({state, atlas_pages, all_pages, last_run_id}) drives the branch:
  • state == "fresh" → wiki is empty or has ** = exactly that token if present (at most one — --no-cross-service wins if both somehow appear), or the empty string if neither was passed. Forward this **same ** verbatim to Phase 1b (inventory generate) only. Phase 1b's resolveCrossService then computes the decision (precedence: --no-cross-service > --cross-service > ecosystem.crossservice.enabled > AUTO ≥2 services) and **persists it into the manifest** as crossservice_enabled`. That persisted boolean — NOT the flag (which is empty in the AUTO path) — is the single source of truth: Phase

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.