Skip to main content

knowledge-add-repository

Add a reference repository under .knowledge/repositories. Clones it locally (shallow), writes a per-repo detail markdown file with frontmatter, updates the type-level INDEX.md catalog, and registers the repo in setup-repos.sh. Use this whenever the user wants to add a reference repository, external repo, migrated application example, framework reference, or any git repository as a tracked reference - even if they don't say "submodule" explicitly. Triggers on phrases like "add this repo", "add a reference", "include this repository", "track this repo as", "add as submodule", "add migrated example", "add reference application".

跳到安装

来源信息

仓库
AxonIQ/agent-skills
最近来源活动
2026年6月16日 11:57
检测到的 SKILL.md 语言
英语
星标
2
分支
0

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
5 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
knowledge:add-repository
description
Add a reference repository under .knowledge/repositories. Clones it locally (shallow), writes a per-repo detail markdown file with frontmatter, updates the type-level INDEX.md catalog, and registers the repo in setup-repos.sh. Use this whenever the user wants to add a reference repository, external repo, migrated application example, framework reference, or any git repository as a tracked reference - even if they don't say "submodule" explicitly. Triggers on phrases like "add this repo", "add a reference", "include this repository", "track this repo as", "add as submodule", "add migrated example", "add reference application".
# Add Reference Repository to `.knowledge/repositories` ## Goal Clone a repository locally under `.knowledge/repositories/<type>/...` and produce **two** documentation artifacts: 1. A **per-repo detail file** (`<type>_<path-joined-by-underscores>.md`) with YAML frontmatter and a body shaped by the repo's type. 2. A **type-level `INDEX.md`** entry — a short, scannable catalog row with a `Keywords:` field that links to the detail file. Why the split: a single growing `INDEX.md` per type stops being read in full once it gets long, and important context near the bottom is missed. The detail files carry the long content; the index stays short so Claude can scan it reliably and pick which detail file to open. ## When to use The user wants to add an external git repository as a local reference. Common phrasings — trigger on any of these even if "submodule" isn't said: - "add this repository as a reference" - "add this repo to knowledge" - "track this repo at branch X" - "add migrated example axon4/foo and axon5/foo" - "add reference application" - "include this repository" ## Repository types Three types are supported. Each has its own template and INDEX shape: | `repo_type` | What it is | Where it lives | | ------------------ | --------------------------------------------------- | ------------------------------------------------------------- | | `axonframework` | A clone of an Axon Framework source tree | `.knowledge/repositories/axonframework/<RepoName>/` | | `axon-examples` | A migrated example application (axon4 ↔ axon5 pair) | `.knowledge/repositories/axon-examples/{axon4,axon5}/<app>/` | | `ai-bestpractices` | General reference (prompt eng, agent loops, etc.) | `.knowledge/repositories/ai-bestpractices/<repo>/` | ## Inputs (gather from the user) **Always required:** - `url` — git URL of the repository. - `repo_type` — one of `axonframework`, `axon-examples`, `ai-bestpractices`. - `repo_path` — relative to repo root, under `.knowledge/repositories/<type>/`. - `purpose` — 1–3 sentences. Used in the detail file and the INDEX one-liner. - `keywords` — 3–7 short, discriminative terms. Ask if not volunteered. These appear in both frontmatter and `INDEX.md`'s `Keywords:` line, so they should be the kind of words a future search would actually use. **Optional, but ask when relevant:** - `branch` — passed to `git clone --branch`. - `commit` — short hash to pin. Checked out after clone. - `feature_highlights` / `key_paths` / `description` — body content. - `highlights` — curated callouts the user wants surfaced to AI agents (documentation URLs, files to start with, things to skip). Ask for at least one bullet when creating a new detail file; only leave the `## Highlights` section as `- _none_` if the user explicitly declines. **`axon-examples` additionally requires:** - `variant` — `axon4` or `axon5`. - `app_name` — the application name shared across variants. - `language` — `Kotlin` or `Java`. Ask if missing. - `build_tool` — `maven` or `gradle`. Ask if missing. - `architecture` — optional (e.g. `Vertical Slice`, `Hexagonal`). - For the `axon5` side: `migration_notes` — inline notes about choices, alternatives, limitations. The kind of thing a migration skill should learn from (e.g. "PaymentSaga migrated using repository-based state instead of workflow extension"; "Deadlines not migrated — no Axon 5 equivalent without Workflow extension"). - When pairing two sides: branches/commits to compare for the Migration Diff callout. The skill **must ask** for these if not provided — the callout is meaningless without them. ## Filename and path derivation Detail filename = type-dir + `_` + submodule path joined by `_`, with `.md`. | Submodule path | Detail filename | | ------------------------------------------------------ | -------------------------------------------- | | `.knowledge/repositories/axonframework/AxonFramework5` | `axonframework_AxonFramework5.md` | | `.knowledge/repositories/axon-examples/axon4/order` | `axon-examples_axon4_order.md` | | `.knowledge/repositories/axon-examples/axon5/order` | `axon-examples_axon5_order.md` | | `.knowledge/repositories/ai-bestpractices/cookbook` | `ai-bestpractices_cookbook.md` | Both files (detail + INDEX) sit **inside the type directory**, alongside the submodule(s). The detail file MUST NOT be named `CLAUDE.md` or `SKILL.md` — those are blocked by `.claude/hooks/block-knowledge-repositories-claude-read.sh` and would become unreadable. ## Workflow 1. **Verify working directory.** Run from repo root. If `git status` shows unrelated unstaged changes that might get swept into the commit, warn the user and ask whether to continue. 2. **Clone the repository (shallow).** ```bash git clone --depth 1 --single-branch [--branch <branch>] <url> <repo_path> ``` Omit `--branch` when no branch was specified (clones the default branch). Prefer `--depth 1` to keep the local checkout small; contributors who need full history can `git -C <path> fetch --unshallow` afterwards. 3. **Lock as fetch-only.** `.knowledge/repositories/` is read-only by policy (see `.knowledge/README.md`). Disable the push URL immediately after cloning: ```bash git -C <repo_path> remote set-url --push origin DISABLED ``` Verify with `git -C <repo_path> remote -v` — the `(push)` line must read `DISABLED`. 4. **Pin to commit if requested.** ```bash git -C <repo_path> checkout <commit> ``` Prefer `git -C <path>` over `cd <path> && … && cd -` — it can't leak `cwd` state into your next Bash call. The detached-HEAD warning is normal — ignore it. **Never use bare `cd <repo_path>`** inside this skill; the same rule applies to fetch/checkout in the retarget sub-workflow below. 5. **Write the per-repo detail file.** Read the template for this repo type: - `axonframework` → `references/templates-axonframework.md` - `axon-examples` → `references/templates-axon-examples.md` - `ai-bestpractices` → `references/templates-ai-bestpractices.md` Fill in the frontmatter and body sections. Every detail file must include a `## Highlights` section (use `- _none_` only if the user explicitly declines to add one). 6. **Update the type-level `INDEX.md`.** Read `references/index-entry-templates.md` for the per-type entry shape. Read the existing `INDEX.md` first to preserve order and the established pattern. If the file is missing or empty, write the standard AI-agent header (see the templates file) and append the new entry below it. 7. **(axon-examples only) Pair with the counterpart if it exists.** - If the counterpart variant's detail file is already present, update the counterpart's frontmatter to reflect the new pairing: - On the axon4 source: append the new axon5 filename to `migrated_to` (promote to a list if it was scalar and a second target now exists). - On the axon5 target: set `migrated_from` to the axon4 source filename. - `migrated_from` is **always a single scalar** — a migration has exactly one source. - `migrated_to` is **a list** — one source can have many migration strategies. Use scalar form only when there's exactly one target. - Update the application's INDEX entry to list the new variant bullet. - If both sides now exist and the Migration Diff callout is missing, write it using the branches/commits the user provided. **If the user hasn't provided them, ask before writing the callout.** 8. **Register in `setup-repos.sh`.** Append a `clone_or_update` call to `.knowledge/scripts/setup-repos.sh` following the established pattern — one call per path, with the correct branch (or none if default): ```bash clone_or_update \ <url> \ <repo_path> \ [<branch>] ``` No `.gitignore` change needed — `.knowledge/repositories/` is already ignored as a whole. 9. **Commit.** Selective `git add` — never `git add .` or `-A`. Stage: - `git add -f` for the new/updated detail file(s) and `INDEX.md` — `.knowledge/repositories/` is globally gitignored, so `-f` is required. - `git add` (no `-f`) for `.knowledge/scripts/setup-repos.sh`. Commit message focused on what was added and why, without any Claude Code attribution (user's standing rule). 10. **Report.** Tell the user: - Repository path and tracked ref (branch/commit). - Detail file path created. - INDEX.md section updated. - For axon-examples: which counterpart side links were updated, if any. - Commit hash. ## Sub-workflow: Retarget a repository's tracked branch The user asks to change the `branch` an existing repository tracks ("retarget AxonFramework5 to feat/5.1-openrewrite", "switch this repo to branch X", "follow main now"). Don't re-run the full add workflow — make a focused three-touch update: 1. **Move the local repo to the new branch.** ```bash git -C <repo_path> fetch origin <new-branch> git -C <repo_path> checkout <new-branch> ``` Use `git -C` — see step 4 above. 2. **Update the detail file's frontmatter.** Change `branch:` to the new branch. Keywords usually don't need to change; revisit Highlights only if the new branch implies a different audience. 3. **Update the INDEX entry's branch label.** The `branch \`…\`` segment in the `[Details](...)` line must match the new frontmatter. 4. **Update `setup-repos.sh`.** Find the `clone_or_update` call for this path and change its branch argument. Commit all together (`setup-repos.sh`, the detail file, `INDEX.md`) with a message like `knowledge: retarget <RepoName> to <new-branch>`. Selective `git add` as in step 8. Report the new tracked branch and the current HEAD commit hash. ## Sub-workflow: Back-fill detail file for an already-cloned repository A repository directory exists under `.knowledge/repositories/` but has no per-repo detail file (legacy state, or cloned manually outside this skill). The main "path already exists → fail loudly" rule does NOT apply here — only to fresh adds that would overwrite. Procedure: 1. **Confirm** the directory exists and has a `.git` folder. If either is missing, fall back to the main workflow (full add) instead. 2. **Skip the clone and pin** (no `git clone`, no checkout). **Still run step 3 (lock the push URL)** — idempotent, and important for repos cloned manually outside this skill that may still have a live push URL. 3. **Check `setup-repos.sh`.** If the path is not already listed in `.knowledge/scripts/setup-repos.sh`, add it (step 8 of the main workflow). 4. **Resume at step 5** — write the detail file from the template, filling `branch:` from `setup-repos.sh` and reading the working tree for `key paths`. 5. **Step 6** — add the INDEX entry as normal. 6. **Step 9** — commit the detail file, INDEX update, and any changes to `setup-repos.sh`. The local repo directory is untouched. 7. **Report** that this was a back-fill (not a clone) so the user knows no clone operation occurred. ## MUST do - Read the existing `INDEX.md` and the relevant template file before writing — preserve established order and pattern. - Keep `migrated_from`/`migrated_to` cross-links bidirectional and consistent. If A's `migrated_to` lists B, then B's `migrated_from` must equal A. - Surface `language` and `build_tool` (axon-examples) on every variant bullet in `INDEX.md` so readers can choose without opening detail files. - Ask for branches/commits before writing the Migration Diff callout. - Ask for `keywords` if the user hasn't volunteered any. - Ask for at least one `## Highlights` bullet on every new detail file. - Lock the push URL (`git -C <path> remote set-url --push origin DISABLED`) immediately after cloning. Also run this in the back-fill sub-workflow — it's idempotent and protects manually-cloned repos. - Append the `clone_or_update` call to `setup-repos.sh` — required for the repo to be reproducible on fresh checkouts. ## MUST NOT do - Do NOT add Claude Code attribution in commit messages. - Do NOT use `git add .` or `git add -A`. - Do NOT silently overwrite an existing detail file or repository directory — fail loudly and ask the user how to proceed. - Do NOT name the detail file `CLAUDE.md` or `SKILL.md` — blocked by hook. - Do NOT skip the `INDEX.md` update; a repo without an index entry is incomplete work. - Do NOT bundle unrelated changes into the commit. **Exception:** on the very first use of this skill in a repo, the skill's own scaffolding (`SKILL.md`, hooks, `.knowledge/README.md`, empty type-level `INDEX.md` files, and any repos added during the same bootstrap pass) may legitimately be uncommitted. Bundling them into a single "init knowledge repositories" commit is acceptable — selective `git add` still applies (no `.`/`-A`), but the staged set will be larger than a steady-state add. From the second invocation onward, the rule is strict: only files this skill touched belong in the commit. - Do NOT `cd <repo_path>` inside the skill — use `git -C <path>`. The `cd` form leaks `cwd` across subsequent Bash calls in the same session. ## Edge cases - **Same upstream URL, different paths** — fully supported. Common for `axon4/<app>` and `axon5/<app>` pointing at the same upstream repository. - **Detached HEAD after `git checkout <commit>`** — normal. Ignore the warning. - **`INDEX.md` does not exist or is empty** — create it with the standard AI-agent header (see `references/index-entry-templates.md`) and append the new entry. - **Repository directory already present at path** — fail loudly. Do not overwrite or re-clone. - **Detail file already present** — fail loudly with `diff` guidance. Do not silently overwrite. - **Clone fails (network/auth)** — surface the error verbatim, do not retry silently. Ask the user to verify URL/auth. - **Only one side of an axon-examples pair exists** — that's fine. Document the present side, mark the counterpart as `_migration pending_` in the INDEX entry, and leave the cross-link frontmatter absent (or as an empty list) until the counterpart is added. - **Repository present but no detail file** — recovery, not an error. Use the "Back-fill detail file for an already-cloned repository" sub-workflow above. Do not re-clone. - **User asks to change a repository's tracked branch** — use the "Retarget a repository's tracked branch" sub-workflow above. Do not remove and re-clone. - **Bootstrap commit (first use in repo)** — see the MUST NOT
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看