Learn
iurykrieger/claude-bedrock
Ingests an external data source into the Second Brain. An agent skill from iurykrieger/claude-bedrock.
Teaches the Second Brain to recognize a new external data source.
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins teach --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/bedrock/skills/teach .claude/skills/teach && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .claude/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teachType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins teach --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/bedrock/skills/teach .agents/skills/teach && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .agents/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins teach --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/bedrock/skills/teach .cursor/skills/teach && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .cursor/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ccplugins/awesome-claude-code-plugins.git --path plugins/bedrock/skills/teach--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins teach --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/bedrock/skills/teach .gemini/skills/teach && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .gemini/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ccplugins/awesome-claude-code-plugins teachInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/bedrock/skills/teach .github/skills/teach && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .github/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ccplugins/awesome-claude-code-plugins teach --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ccplugins/awesome-claude-code-plugins.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/bedrock/skills/teach .opencode/skills/teach && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "teach" agent skill from https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/bedrock/skills/teach into .opencode/skills/teach/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "teach", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
teachTeaches the Second Brain to recognize a new external data source.
Teach is an agent skill from ccplugins/awesome-claude-code-plugins. Teaches the Second Brain to recognize a new external data source. Fetches content from Confluence, Google Docs, GitHub repositories, remote URLs, or any local file format supported by docling (DOCX, PPTX, XLSX, PDF, HTML, EPUB, images, Markdown, CSV, and more), converts non-markdown formats to markdown via docling, runs the /graphify extraction pipeline, and delegates entity persistence (including the graphify-output merge) to /bedrock:preserve. Use when: "bedrock teach", "bedrock-teach", "teach", "ingest…
Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Documents & Office, covering Document parsing, Second brain and Cloud office suites. It works with GitHub, Google Docs, Confluence and Microsoft Excel. The repository describes itself as: Awesome Claude Code plugins — a curated list of slash commands, subagents, MCP servers, and hooks for Claude Code. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5bd4f16. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteEditGlobGrepSkillAgentWebFetchmcp__plugin_github_github__*…and 1 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitpipxpip3pipcurlrsyncFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Teach loads about 5.9k tokens when it runs. Until then it costs about 175 tokens; SKILL.md has 2,503 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, Skill, Agent, WebFetch, mcp__plugin_github_github__*, mcp__plugAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ccplugins/awesome-claude-code-plugins at commit 5bd4f16, republished under its Apache-2.0 licence (© ccplugins). 2,503 words, ~5,870 tokens.
.claude/skills/teach/SKILL.md (or your agent's skills folder).Entity definitions and templates are in the plugin directory, not at the vault root. Use the "Base directory for this skill" provided at invocation to resolve paths:
<base_dir>/../../entities/<base_dir>/../../templates/{type}/_template.md<base_dir>/../../CLAUDE.md (already injected automatically into context)Where <base_dir> is the path provided in "Base directory for this skill".
Resolve which vault to teach. This skill can be invoked from any directory.
Step 1 — Parse --vault flag:
Check if the input arguments include --vault <name>. If found, extract the vault name and remove it from the arguments (the remaining text is the source URL/path).
Step 2 — Resolve vault path:
If --vault <name> was provided:
Read the vault registry at <base_dir>/../../vaults.json. Find the entry matching the name.
If not found: error — "Vault <name> is not registered. Run /bedrock:vaults to see available vaults."
If found: set VAULT_PATH to the entry's path value. Store the resolved vault name as VAULT_NAME.
If no --vault flag — CWD detection:
Read <base_dir>/../../vaults.json. Check if the current working directory is inside any registered vault path
(CWD starts with a registered vault's absolute path). If multiple match, use the longest path (most specific).
If found: set VAULT_PATH to the matching vault's path. Store its name as VAULT_NAME.
If CWD detection fails — default vault:
From the registry, find the vault with "default": true.
If found: set VAULT_PATH to the default vault's path. Store its name as VAULT_NAME.
If no resolution:
Error — "No vault resolved. Available vaults:" followed by the registry listing.
"Use --vault <name> to specify, or run /bedrock:setup to register a vault."
Step 3 — Validate vault path:
test -d "<VAULT_PATH>" && echo "exists" || echo "missing"If missing: error — "Vault path <VAULT_PATH> does not exist on disk. Run /bedrock:setup to re-register."
Step 4 — Read vault config:
cat <VAULT_PATH>/.bedrock/config.json 2>/dev/nullExtract language and other relevant fields for use in later phases.
From this point forward, ALL vault file operations use <VAULT_PATH> as the root.
<VAULT_PATH>/graphify-out//bedrock:preserve, pass --vault <VAULT_NAME>This skill receives an external source (URL or local path), fetches its content to a temporary
directory, converts non-markdown files to markdown via docling, runs the /graphify extraction
pipeline on the tmp content, and delegates entity persistence (plus graphify-output merge) to
/bedrock:preserve.
You are a fetcher and orchestrator agent. Your job is to:
/tmp/graphify to extract a knowledge graph into a per-run temp directory/bedrock:preserveYou do NOT classify entities, create vault files, write to the vault directly, or merge graph state.
All extraction is done by /graphify. All writes (including the graphify-output merge into the
vault's cumulative graphify-out/) are done by /bedrock:preserve.
Follow the phases below in order, without skipping steps.
Before any fetch or conversion, verify that the docling CLI is available. If missing, install
it silently using the same fallback chain /bedrock:setup uses for graphify, emitting a single
status line before proceeding.
if command -v docling >/dev/null 2>&1; then
echo "Phase 0: docling already installed — proceeding."
else
echo "Phase 0: docling not found — installing silently (one-time setup, may take a few minutes for model download)."
# Step 1 — pipx (preferred, isolated)
if command -v pipx >/dev/null 2>&1; then
pipx install docling >/dev/null 2>&1 || true
fi
# Step 2 — pip (fallback if pipx unavailable or failed)
if ! command -v docling >/dev/null 2>&1; then
if command -v pip3 >/dev/null 2>&1; then
pip3 install --user docling >/dev/null 2>&1 || true
elif command -v pip >/dev/null 2>&1; then
pip install --user docling >/dev/null 2>&1 || true
fi
fi
# Final re-probe
if ! command -v docling >/dev/null 2>&1; then
echo "ERROR: docling install failed. Run /bedrock:setup to install it, or install manually: pipx install docling"
exit 1
fi
echo "Phase 0: docling installed."
fiFailure mode: If install fails (no pipx/pip, network outage, permission denied), abort
the skill with the error above. Do NOT fetch or mutate anything. Direct the user to /bedrock:setup.
No user prompt: this step is silent — one status line on success, one error line on failure.
The user provides an argument. Classify it in the following priority order. URL-type routing is unchanged; local files no longer have an extension allowlist — any existing file is accepted, and Phase 1.5 decides whether to run docling on it.
| Input | Detected type | Fetch method |
|---|---|---|
URL containing confluence or atlassian.net | confluence | Read skills/confluence-to-markdown/SKILL.md, follow instructions, save output to tmp |
URL containing docs.google.com | gdoc | Read skills/gdoc-to-markdown/SKILL.md, follow instructions, save output to tmp |
URL containing github.com | github-repo | git clone --depth 1 to tmp + GitHub MCP enrichment (docling never runs on GitHub repos) |
URL starting with http:// or https:// (any other) | remote-binary | Download raw bytes to tmp via curl/WebFetch; Phase 1.5 decides conversion |
| Local file path (any existing file) | local-file | Copy to tmp; Phase 1.5 decides conversion |
| Local directory path | local-dir | Copy directory to tmp |
| No match above | manual | Ask the user: "Could not identify the source type. Paste the content or provide a valid URL/path." |
If no argument was provided: ask the user "What source do you want to ingest? Provide a URL (Confluence, Google Docs, GitHub, or any HTTP(S) URL) or a local file path (any file type — docling will convert it to markdown if supported)."
All content is fetched to a temporary directory. This is the single input path for /graphify.
TEACH_TMP="/tmp/bedrock-teach-$(date +%s)"
mkdir -p "$TEACH_TMP"
echo "Temporary directory: $TEACH_TMP"Store the path for use in subsequent phases.
Execute the fetch strategy for the detected type. All content lands in $TEACH_TMP/.
For GitHub URLs (e.g.: https://github.com/acme-corp/billing-api):
owner/repo and repo-name from the URLgit clone --depth 1 <url> "$TEACH_TMP/<repo-name>"mcp__plugin_github_github__get_file_contents → read the repo's README.mdmcp__plugin_github_github__list_commits → last 10 commitsmcp__plugin_github_github__list_pull_requests → last 5 PRs (state=all, sort=updated)$TEACH_TMP/<repo-name>/_github_metadata.mdBest-effort: If any MCP call fails, continue with what was obtained. Do NOT block ingestion.
For Confluence URLs:
<base_dir>/../confluence-to-markdown/SKILL.md$TEACH_TMP/<slug>.md<slug> is derived from the page title or URL path (kebab-case, lowercase)If all three layers (MCP, API, browser) are unavailable: warn the user with the guidance message from the fetcher module and abort this source type.
For Google Docs or Sheets URLs:
<base_dir>/../gdoc-to-markdown/SKILL.md/tmp/gdoc_{docId}.md or /tmp/gsheet_{docId}.md$TEACH_TMP/<slug>.md<slug> is derived from the document title or URL path (kebab-case, lowercase)If all three layers (MCP, API/public export, browser) are unavailable: warn the user with the guidance message from the fetcher module and abort this source type.
For any other HTTP/HTTPS URL, download the raw bytes so docling can operate on binary formats (PDF, DOCX, PPTX, XLSX, images, etc.) that WebFetch cannot return faithfully as text:
curl first for true binary fidelity:curl -fsSL -o "$TEACH_TMP/<filename-derived-from-url>" "<url>"<filename-derived-from-url> preserves the URL's basename (including extension) when
available; fall back to <slug>.bin if no extension is present.curl is unavailable or the URL returns an HTML page (by Content-Type), fall back to
WebFetch and save the response text as $TEACH_TMP/<slug>.md.If both attempts fail: warn "Could not fetch URL. Check if the URL is accessible." and abort.
Phase 1.5 decides whether the downloaded file goes through docling, based on the file extension.
For local files:
test -f).cp "<local-path>" "$TEACH_TMP/"No extension-based filtering — any existing file is accepted. Phase 1.5 decides conversion.
For local directories:
rsync -a --exclude='.git' --exclude='node_modules' --exclude='bin' --exclude='obj' \
--exclude='.vs' --exclude='TestResults' --exclude='packages' \
"<local-dir>/" "$TEACH_TMP/$(basename <local-dir>)/"At the end of this phase, you should have:
$TEACH_TMP: directory with all fetched content (local path for graphify)source_url: original URL or file path provided by the usersource_type: confluence, gdoc, github-repo, remote-binary, local-file, local-dir, or manualReport: "Phase 1 complete: Content fetched to $TEACH_TMP. Source type: <source_type>."
For every fetched file in $TEACH_TMP that is not a GitHub repo and is not already markdown
output from Confluence/GDoc fetchers, check whether docling supports the file type and, if so,
convert it to markdown in place. GitHub repos (source_type == "github-repo") skip this phase
entirely and flow straight to graphify.
Docling supports conversion for the following file types (as of the version installed by
Phase 0 / /bedrock:setup). Compare by lowercase file extension:
.pdf .docx .pptx .xlsx
.html .htm
.md .adoc
.png .jpg .jpeg .tiff .bmp
.epub.md is listed here because docling passes markdown through largely unchanged. In practice,
running docling on .md is a no-op we skip to save time — treat .md as already-markdown..txt and .csv are NOT in docling's supported list (they are plain-text already); skip
docling and pass through raw.For each file under $TEACH_TMP (excluding files inside <repo-name>/ subdirectories of a
github-repo source — skip those entirely):
Skip by type — already markdown or plain text: if extension is .md, .txt, or .csv,
leave the file untouched and record status passed-through for the report. Graphify handles
these natively.
Skip by routing — not docling-supported: if the extension is not in the supported list
above AND is not .md/.txt/.csv, leave the file untouched and record status
passed-through with a note (type not supported by docling). Graphify decides what to do
with the raw file.
Run docling: otherwise, invoke docling and replace the source file with the converted
markdown. Docling writes to the working directory by default; use --to md and --output
to target a predictable path:
cd "$TEACH_TMP"
docling --from <auto> --to md --output "$TEACH_TMP" "<relative-file-path>"Docling produces <stem>.md alongside the source. After a successful run:
rm "<relative-file-path>".converted for the report with the new markdown filename.Failure fallback: if docling exits non-zero for a file:
.md, .txt, or .csv (already handled by rule 1,
so this branch is defensive): leave the original file in place, record status
failed-fallback (raw passthrough), and continue with other files..docx, .pdf, etc.): abort the entire skill. Clean
up $TEACH_TMP (rm -rf "$TEACH_TMP") and emit a clear error:
ERROR: docling failed to convert <file>. Aborting ingestion. Temp directory cleaned up.
Do NOT proceed to graphify or preserve.At the end of Phase 1.5:
$TEACH_TMP contains markdown files (either originals or docling-converted).converted: ran docling successfullypassed-through: skipped docling (markdown/plain text or unsupported type)failed-fallback: docling failed but file was text-native; continued with raw fileReport: "Phase 1.5 complete: N converted, M passed-through, P failed-fallback."
Use the Skill tool to invoke /graphify, directing its output to a per-run temp directory
(not the vault). The vault's cumulative graphify-out/ is updated by /bedrock:preserve's
Phase 0 merge step, not by this skill.
/graphify $TEACH_TMP --mode deep --obsidian --obsidian-dir $TEACH_TMPThe convention used here: passing --obsidian-dir $TEACH_TMP makes graphify write its
graphify-out/ tree under $TEACH_TMP/graphify-out/. Store that path as:
GRAPHIFY_OUT_NEW="$TEACH_TMP/graphify-out"IMPORTANT:
/graphify runs its full pipeline: detect → extract (AST + semantic) → build → cluster → analyze → obsidian export.$GRAPHIFY_OUT_NEW, which is inside the temp directory. The vault's
<VAULT_PATH>/graphify-out/ is NOT touched by this skill — /bedrock:preserve owns that write.After /graphify completes, verify the output in the temp location:
if [ -f "$GRAPHIFY_OUT_NEW/graph.json" ] && [ -s "$GRAPHIFY_OUT_NEW/graph.json" ]; then
echo "graphify output verified: graph.json exists and is non-empty"
else
echo "ERROR: $GRAPHIFY_OUT_NEW/graph.json is missing or empty"
fiIf graph.json is missing or empty:
rm -rf "$TEACH_TMP"The following files should exist in $GRAPHIFY_OUT_NEW:
graph.json — knowledge graph (nodes, edges, communities)GRAPH_REPORT.md — audit report with god nodes, surprising connectionsobsidian/*.md — one markdown file per node.graphify_analysis.json — communities, cohesion scores, god nodesReport: "Phase 2 complete: graphify extraction finished in $GRAPHIFY_OUT_NEW. Graph: N nodes, M edges. Will be merged into the vault by /bedrock:preserve."
Pass the temp graphify output path and provenance metadata to /bedrock:preserve. The
skill's Phase 0.2 merges this temp output into the vault's cumulative graphify-out/:
graphify_output_path: $GRAPHIFY_OUT_NEW # = $TEACH_TMP/graphify-out/
source_url: <source_url from Phase 1>
source_type: <source_type from Phase 1>IMPORTANT:
/teach does NOT classify graphify nodes into entity types. Entity classification, filtering,
matching, and user confirmation are all /bedrock:preserve's responsibility (Phase 1.3)./teach does NOT merge the graph into the vault. That is /bedrock:preserve's responsibility
(Phase 0.2). We pass the per-run temp path; preserve merges and then reads from the merged
<VAULT_PATH>/graphify-out/.Use the Skill tool to invoke /bedrock:preserve --vault <VAULT_NAME> passing the graphify
output reference (pointing at $GRAPHIFY_OUT_NEW) and provenance metadata as the argument.
The --vault <VAULT_NAME> flag ensures preserve writes to the same vault.
/bedrock:preserve returns:
graphify_merge block: {nodes_added, nodes_merged, edges_added, stale_flag_set} from
preserve's Phase 0.2 mergeRecord the result for use in the report (Phase 4).
After /bedrock:preserve confirms completion, remove the temporary directory:
rm -rf "$TEACH_TMP"
echo "Temporary directory cleaned up: $TEACH_TMP"IMPORTANT: Clean up AFTER /preserve confirms, not after graphify finishes.
The graphify output in graphify-out/ is NOT cleaned up — it lives in the vault
and is used by /bedrock:ask for graph traversal.
Present to the user:
## /bedrock:teach — Report
### Ingested source
- **Type:** <source_type>
- **URL/Path:** <source_url>
### Docling conversion (Phase 1.5)
| File | Status | Notes |
|---|---|---|
| report.docx | converted | output: report.md |
| notes.txt | passed-through | text-native |
| diagram.svg | passed-through | type not supported by docling |
Summary: N converted, M passed-through, P failed-fallback.
(Omit this block entirely for `source_type == "github-repo"` where docling is bypassed.)
### Extraction (via /graphify)
- **Graph:** N nodes, M edges, P communities (fresh run into $TEACH_TMP)
- **Report:** $GRAPHIFY_OUT_NEW/GRAPH_REPORT.md (before merge)
### Graphify merge (via /bedrock:preserve Phase 0.2)
| Metric | Value |
|---|---|
| Nodes added | N |
| Nodes merged | M |
| Edges added | P |
| Analysis marked stale | true / false |
(Pulled verbatim from `/bedrock:preserve`'s `graphify_merge` return block.)
### Entities processed (via /bedrock:preserve)
| Type | Name | Action |
|---|---|---|
| actor | billing-api | update |
| topic | 2026-04-migration-payments | create |
| code | process-transaction | create |
### Provenance
Each entity above received in the `sources` frontmatter field:
- url: <source_url>
- type: <source_type>
- synced_at: <today's date>
### Git
- Commit: <hash from /bedrock:preserve or "no entities">
- Push: success / failed (reason)
### Suggestions
- [list of entities mentioned in the content but not created, if any]
- [recommendations for future re-ingestion, if applicable]| Rule | Detail |
|---|---|
| Invoke /graphify via Skill tool | NEVER call graphify Python API directly (graphify.detect, graphify.build, graphify.extract, etc.). Always invoke via the Skill tool. |
| All remote content fetched to /tmp | Every input type is fetched to /tmp/bedrock-teach-<ts>/ before invoking graphify. graphify receives only a local path. |
| /teach does NOT classify entities | Entity classification, filtering, matching, and user confirmation are /bedrock:preserve's responsibility. /teach passes the graphify output path and provenance metadata. |
| Delegate to /bedrock:preserve | ALL entities are persisted via /bedrock:preserve — teach does NOT create, update, or write vault entities. |
| /teach does NOT merge graphify output into the vault | Graphify is invoked into $TEACH_TMP/graphify-out/ (per-run temp dir); /bedrock:preserve's Phase 0.2 merges that into <VAULT_PATH>/graphify-out/. /teach never writes directly to the vault's graphify-out/. |
| Docling auto-install is silent | Phase 0 auto-installs docling if missing with a single status line — no user prompt. Fail the skill if install fails; direct the user to /bedrock:setup. |
| Docling skipped for GitHub repos | source_type == "github-repo" skips Phase 1.5 entirely — cloned repos flow straight to graphify. |
| Docling routing rule | Run docling on files with docling-supported extensions (see Phase 1.5.1). Pass-through for .md/.txt/.csv and for extensions not in docling's supported list. |
| Docling failure fallback | On docling non-zero exit: if file is .md/.txt/.csv, continue with raw file. For any other extension, abort the entire skill and clean up $TEACH_TMP. |
| Cleanup /tmp after /preserve confirms | Remove /tmp/bedrock-teach-<ts>/ only after /preserve confirms completion, not after graphify finishes. |
| Provenance via source_url | ALWAYS include source_url and source_type when delegating to /bedrock:preserve. |
| Internal fetcher skills | Read internal skills from <base_dir>/../confluence-to-markdown/SKILL.md and <base_dir>/../gdoc-to-markdown/SKILL.md for content fetching. Never invoke external skills. |
| Best-effort for external sources | If MCP or fetch fails, warn and continue with what was obtained. Never block ingestion. |
| MCP in main context | Do NOT use subagents for GitHub/Atlassian MCP calls — permissions are not inherited. |
| Maximum 2 push attempts | After that, abort and inform (handled by /preserve). |
| Sensitive data | NEVER include credentials, tokens, passwords, PANs, CVVs. |
| Vault resolution first | Resolve VAULT_PATH before any file operation — never assume CWD is the vault |
| Pass --vault to /preserve | ALWAYS include --vault <VAULT_NAME> when delegating to /bedrock:preserve |
© ccplugins, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/bedrock/skills/teach of ccplugins/awesome-claude-code-plugins.
Open the folder on GitHubat commit 5bd4f16
Teach next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Teach this skillccplugins/awesome-claude-code-plugins | 967 | — | ~5.9k | Automated safety check: Notes | Apache-2.0 | |
| Learniurykrieger/claude-bedrock | 105 | — | ~6.5k | Automated safety check: Notes | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Markitshift-labs-ai/markit | 1.3k | — | ~299 | Automated safety check: Pass | MIT | |
| Markdown Converterintellectronica/agent-skills | 295 | 4 repos | ~492 | Automated safety check: Pass | CC0-1.0 | |
| To MarkdownMathews-Tom/armory | 327 | — | ~2k | Automated safety check: Pass | MIT |
iurykrieger/claude-bedrock
Ingests an external data source into the Second Brain. An agent skill from iurykrieger/claude-bedrock.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
shift-labs-ai/markit
Convert files and URLs to Markdown. An agent skill from shift-labs-ai/markit.
intellectronica/agent-skills
Convert documents and files to Markdown using markitdown. An agent skill from intellectronica/agent-skills.
Mathews-Tom/armory
Convert any file or URL to clean Markdown: PDF, DOCX, XLSX, PPTX, HTML, images (OCR), audio, CSV, YouTube.
Team-Commonly/commonly
Convert binary documents (PDF, DOCX, XLSX, PPTX, HTML, EPUB, images) to clean LLM-friendly Markdown using Microsoft's markitdown Python tool.
ccplugins/awesome-claude-code-plugins
Run structured AI meetings for plans, product ideas, technical designs, business decisions, feature proposals, and strategy choices.
ccplugins/awesome-claude-code-plugins
Bootstrap a new FastAPI backend with async SQLAlchemy 2.0, asyncpg, Alembic, Pydantic v2, and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Bootstrap a new Flutter mobile app with clean architecture, Riverpod, FVM-pinned SDK, current packages, and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Bootstrap a new Next.js (App Router, TypeScript) web app with current packages and no deprecated APIs.
ccplugins/awesome-claude-code-plugins
Write up a coding session for a non-technical stakeholder — the context, what was built, and the engineering reasoning behind it — the way a senior engineer briefs a product manager who does not…
ccplugins/awesome-claude-code-plugins
Aggiunge a un sito/app un agente di difesa che rileva e blocca richieste malevole (SQL injection, XSS, path traversal, brute force, bot) con rate limiting, blocklist IP e modalità lockdown che…
Categories
Teaches the Second Brain to recognize a new external data source. Teach is an agent skill from ccplugins/awesome-claude-code-plugins. Teaches the Second Brain to recognize a new external data source.
Teach fits situations like: : bedrock teach; import document; the user provides a Confluence; A remote file URL.
Run `npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a claude-code`. Or copy the skill folder (plugins/bedrock/skills/teach in ccplugins/awesome-claude-code-plugins) into .claude/skills/teach in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a codex`. Or copy the skill folder (plugins/bedrock/skills/teach in ccplugins/awesome-claude-code-plugins) into .agents/skills/teach in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ccplugins/awesome-claude-code-plugins --skill teach -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/teach, .gemini/skills/teach, .github/skills/teach and .opencode/skills/teach in your project.
Going by SKILL.md and its folder, Teach needs the command-line tools its instructions call (git, pipx, pip3, pip, curl and rsync). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Glob, Grep, Skill, Agent, WebFetch, mcp__plugin_github_github__*, mcp__plugin_atlassian_atlassian__*.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Teach is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.9k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Teach: Learn (iurykrieger/claude-bedrock, 105 stars), Markitdown (ImCa0/just-laws, 781 stars), Markit (shift-labs-ai/markit, 1.3k stars) and Markdown Converter (intellectronica/agent-skills, 295 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ccplugins (a GitHub organization) maintains it in ccplugins/awesome-claude-code-plugins, which has 967 GitHub stars. The repository holds 68 skills in this directory. The repository was last updated on August 12, 2026.
Source: ccplugins/awesome-claude-code-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.