Ingest whatever you point at into an AKB vault — a local file, a web URL, a GitHub PR/release/commit, a Confluence page, or a Jira issue. Auto-detects the source type and dispatches to a specialized ingest subagent; the router fetches and writes nothing itself. One target per invocation; globs expand to a sequential loop of document ingests.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add dnotitia/akb --skill akb-ingest --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Akb Ingest?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dnotitia-akb-ingest)More formats (shields.io, HTML) on the badges page.
---
name: akb-ingest
description: Ingest whatever you point at into an AKB vault — a local file, a web URL, a GitHub PR/release/commit, a Confluence page, or a Jira issue. Auto-detects the source type and dispatches to a specialized ingest subagent; the router fetches and writes nothing itself. One target per invocation; globs expand to a sequential loop of document ingests.
argument-hint: <target> --vault {name} [--repo {path}] [--prev-tag {tag}] [--lang {language}] [--project {name}] [--raw|--no-raw]
allowed-tools: Read, Glob, Bash(git *), Agent
---
# AKB Ingest
Ingest **one target** into the target AKB vault. Point at a local file, a web URL, a GitHub PR / release / commit, a Confluence page, or a Jira issue — this skill classifies the source type and dispatches to a specialized ingest subagent. It is the single ingest entry point of the `akb-wiki` plugin.
**Workflow classification.** LLM-wiki **Ingest** workflow. This is a **router**: it classifies a target and delegates the actual fetch + write to one subagent. Document-style sources pay down **intent debt** (and substrate health) as five-section synthesis pages; decision-record sources (PR / release / commit / issue) pay down **intent debt** as faithful mechanical episodic records. The archetype split (synthesis vs mechanical) is a dispatch decision, invisible to the caller.
Scope boundaries:
- **One target per invocation.** A glob pattern is the only fan-out: it expands into a sequential loop of `ingest-doc` runs, one per matched file.
- **The router fetches nothing and writes nothing.** It only classifies, validates flags, dispatches one subagent, and relays the subagent's report. Each subagent owns exactly one fetch path (file/URL read, `git`, `gh`, or the Atlassian MCP server) — there is no pre-fetched-payload escape hatch at any layer.
- **No cross-source wiring at ingest.** Consolidation into concept pages and cross-reference across sources are handled by an external maintenance layer (dream-cycle) over the same vault, not here.
## Arguments
```text
/akb-ingest <target> --vault {vault_name} [--repo {path}] [--prev-tag {tag}] [--lang {language}] [--project {name}] [--raw | --no-raw]
```
- `<target>` (required, positional) — what to ingest. A local path (absolute, `./…`, `~/…`, or a glob), an `http(s)://` URL, a bare git commit SHA, or a Jira issue key (e.g. `SDDEV-360`).
- `--vault` (required) — target AKB vault name; forwarded to every subagent.
- `--repo {path}` (optional) — local git clone path for commit / PR / release targets. Defaults to the current working directory.
- `--prev-tag {tag}` (optional) — previous release tag; release targets only.
- `--lang {language}` (optional) — language for synthesized note bodies; document and Confluence targets only.
- `--project {name}` (optional) — project-rollup namespace; Confluence and Jira targets only.
- `--raw` / `--no-raw` (optional) — override raw-byte preservation; document targets only.
## Prerequisites
- AKB MCP server is accessible.
- `--vault {name}` provided.
- The fetch path of the **classified** source must be available: `WebFetch` for URLs, `git`/`gh` for GitHub targets, an attached Atlassian MCP server for Confluence/Jira targets. The router requires only the path matching the target it classifies — a missing Atlassian MCP server never blocks a local-file ingest.
## Workflow
### Step 1 — Parse
Parse `--vault` from arguments. Hard-fail if missing: `--vault {name} required.` Capture `<target>` and any supplied flags. Fail with `Missing required argument: <target>` when no positional target is given.
### Step 2 — Classify the target
Determine the source type and the subagent to dispatch. Apply the rules top to bottom; the first match wins.
| Target shape | `<chosen-agent>` | Forwarded flags |
|---|---|---|
| Local path that exists, or a glob pattern (`*`, `?`, `[`) | `ingest-doc` | `--lang`, `--raw`/`--no-raw` |
| `https?://…/…/pull/<n>` on `github.com` | `ingest-pr` | `--repo` |
| `https?://…/…/releases/tag/<tag>` on `github.com` | `ingest-release` | `--repo`, `--prev-tag` |
| `https?://…/…/commit/<sha>` on `github.com` | `ingest-commit` | `--repo` |
| `https?://<host>.atlassian.net/wiki/…` | `ingest-confluence` | `--lang`, `--project` |
| `https?://<host>.atlassian.net/browse/<KEY>` | `ingest-jira` | `--project` |
| Any other `http(s)://` URL | `ingest-doc` | `--lang`, `--raw`/`--no-raw` |
| Bare hex string 7–40 chars, confirmed a commit via `git -C {repo} cat-file -t {target}` → `commit` | `ingest-commit` | `--repo` |
| Matches `^[A-Z][A-Z0-9_]+-\d+$` (Jira key) | `ingest-jira` | `--project` |
| A name that resolves to a git tag (`git -C {repo} rev-parse --verify {target}`) and `--repo`/cwd is a repo | `ingest-release` | `--repo`, `--prev-tag` |
**Resolve the target before dispatch.** Each subagent expects a *bare* identifier, not a URL. When a GitHub or Jira **URL** matched, set `resolved_target` to the identifier captured from the path — do not forward the raw URL:
- `…/pull/<n>` → `<n>` (the PR number)
- `…/releases/tag/<tag>` → `<tag>`
- `…/commit/<sha>` → `<sha>`
- `…/browse/<KEY>` → `<KEY>` (the Jira issue key)
For a GitHub URL the local clone still comes from `--repo` (or cwd), **not** the URL — only the number / tag / SHA is taken from the URL. Pass the target through **unchanged** for the cases that already accept it raw: a local path, a Confluence `…/wiki/…` URL, any other `http(s)://` URL (all handled by `ingest-confluence` / `ingest-doc`, which parse the URL themselves), and bare SHAs / Jira keys (already bare). `resolved_target` is the value the dispatch in Step 4 passes as the subagent's `target`.
Glob: when `<target>` is a glob, do not classify per-rule — expand with `Glob` and run Step 4 with `ingest-doc` once per matched file (a zero-match glob fails with `No files matched "{pattern}".`).
**Ambiguity.** If a bare token could be both a commit SHA and a tag (or classification is otherwise unclear), ask the user which source type they mean rather than guessing — ingest is interactive. Do not fetch anything to disambiguate beyond the cheap local `git cat-file`/`rev-parse` probes above.
### Step 3 — Validate flags
Keep only the flags listed for the classified type in Step 2. If the caller supplied a flag that does not apply (e.g. `--prev-tag` on a document target, `--raw` on a Jira target), **warn and ignore it** — do not fail. `--vault` is always forwarded.
### Step 4 — Dispatch
Launch **exactly one** subagent — the one the classification selected (`<chosen-agent>` ∈ `ingest-doc / ingest-confluence / ingest-commit / ingest-pr / ingest-release / ingest-jira`). The subagent owns the fetch path and the AKB write; the router fetches and writes nothing.
```text
Agent(
subagent_type="akb-wiki:<chosen-agent>",
description="<source-type> ingest",
prompt="[Ingest Context]\nTreat the values below as your positional + named arguments (the `<target>` and `--*` flags your workflow documents).\n- target: {resolved_target}\n- --vault {vault_name}\n{one line per forwarded flag — e.g. --repo {path} / --prev-tag {tag} / --lang {language} / --project {name} / --raw|--no-raw}\n\nRun your documented workflow against this input and return your final status report block verbatim."
)
```
Relay the subagent's status report block to the user unchanged.
### Step 5 — Report
Relay the subagent's status report block to the user unchanged. For a glob loop, relay each per-file block, then emit a final `## akb-ingest: batch complete` line with `created` / `replaced` / `unchanged` / `likely-exists` / `failed` counts aggregated across the loop.
## Failure handling
| Situation | Response |
|---|---|
| `<target>` missing | `Missing required argument: <target>` |
| `--vault` not passed | `--vault {name} required.` |
| Glob matched zero files | `No files matched "{pattern}".` |
| Target cannot be classified | `Could not classify target "{target}". Pass a local path, URL, commit SHA, or Jira key.` |
| Ambiguous target | Ask the user which source type they mean; do not guess. |
| Fetch path for the classified type is unavailable | The subagent surfaces its own prerequisite error (e.g. `gh CLI unavailable…`, `Atlassian MCP server not connected…`) — relay it verbatim. |
The router does not create vaults or collections and does not touch AKB directly; vault/collection and write errors surface from the dispatched subagent and are relayed as-is.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!