Research
iusztinpaul/ai-research-os-workshop
Build, extend, AND query a persistent LLM-maintained wiki for any research topic.
Re-synchronizes the vault with external sources. An agent skill from iurykrieger/claude-bedrock.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add iurykrieger/claude-bedrock --skill sync -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install iurykrieger/claude-bedrock sync --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/iurykrieger/claude-bedrock.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sync .claude/skills/sync && 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 "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .claude/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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/iurykrieger/claude-bedrock/tree/main/skills/syncType 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 iurykrieger/claude-bedrock --skill sync -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install iurykrieger/claude-bedrock sync --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iurykrieger/claude-bedrock.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sync .agents/skills/sync && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .agents/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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 iurykrieger/claude-bedrock --skill sync -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install iurykrieger/claude-bedrock sync --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iurykrieger/claude-bedrock.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sync .cursor/skills/sync && 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 "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .cursor/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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/iurykrieger/claude-bedrock.git --path skills/sync--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 iurykrieger/claude-bedrock --skill sync -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install iurykrieger/claude-bedrock sync --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iurykrieger/claude-bedrock.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sync .gemini/skills/sync && 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 "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .gemini/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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 iurykrieger/claude-bedrock syncInstalls 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 iurykrieger/claude-bedrock --skill sync -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/iurykrieger/claude-bedrock.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sync .github/skills/sync && 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 "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .github/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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 iurykrieger/claude-bedrock --skill sync -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install iurykrieger/claude-bedrock sync --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/iurykrieger/claude-bedrock.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sync .opencode/skills/sync && 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 "sync" agent skill from https://github.com/iurykrieger/claude-bedrock/tree/main/skills/sync into .opencode/skills/sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync", 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.
syncRe-synchronizes the vault with external sources. An agent skill from iurykrieger/claude-bedrock.
Sync is an agent skill from iurykrieger/claude-bedrock. Re-synchronizes the vault with external sources. In default mode, scans the sources field of all entities, deduplicates URLs, fetches updated content from each source (Confluence, GDocs, GitHub, Markdown), performs incremental diff and delegates writing to /bedrock:preserve. With --people, scans actor repositories via GitHub API and identifies active contributors. With --github, detects relevant activity in repositories and correlates PRs with topics/projects via LLM semantic matching. Use when: "bedrock sync"…
Its SKILL.md is about 11k 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 Knowledge Management. It works with GitHub, Confluence and Obsidian. The repository describes itself as: Second Brain automation for Obsidian vaults — entity management, ingestion, compression, and sync via Claude Code skills. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7cac16c. 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:
BashReadWriteEditGlobGrepSkillAgentmcp__plugin_github_github__*mcp__plugin_atlassian_atlassian__*From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghFrom 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.
Sync loads about 11k tokens when it runs. Until then it costs about 155 tokens; SKILL.md has 4,475 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 found patterns that need a careful read before installing.
> Add to the prompt: "Autonomous mode — do not ask for confirmation, process directly."allowed-tools: Bash, Read, Write, Edit, Glob, Grep, Skill, Agent, mcp__plugin_github_github__*, mcp__plugin_atlassiAutomated 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 iurykrieger/claude-bedrock at commit 7cac16c, republished under its MIT licence (© iurykrieger). 4,475 words, ~11,025 tokens.
.claude/skills/sync/SKILL.md (or your agent's skills folder).Entity definitions and templates are in the plugin directory, not in 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 sync. 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 before parsing --people or --github.
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, git.strategy, 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>/actors/, <VAULT_PATH>/people/, etc.git -C <VAULT_PATH> <command>/bedrock:preserve, pass --vault <VAULT_NAME>This skill synchronizes the vault with external sources. It operates in three modes:
| Mode | Flag | Description |
|---|---|---|
| Sources (default) | (none) | Re-synchronizes entities with a populated sources field |
| People | --people | Scans actor repositories and identifies active contributors |
| GitHub | --github | Detects activity in repos and correlates PRs with topics/projects |
Analyze the argument passed by the user:
--people → go to Mode: Sync People (below)--github → go to Mode: Sync GitHub (below)Note: If no argument is passed, or the argument does not contain recognized flags, execute the default mode (Sync Sources).
This skill scans the sources field of all vault entities, deduplicates by URL,
fetches updated content from each external source, compares with existing entities
in the vault (incremental diff), and delegates all changes to /bedrock:preserve for centralized writing.
/bedrock:sync does NOT write entities directly — all entity writing goes through /bedrock:preserve.
After re-sync, /bedrock:preserve updates synced_at in the sources field of affected entities.
/bedrock:sync does NOT ingest new sources — for that, use /bedrock:learn.
You are an execution agent. Follow the phases below in order, without skipping steps.
Execute:
git -C <VAULT_PATH> pull --rebase origin mainIf the pull fails:
git -C <VAULT_PATH> rebase --abort and warn the user. Do NOT proceed without resolving.Provenance is recorded in the sources field of each entity's frontmatter.
Scan all entities to collect unique URLs.
sources field:Grep pattern "^sources:" in directories: actors/, people/, teams/, topics/, discussions/, projects/, fleeting/sources field from the YAML frontmatter.
Each entry has: {url, type, synced_at}{
"https://mycompany.atlassian.net/...": {
type: "confluence",
synced_at: "2026-04-09",
entities: ["actors/billing-api.md", "topics/2026-04-feature-x.md"]
},
"https://github.com/acme-corp/billing-api": {
type: "github-repo",
synced_at: "2026-04-10",
entities: ["actors/billing-api.md"]
}
}type in (confluence, gdoc, github-repo, markdown)type = csv or manual (log: "URL X ignored — non-syncable type")Report: "Phase 1: N entities with sources, M unique URLs found, K syncable, J ignored (non-syncable type)."
For each syncable source, fetch updated content:
For sources with source_type: confluence:
<base_dir>/../confluence-to-markdown/SKILL.mdFor sources with source_type: gdoc:
<base_dir>/../gdoc-to-markdown/SKILL.mdFor sources with source_type: github-repo:
owner/repo from the URL (path segments after github.com/)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)Best-effort: If any MCP call fails, continue with what was obtained. Do NOT block the sync.
For sources with source_type: markdown:
url fieldReport: "Phase 2: N sources read successfully, M failed (list)."
Use Read to read ALL entity definition files from the plugin (see "Plugin Paths" section):
<base_dir>/../../entities/*.md
These files define what each entity type is, when to create, and how to distinguish them.
Internalize these definitions — you will use them to classify content.
Use Glob to list all files in each entity directory (excluding _template.md):
<VAULT_PATH>/actors/*.md<VAULT_PATH>/people/*.md<VAULT_PATH>/teams/*.md<VAULT_PATH>/topics/*.md<VAULT_PATH>/discussions/*.md<VAULT_PATH>/projects/*.md<VAULT_PATH>/fleeting/*.mdFor each file found:
billing-api)name (or title) and aliases fields from the YAML frontmatter{filename, name, aliases, type} for matchingFor each source successfully read in Phase 2:
Identify entities mentioned in the updated content:
Compare with the source's entities_generated:
update (if there is new info in the content)createentities_generated but NOT in updated content → keep (do not delete)Classify new entities:
create candidates, consult the entity definitions:Projects:
projectis a valid type in extraction. When classifying new entities, pay special attention to signals of initiatives with closed scope (deadline, deliverables, focal points). Consultentities/project.mdfor creation criteria. An excerpt that mentions migration with a deadline and responsible person is probably a project, not a topic.
Record for each detected entity:
create or updateReport: "Phase 3: N entities detected (P creates, Q updates) across M sources."
REQUIRED: Before creating/updating any entity, present a SINGLE list with all changes from ALL sources:
## Sync — Proposed Changes
| # | Source | Type | Name | Action | Info |
|---|---|---|---|---|---|
| 1 | roadmap-26q1 | topic | 2026-04-feature-x | create | New topic mentioned |
| 2 | eventos-cobranca | actor | webhook-receiver | update | Description updated |
| ... | ... | ... | ... | ... | ... |
Total: N creates, M updates across P sources.
Confirm? (yes/no/adjust)If no changes detected in any source:
last_synced anyway)Do NOT proceed without explicit user confirmation.
Build the entity list in the format accepted by /bedrock:preserve:
entities:
- type: topic
name: "2026-04-feature-x"
action: create
content: "relevant excerpt from content extracted in Phase 3..."
relations:
actors: ["actor-slug-1"]
people: ["person-slug-1"]
source: "confluence"
- type: actor
name: "webhook-receiver"
action: update
content: "new context extracted in Phase 3..."
source: "github-repo"Compilation rules:
type and name: extracted from Phase 3action: create or update as identifiedcontent: excerpt of the source content that justifies the entityrelations: infer relationships between entities in the list (if A mentions B, include B in A's relations)source: use the source_type of the originating sourceUse the Skill tool to invoke /bedrock:preserve --vault <VAULT_NAME> passing the structured list as argument.
The --vault <VAULT_NAME> flag ensures preserve writes to the same vault.
/bedrock:preserve handles:
/bedrock:preserve returns:
Record the result for use in the final report (Phase 7).
After re-sync of each URL, /bedrock:preserve has already updated the entities with new content.
Additionally, for each URL processed successfully, pass source_url and source_type
to /bedrock:preserve so it updates synced_at in the sources field of each mapped entity.
The URL → entities map (built in Phase 1) indicates which entities need
synced_at updated for each re-synced URL.
Note:
/bedrock:preservealready handles the entity commit./bedrock:syncdoes NOT make a separate commit.
Present to the user:
## Report
| Metric | Value |
|---|---|
| Sources found | N |
| Sources synchronized | N |
| Sources ignored (type) | N |
| Sources with error | N |
| Entities created | N |
| Entities updated | N |
### Per source
| Source | Type | Entities | Status |
|---|---|---|---|
| roadmap-26q1 | confluence | 3 creates, 2 updates | ✅ |
| acme-corp-billing-api | github-repo | 0 creates, 1 update | ✅ |
| manual-notes | manual | — | ⏭️ ignored |
| broken-source | confluence | — | ❌ error (reason) |
### Git
- Commit (entities): <hash from /bedrock:preserve or "no entities">
- Commit (sources): vault: syncs N sources [source: sync]
- Push: ✅ success / ❌ failed (reason)
### Suggestions
- [sources with errors that can be fixed]
- [entities mentioned in content but not created, if any]| # | Rule |
|---|---|
| 1 | NEVER write entities directly — all entity writing goes through /bedrock:preserve |
| 2 | NEVER create sources — /bedrock:sync only processes URLs already registered in entities' sources field |
| 3 | NEVER delete entities — entities absent from updated content are kept |
| 4 | ALWAYS confirm consolidated proposal with user before executing (Phase 4) |
| 5 | Best-effort for external sources — never block due to unavailable MCP or broken URL |
| 6 | MCP in main context — do NOT use subagents for GitHub/Atlassian MCP calls |
| 7 | csv and manual sources are ignored — static types with no URL to re-fetch |
| 8 | Maximum 2 push attempts — after that, abort and inform |
| 9 | Sensitive data — NEVER include credentials, tokens, passwords, PANs, CVVs |
| 10 | Frontmatter keys in English, values in the vault's configured language |
| 11 | Bare wikilinks — [[name]], never [[dir/name]] |
Skill that populates people/ from recent commits in repositories listed in actors/.
You are an execution agent. Follow the phases below in order, without skipping steps.
Do not make git commit/push. Do not update topics/ or actors/. Do not read CLAUDE.md from repositories.
<VAULT_PATH>/actors/*.md<VAULT_PATH>/actors/_template.mdrepository — GitHub URL (e.g.: https://github.com/acme-corp/billing-api/)team — squad wikilink (e.g.: [[squad-payments]])name — canonical name of the actor (e.g.: billing-api)owner/repo from the URL: extract the two path segments after github.com/repository field, with an empty URL, or with a URL that does not contain github.com{name, owner, repo, team_wikilink, team_slug}team_slug: extracted from the wikilink, e.g.: [[squad-payments]] → squad-paymentsAt the end of this phase, report: "Phase 1: N actors found, M with valid repository, K skipped."
For each actor in the list (in parallel when possible):
2026-03-04T00:00:00Z)gh api "repos/{owner}/{repo}/commits?since={date_30_days}&per_page=100" 2>/dev/nullauthor.login — GitHub login (may be null if commit via email without linked account)commit.author.name — author's display nameauthor.login is nullauthor.login contains [bot]author.login (case-insensitive) is exactly: dependabot, renovate, github-actions, snyk-bot, codecov, sonarcloud, renovate-bot, depfuAt the end of this phase, report: "Phase 2: N repositories accessed, M with commits, K inaccessible (list). Total of L commits from P unique contributors."
Group all commits by author.login (lowercase)
For each unique person, build:
github: login in lowercasename: commit.author.name from the most recent commit (fallback: login if name is empty)focal_points: list of canonical actor names where the person has commits (no duplicates)team_counts: commit count by squad (e.g.: {squad-payments: 15, squad-notifications: 3})team: squad with most commits; in case of tie, first alphabeticallyfilename: derived from name → lowercase, no accents (normalize NFD and remove combining marks), spaces→hyphens, special characters removed, kebab-caseAlice Smith → alice-smith.mdJosé María → jose-maria.mdDuplicate detection by filename:
-2, -3, etc. to the secondpeople/{filename} already exists with a different github: treat as different person, append suffixAt the end of this phase, report: "Phase 3: N unique contributors identified. Distribution by squad: [list]."
For each person:
people/{filename} does NOT exist — CREATE:Use Write to create the file with this exact content (replace the placeholders):
---
type: person
name: "{display_name}"
role: ""
team: "[[{team_slug}]]"
focal_points: [{focal_points_yaml}]
github: "{github_login}"
jira: ""
updated_at: {today_date_YYYY-MM-DD}
updated_by: "sync-people"
tags: [type/person]
---
# {Display Name}
> Active contributor identified via commits in the last 30 days.
## Team
Member of [[{team_slug}]].
## Focal Points
{focal_points_list}
## Active Topics
_No topics linked yet._Where:
{focal_points_yaml} = YAML array of wikilinks, e.g.: ["[[billing-api]]", "[[notification-service]]"]{focal_points_list} = markdown list, e.g.:- [[billing-api]] — recent commits
- [[notification-service]] — recent commits{today_date_YYYY-MM-DD} = today's date in YYYY-MM-DD formatpeople/{filename} ALREADY exists — UPDATE:"sync-people"Identification by login: Before creating a new file, use Grep to search for github: "{login}" in <VAULT_PATH>/people/*.md. If found, update that file instead of creating a new one (even if the filename does not match).
At the end of this phase, report: "Phase 4: N people created, M updated."
For each squad that received new people:
teams/{team_slug}.mdmembers array from the YAML frontmatter"[[{person_filename_without_ext}]]" to the array if it does not existupdated_at and updated_by: "sync-people" in the frontmatterDo not modify any other section of the team file.
At the end of this phase, report: "Phase 5: N teams updated. [list of squads → number of members added]."
Print a consolidated summary:
## Sync People — Report
| Metric | Value |
|---|---|
| Actors scanned | N |
| Repositories accessed | N |
| Inaccessible repositories | N |
| Commits analyzed | N |
| Contributors found | N |
| People created | N |
| People updated | N |
| Teams updated | N |
### People by squad
| Squad | People |
|---|---|
| squad-payments | alice, bob |
| squad-notifications | carol |
| ... | ... |
### Inaccessible repositories
- owner/repo — error (if any)[[name]], never [[people/name]]github login, not by filenametopics/actors/This is an autonomous agent designed to run in background without human interaction.
It traverses all actors with status: active and a populated repository field,
fetches recent PRs via GitHub MCP, filters noise, uses LLM semantic matching to correlate
PRs with existing topics/projects in the vault, and delegates updates to /bedrock:preserve.
Operating mode: autonomous.
fleeting/ at the end of each executionFor recurring execution:
/loop: /loop 6h /bedrock:sync --github/schedule: configure cron with this skill/bedrock:sync --github does NOT write entities directly — all entity writing goes through /bedrock:preserve.
Exception: watermark fields (last_synced_at, last_synced_sha) in actor frontmatter are written
directly via Edit (they are not new entities, they are sync metadata).
/bedrock:sync --github does NOT create new topics or projects — it only updates existing ones.
You are an autonomous execution agent. Follow the phases below in order, without skipping steps. Do NOT ask for user confirmation in any phase.
Execute:
git -C <VAULT_PATH> pull --rebase origin mainIf the pull fails:
git -C <VAULT_PATH> rebase --abort, log the error and ABORT the entire execution.
Record in the report: "Aborted — git conflict on initial pull."<VAULT_PATH>/actors/*.md<VAULT_PATH>/actors/_template.mdstatus — actor statusrepository — GitHub repository URLname — actor namelast_synced_at — date of last GitHub sync (may not exist)last_synced_sha — SHA of last sync (may not exist)status: active (or in-development)repository field containing github.comstatus: deprecated (log: "Actor X ignored — deprecated")repository or with an invalid URL (log: "Actor X ignored — no GitHub repository")owner/repo from the URL:https://github.com/<owner>/<repo>/ → owner, repo.git suffix if present{filename, name, owner, repo, last_synced_at, last_synced_sha}Log: "Phase 1: N actors found, M syncable, K ignored (deprecated/no repo)."
For each syncable actor, fetch recent PRs:
mcp__plugin_github_github__list_pull_requests with parameters:owner: repo ownerrepo: repo namestate: "all" (open, merged, closed)sort: "updated"per_page: 20last_synced_at: keep only PRs with updated_at >= last_synced_atlast_synced_at: keep only PRs from the last 30 daysnumber, title, body (description), state (open/closed), merged (bool)user.login (author)updated_at, created_athead.sha (latest commit SHA)Best-effort: If the MCP call fails for an actor (rate limit, private repo, invalid URL):
- Log the error: "Actor X failed — reason"
- Continue with the remaining actors
- Do NOT abort the entire execution for one actor
Quick skip: If no PRs were returned or all PRs are older than the watermark, log "Actor X — no relevant activity" and skip to the next actor.
Log: "Phase 2: N actors queried, M with relevant PRs, K without activity, J with errors."
For each PR collected in Phase 2, apply noise filters:
Remove PRs from bots and automated tools:
[bot] or bot in login (e.g.: dependabot[bot], renovate[bot], github-actions[bot])dependabot, renovate, snyk-bot, greenkeeperRemove PRs with titles indicating automatic or irrelevant changes:
Bump , chore(deps), build(deps), Update dependencyversion bump, dependency update, auto-mergev1.2.3, 1.2.3)For each actor, maintain a list of relevant PRs (post-filter). If all PRs from an actor were filtered: log "Actor X — all PRs filtered (noise)" and skip.
Log: "Phase 3: N total PRs, M relevant after filter, K filtered as noise."
Use Glob + Read to collect:
Topics (<VAULT_PATH>/topics/*.md, excluding _template.md):
filename (without extension)titlealiasesstatus (open, in-progress, completed, cancelled)actors (list of wikilinks)objectivecategoryProjects (projects/*.md, excluding _template.md):
filename (without extension)namealiasesstatus (planning, active, blocked, completed)related_actors (list of wikilinks)blockersaction_items (list with description, status)progressStore as catalog for matching.
For each actor with relevant PRs, build a block:
Actor: <actor-name> (<owner>/<repo>)
Relevant PRs:
- PR #<number>: "<title>" (state: <open|closed|merged>, author: <login>, date: <date>)
Description: <first 200 chars of body>
- PR #<number>: ...With the topics/projects catalog and the PR batch, analyze semantically:
For each relevant PR, determine:
Correlation with topic/project: Does the PR relate to an existing topic or project?
Status implication: If there is a correlation, does the PR imply a status change?
Change classification:
status_hint — suggested status (e.g.: "in-progress", "completed")evidence — evidence description (e.g.: "PR #42 merged implements feature X of topic Y")confidence — high, medium, lowentity_type — "topic" or "project"entity_name — topic/project filenameMatching rules:
Separate correlations into two groups:
HIGH confidence → automatic action:
actors/related_actors frontmatter of the topic/project AND the PR theme
aligns with the topic's objective or the project's progress/action_itemsMEDIUM confidence → report only:
Log: "Phase 4: N correlations (P high confidence → action, Q medium confidence → report). R actors with activity without correlation."
Build the entity list in the format accepted by /bedrock:preserve.
Include ONLY HIGH confidence correlations + actor activity.
For topics with HIGH correlation:
- type: topic
name: "topic-filename"
action: update
content: |
## GitHub Activity (sync-github YYYY-MM-DD)
| PR | Repo | Status | Evidence |
|---|---|---|---|
| #42 | billing-api | merged | Implements feature X |
> [!info] Suggested status: in-progress
> Based on PR #42 merged in billing-api that implements feature X.
> Automatically detected by sync-github@agent.
source: "github"For projects with HIGH correlation:
- type: project
name: "project-filename"
action: update
content: |
## GitHub Activity (sync-github YYYY-MM-DD)
| PR | Repo | Status | Evidence |
|---|---|---|---|
| #15 | orders-api | merged | Resolves blocker Y |
> [!info] Suggested status: active
> Based on PR #15 merged in orders-api that resolves blocker Y.
> Project status reflects a management decision — review this suggestion.
> Automatically detected by sync-github@agent.
source: "github"For actors with relevant activity (all, not just those with correlation):
- type: actor
name: "actor-name"
action: update
content: |
## Recent Activity (sync-github YYYY-MM-DD)
| PR | Title | Status | Author | Date |
|---|---|---|---|---|
| #42 | Feature X | merged | alice | 2026-04-10 |
| #34 | Refactoring Y | open | bob | 2026-04-09 |
source: "github"Compilation rules:
[!info] callout suggesting status. NEVER overwrite the status field directly.source: "github" for all entities[[actor-name]], never [[actors/actor-name]]Use the Skill tool to invoke /bedrock:preserve --vault <VAULT_NAME> passing the structured list as argument.
The --vault <VAULT_NAME> flag ensures preserve writes to the same vault.
IMPORTANT for background execution: When invoking
/bedrock:preserve, include in the instruction that/bedrock:preservemust also operate without human confirmation. Add to the prompt: "Autonomous mode — do not ask for confirmation, process directly."
/bedrock:preserve handles:
After /bedrock:preserve completes, update the frontmatter of EACH processed actor (with or without correlation):
last_synced_at: today's date (YYYY-MM-DD)last_synced_sha: SHA of the most recent commit from the most recent PR (or keep previous if no PRs)updated_at: today's dateupdated_by: "sync-github@agent"last_synced_at and last_synced_sha do not exist: add them to the frontmatter (before updated_at)git -C <VAULT_PATH> add actors/
git -C <VAULT_PATH> diff --cached --quiet && echo "Nothing to commit" && exit 0Read the vault's git strategy from .bedrock/config.json:
cat <VAULT_PATH>/.bedrock/config.json 2>/dev/nullExtract the git.strategy field. If the file does not exist or has no git key, default to "commit-push".
Valid values: "commit-push", "commit-push-pr", "commit-only".
Prepare the commit message following the convention:
vault(source): syncs github activity for N actors [source: github]Strategy: commit-push (default)
git -C <VAULT_PATH> commit -m "<message per convention>"
git -C <VAULT_PATH> push origin mainIf push fails (conflict):
git -C <VAULT_PATH> pull --rebase origin main
git -C <VAULT_PATH> push origin mainIf it fails 2x: log the error and continue to the report. If there is no remote: commit locally and log.
Strategy: commit-push-pr
First, check that gh is available:
which gh 2>/dev/nullIf gh is not found: warn the user and fall back to commit-push strategy (above).
If gh is available:
Create a branch. Derive the branch name from the commit message:
vault/<YYYY-MM-DD>-sync-github-<N>-actors (e.g., vault/2026-04-15-sync-github-5-actors)
Check for collisions:
git -C <VAULT_PATH> branch --list "vault/<YYYY-MM-DD>-sync-github*"If the branch already exists, append a counter: vault/2026-04-15-sync-github-5-actors-2.
git -C <VAULT_PATH> checkout -b <branch-name>Commit and push the branch:
git -C <VAULT_PATH> commit -m "<message per convention>"
git -C <VAULT_PATH> push origin <branch-name>Open a pull request:
cd <VAULT_PATH> && gh pr create --title "<commit message>" --body "Automated by /bedrock:sync" --base mainReturn to main:
git -C <VAULT_PATH> checkout mainStrategy: commit-only
git -C <VAULT_PATH> commit -m "<message per convention>"Do not push. Output:
Git strategy: commit-only — changes committed locally. Use `git push` manually when ready.Generate a complete execution report and save as a fleeting note.
---
type: fleeting
name: "sync-github YYYY-MM-DD"
aliases: ["Sync GitHub YYYY-MM-DD"]
status: "raw"
updated_at: YYYY-MM-DD
updated_by: "sync-github@agent"
tags: [type/fleeting, status/raw]
---
# Sync GitHub — YYYY-MM-DD
> Automatic report generated by sync-github@agent.
## Summary
| Metric | Value |
|---|---|
| Actors found | N |
| Actors synchronized | N |
| Actors ignored (deprecated/no repo) | N |
| Actors with error (MCP) | N |
| PRs collected | N |
| Relevant PRs (post-filter) | N |
| PRs filtered (noise) | N |
| High confidence correlations (processed) | N |
| Medium confidence correlations (for review) | N |
| Actors with activity (no correlation) | N |
## Processed Correlations (High Confidence)
| Actor | PR | Entity | Type | Suggested Status | Evidence |
|---|---|---|---|---|---|
| [[billing-api]] | #42 | [[2026-04-feature-x]] | topic | in-progress | PR implements feature X |
| ... | ... | ... | ... | ... | ... |
## Correlations for Human Review (Medium Confidence)
> [!todo] Review correlations below
> These correlations were detected with medium confidence. Review and apply manually if correct.
| Actor | PR | Entity | Type | Suggested Status | Evidence |
|---|---|---|---|---|---|
| [[notification-service]] | #33 | [[2026-04-bugfix-timeout-notifications]] | topic | in-progress | PR title mentions timeout |
| ... | ... | ... | ... | ... | ... |
## Activity by Actor
| Actor | Relevant PRs | Summary |
|---|---|---|
| [[billing-api]] | #42 merged, #43 open | Feature X completed, refactoring Y in progress |
| [[notification-service]] | #33 merged | Timeout fix |
| ... | ... | ... |
## Updated Actors (Watermark)
| Actor | last_synced_at | last_synced_sha |
|---|---|---|
| [[billing-api]] | YYYY-MM-DD | abc1234 |
| ... | ... | ... |
## Errors
| Actor | Error |
|---|---|
| actor-x | MCP timeout |
| ... | ... |
## Git
- Commit (entities): <hash from /bedrock:preserve or "no entities">
- Commit (watermarks): vault(source): syncs github activity [source: github]
- Push: success / failed (reason)Save the report to <VAULT_PATH>/fleeting/YYYY-MM-DD-sync-github.md.
If the file already exists (duplicate execution on the same day): overwrite with most recent data.
git -C <VAULT_PATH> add fleeting/
git -C <VAULT_PATH> diff --cached --quiet && echo "Nothing to commit" && exit 0Read the vault's git strategy from .bedrock/config.json:
cat <VAULT_PATH>/.bedrock/config.json 2>/dev/nullExtract the git.strategy field. If the file does not exist or has no git key, default to "commit-push".
Valid values: "commit-push", "commit-push-pr", "commit-only".
Prepare the commit message:
vault(note): creates sync-github-report YYYY-MM-DD [source: github]Strategy: commit-push (default)
git -C <VAULT_PATH> commit -m "<message per convention>"
git -C <VAULT_PATH> push origin mainIf push fails (conflict):
git -C <VAULT_PATH> pull --rebase origin main
git -C <VAULT_PATH> push origin mainIf it fails 2x: log the error and continue. If there is no remote: commit locally and log.
Strategy: commit-push-pr
First, check that gh is available:
which gh 2>/dev/nullIf gh is not found: warn the user and fall back to commit-push strategy (above).
If gh is available:
Create a branch. Derive the branch name:
vault/<YYYY-MM-DD>-sync-github-report (e.g., vault/2026-04-15-sync-github-report)
Check for collisions:
git -C <VAULT_PATH> branch --list "vault/<YYYY-MM-DD>-sync-github-report*"If the branch already exists, append a counter.
git -C <VAULT_PATH> checkout -b <branch-name>Commit and push the branch:
git -C <VAULT_PATH> commit -m "<message per convention>"
git -C <VAULT_PATH> push origin <branch-name>Open a pull request:
cd <VAULT_PATH> && gh pr create --title "<commit message>" --body "Automated by /bedrock:sync" --base mainReturn to main:
git -C <VAULT_PATH> checkout mainStrategy: commit-only
git -C <VAULT_PATH> commit -m "<message per convention>"Do not push. Output:
Git strategy: commit-only — changes committed locally. Use `git push` manually when ready.Log final message:
sync-github@agent completed.
- Actors processed: N
- Correlations processed (high): N
- Correlations for review (medium): N
- Report: fleeting/YYYY-MM-DD-sync-github.mdExecution ends here. The agent does not wait for user response.
| # | Rule |
|---|---|
| 1 | AUTONOMOUS MODE — do NOT ask for user confirmation in any phase |
| 2 | NEVER write entities directly — all writing of topics/projects/actors goes through /bedrock:preserve |
| 3 | NEVER create new topics or projects — only update existing ones |
| 4 | NEVER overwrite status of topics/projects — only add a note with suggestion via [!info] callout |
| 5 | Only HIGH confidence generates action — medium confidence correlations go only to the report |
| 6 | Best-effort for GitHub MCP — never block due to rate limit or inaccessible repo |
| 7 | MCP in main context — do NOT use Agent tool for GitHub MCP calls |
| 8 | Filter noise before matching — dependabot, version bumps, bots |
| 9 | Conservative semantic matching — discard low confidence correlations |
| 10 | Maximum 2 push attempts — after that, log and continue |
| 11 | Sensitive data — NEVER include credentials, tokens, passwords, PANs, CVVs |
| 12 | Frontmatter keys in English, values in the vault's configured language |
| 13 | Bare wikilinks — [[name]], never [[dir/name]] |
| 14 | Append-only for topics — add information, never delete existing content |
| 15 | Report always generated — even if no correlations, generate report in <VAULT_PATH>/fleeting/ |
| 16 | Vault resolution first — resolve VAULT_PATH before any file operation or git command — never assume CWD is the vault |
| 17 | All git commands use git -C <VAULT_PATH> — never assume CWD is the vault |
| 18 | All entity paths use <VAULT_PATH>/ prefix — <VAULT_PATH>/actors/, not actors/ |
| 19 | Pass --vault to /preserve — ALWAYS include --vault <VAULT_NAME> when delegating to /bedrock:preserve |
© iurykrieger, MIT. 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 skills/sync of iurykrieger/claude-bedrock.
Open the folder on GitHubat commit 7cac16c
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in iurykrieger/claude-bedrock, which our catalogue first saw on October 7, 2026.
Sync 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 |
|---|---|---|---|---|---|---|
| Sync this skilliurykrieger/claude-bedrock | 105 | 1 repos | ~11k | Automated safety check: Warn | MIT | |
| Researchiusztinpaul/ai-research-os-workshop | 179 | — | ~17k | Automated safety check: Pass | MIT | |
| Enterprise SearchZhixiangLuo/10xProductivity | 478 | — | ~535 | Automated safety check: Pass | MIT | |
| Vaultscott-fryxell/brayness | 124 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Wiki Ingestthoreinstein/gemini-obsidian | 102 | — | ~1.2k | Automated safety check: Pass | ISC | |
| FIRE Card to EPUBtwhsi/skills | 259 | — | ~1k | Automated safety check: Pass | None |
iusztinpaul/ai-research-os-workshop
Build, extend, AND query a persistent LLM-maintained wiki for any research topic.
ZhixiangLuo/10xProductivity
Search your entire company's institutional knowledge in one query — Slack, Confluence, Jira, Linear, Notion, GitHub, plus any AI or multi-source search tool listed in verifiedconnections.md.
scott-fryxell/brayness
Read, search, and maintain the user's Obsidian vault at work/vault, a PARA-structured knowledge base of projects, interests, and reference material.
thoreinstein/gemini-obsidian
A skill your agent uses when the user wants to ingest external sources into the vault — PDFs, markdown files, transcripts, Readwise exports, or any document.
twhsi/skills
Converts FIRE analysis cards or project-note JSON into a validated EPUB book with directory, chapter and keyword index cards and backlinks.
glebis/claude-skills
Query browsing history from all synced devices (iPhone, Mac, iPad, desktop).
iurykrieger/claude-bedrock
Internal fetcher module for Confluence pages. An agent skill from iurykrieger/claude-bedrock.
iurykrieger/claude-bedrock
Internal fetcher module for Google Docs and Sheets. An agent skill from iurykrieger/claude-bedrock.
iurykrieger/claude-bedrock
Read-only vault health diagnostic. An agent skill from iurykrieger/claude-bedrock.
iurykrieger/claude-bedrock
Manage registered Bedrock vaults. An agent skill from iurykrieger/claude-bedrock.
iurykrieger/claude-bedrock
Initialize any folder as a Bedrock-powered Obsidian vault. An agent skill from iurykrieger/claude-bedrock.
iurykrieger/claude-bedrock
Vault alignment engine. An agent skill from iurykrieger/claude-bedrock.
Works with
Categories
Re-synchronizes the vault with external sources. An agent skill from iurykrieger/claude-bedrock. Sync is an agent skill from iurykrieger/claude-bedrock. Re-synchronizes the vault with external sources.
Sync fits situations like: knowledge Management work in your project.
Run `npx skills add iurykrieger/claude-bedrock --skill sync -a claude-code`. Or copy the skill folder (skills/sync in iurykrieger/claude-bedrock) into .claude/skills/sync in your project. Claude Code loads it when a task matches its description.
Run `npx skills add iurykrieger/claude-bedrock --skill sync -a codex`. Or copy the skill folder (skills/sync in iurykrieger/claude-bedrock) into .agents/skills/sync 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 iurykrieger/claude-bedrock --skill sync -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sync, .gemini/skills/sync, .github/skills/sync and .opencode/skills/sync in your project.
Going by SKILL.md and its folder, Sync needs the command-line tools its instructions call (git and gh). Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Glob, Grep, Skill, Agent, 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 flagged 1 warning(s): tells the agent its actions are pre-authorized / not to stop for confirmation. Read the flagged lines before installing; the check is not a guarantee either way.
Sync is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 11k tokens (SKILL.md is roughly 44k 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 Sync: Research (iusztinpaul/ai-research-os-workshop, 179 stars), Enterprise Search (ZhixiangLuo/10xProductivity, 478 stars), Vault (scott-fryxell/brayness, 124 stars) and Wiki Ingest (thoreinstein/gemini-obsidian, 102 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
iurykrieger (a GitHub user) maintains it in iurykrieger/claude-bedrock, which has 105 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on May 5, 2026.
Source: iurykrieger/claude-bedrock on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.