Evolutionary Modular Architecture
tech-leads-club/agent-skills
Guides design of modular-monolith platforms with DDD, flat-by-aggregate modules, anti-corruption layers, outbox events and resilience, plus an architecture document with SVG diagrams.
Reconstruct an OKF bundle by event-sourcing a repository's history (git log and Claude session transcripts).
$ npx skills add scaccogatto/okf-skills --skill backfill -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install scaccogatto/okf-skills backfill --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/scaccogatto/okf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/backfill .claude/skills/backfill && 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 "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .claude/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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/scaccogatto/okf-skills/tree/main/skills/backfillType 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 scaccogatto/okf-skills --skill backfill -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install scaccogatto/okf-skills backfill --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scaccogatto/okf-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/backfill .agents/skills/backfill && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .agents/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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 scaccogatto/okf-skills --skill backfill -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install scaccogatto/okf-skills backfill --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scaccogatto/okf-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/backfill .cursor/skills/backfill && 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 "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .cursor/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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/scaccogatto/okf-skills.git --path skills/backfill--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 scaccogatto/okf-skills --skill backfill -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install scaccogatto/okf-skills backfill --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scaccogatto/okf-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/backfill .gemini/skills/backfill && 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 "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .gemini/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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 scaccogatto/okf-skills backfillInstalls 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 scaccogatto/okf-skills --skill backfill -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/scaccogatto/okf-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/backfill .github/skills/backfill && 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 "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .github/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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 scaccogatto/okf-skills --skill backfill -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install scaccogatto/okf-skills backfill --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scaccogatto/okf-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/backfill .opencode/skills/backfill && 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 "backfill" agent skill from https://github.com/scaccogatto/okf-skills/tree/main/skills/backfill into .opencode/skills/backfill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backfill", 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.
backfillReconstruct an OKF bundle by event-sourcing a repository's history (git log and Claude session transcripts).
Backfill is an agent skill from scaccogatto/okf-skills. Reconstruct an OKF bundle by event-sourcing a repository's history (git log and Claude session transcripts). Use when creating an .okf/ bundle for an existing repository that predates this skill, or when resuming an interrupted backfill session. Triggers on: "reconstruct the OKF bundle", "backfill the knowledge bundle", "event-source the history".
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/okf_backfill_events.py`).
It sits in Development, covering Event-driven systems. It works with Git. The repository describes itself as: The OKF toolkit for Claude Code — author, maintain, validate & visualize Open Knowledge Format bundles. Plugin, agent skills, and a GitHub Action. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8e31878. 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:
BashReadWriteEditFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
uvjqgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv and git, which can reach the network depending on how they are called.
From 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.
Backfill loads about 4.3k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,951 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, EditAutomated 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); the scripts in this folder are not scanned.
The full file from scaccogatto/okf-skills at commit 8e31878, republished under its MIT licence (© scaccogatto). 1,951 words, ~4,254 tokens.
.claude/skills/backfill/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.This skill replays a repository's decision-making history (git commits and Claude session transcripts) to rebuild its OKF knowledge bundle as if the okf skill's Stop hook had been active from the start.
The extraction layer is deterministic (same repo → byte-identical events); the replay layer is an LLM loop, replayable and auditable but not byte-identical (timestamps, summaries change per run). See the event schema (§1) and skip rules (§3).
Git commits and session turns become events (JSONL, one per line, sorted by timestamp then source):
{"id":"git:<sha>","source":"git","ts":"<ISO8601 Z>","sha":"...","author":"...","subject":"...","body":"...","files":[{"path":"...","add":N,"del":N}]}
{"id":"session:<file>:<lineno>","source":"session","ts":"<ISO8601 Z>","user":"...","outcome":"...","title":"...","branch":"...","skip":"..."}git log --first-parent --numstat.~/.claude/projects/<repo-slug>/*.jsonl and worktree subdirs.Z.if [ -d <repo>/.okf ] && ! [ -f <repo>/.okf/.backfill-state.json ]; then
echo "ERROR: .okf/ exists but is incomplete. Delete it to rebuild from scratch, or pass --resume to continue from the last checkpoint."
exit 1
fiIf .backfill-state.json exists, resume from the cursor; otherwise, fresh bootstrap.
uv run "${CLAUDE_SKILL_DIR}/scripts/okf_backfill_events.py" <repo-dir> \
--out events.jsonl \
[--no-sessions] [--sessions-dir ~/.claude/projects] \
[--max-text 2000] [--skip-globs "vendor/**"]Write events.jsonl to the scratchpad (never committed). Report:
Create .okf/ with:
mkdir -p <repo>/.okf
echo 'okf_version: "0.2"' > <repo>/.okf/index.md
echo '# Update Log' > <repo>/.okf/log.mdCursor (.okf/.backfill-state.json):
{"last_id": null, "done": 0}The replay is now structured in two phases to enforce semantic depth and anti-degeneration rules:
Launch okf:event-analyzer agents for the live events (those without skip field), in waves of
4 to 10 (see the cost note in §5), via Claude Code's Workflow agentType parameter. Each analyzer
receives its event ids, the events.jsonl path, the repo path, the output directory and the
emitter path, and:
jq (the orchestrator dispatches ids, never content)analyses/<event-id>.md (event id with : sanitized to -) to scratchpad, with a
truncated flag copied from the emitter's last line.okf/analyses/Dispatch rule (deterministic, from events.jsonl, no content read): a live event is
small when it is a session turn or a commit whose numstat totals at most 60 changed lines.
Small events are grouped chronologically, eight per analyzer call; large commits go one per
call. Measured on this repository (benchmark/map-tier/RESULTS.md): 57 calls instead of 147,
a third off the map phase at the same tier, no loss on any per-event metric and no
cross-event contamination.
jq -c 'select(.skip==null) | {id, small: (.source=="session" or (([.files[]?|.add+.del]|add)//0) <= 60)}' events.jsonlHost-agnostic fallback (if no Workflow support): spawn generic subagents with the same
system prompt as agents/event-analyzer.md, one per event, collecting analyses to scratchpad.
Run a single okf:bundle-weaver agent that:
.okf/, updating or creating conceptslog.md bullet for each lifecycle event only (a concept created, deprecated or
superseded); the "why" of a routine update goes into the concept body.okf/.backfill-state.json) for resume capability.okf/Resume behavior: both phases support resumption. Phase 1 skips already-analyzed event ids;
Phase 2 restarts from last_id in the cursor.
Before starting the map phase, read the repository's README and directory structure to sketch a candidate taxonomy of concepts (skills, integrations, decisions, etc.). This priming is advisory only — it helps the analyzer emit better candidate names. The guarantee that no events are lost comes from the deterministic coverage check in Finalize (§5), not from priming; analyses without candidate names still flow to the weaver.
The orchestrator handles ids and counts, never content. Events, analyses and diffs are read by the agents; the orchestrator reads:
wc -l events.jsonl # total events
jq -r 'select(.skip==null) | .id' events.jsonl # live ids to dispatch
ls analyses | wc -l # analyses writtenNever cat events.jsonl or open an analysis from the orchestrator: whatever enters its context
is billed at the frontier rate on every following turn, and the routing exists to prevent that.
Write index.md per directory by hand (do NOT run okf_init.py — it
would scaffold placeholder files): one # Section per directory, one
bullet per concept, * [Title](file.md) - description taken from each
concept's frontmatter (SPEC §8). The root index.md keeps its
okf_version: "0.2" frontmatter and links every subdirectory.
Add final log entry (today's date, appended to existing dated section if present):
## 2026-09-01
- **Backfill**: reconstructed from N events by okf-backfill/0.9.5Delete cursor:
rm -f .okf/.backfill-state.jsonRun self-checks for anti-degeneration rules:
# No concept filenames derived from change type
! find .okf -name "*.md" | grep -E "merge-pull-request|(^|/)(feat|fix|chore|docs)[:-]"
# No non-kebab-case characters in filenames
! find .okf -name "*.md" | grep -E "[^a-z0-9/.-]"
# No identical consecutive log bullets
awk 'p==$0 && /^- / {exit 1} {p=$0}' .okf/log.md
# Every concept declares its lifecycle (absent status reads as `stable`, SPEC §5.4)
[ -z "$(grep -rL '^status:' --include='*.md' .okf | grep -v '/index.md$\|/log.md$')" ]These are lexical guards; they do not catch a bundle that asserts a superseded state. That check is semantic and belongs to the weaver, at fold time, when it has both the analysis and the earlier concepts on disk (§4 rule 5).
Run coverage check to guarantee every event is mapped:
uv run "${CLAUDE_SKILL_DIR}/scripts/okf_backfill_events.py" \
--check-coverage events.jsonl .okfExit code 0 means all live events (non-skipped) appear in the bundle's sources or log.
Exit code 1 with a list of unmapped ids means the weaver skipped some events; fix and re-run.
Validate bundle schema:
uv run "${CLAUDE_SKILL_DIR}/../validate/scripts/okf_validate.py" .okf --strictFix every error before finishing.
Report the resulting bundle:
superseded count) and deprecated concepts:
grep -rl '^status: deprecated' --include='*.md' .okf | wc -lgrep -l '^truncated: true' analyses/*.md | wc -l, next to the
deterministic estimate of git events whose full diff exceeds the default cap:
jq -r 'select(.skip==null and .source=="git") | [.files[]|.add+.del] | add' events.jsonl | awk '$1>300' | wc -lEvents matching a rule below are marked skip: <rule-id> and skipped during
replay (cursor advances, no log entry):
| Rule | Condition | Rationale |
|---|---|---|
paths-only-generated | Git commit touches ONLY lockfiles or generated code (vendor/, node_modules/, dist/, .min., *.lock, etc.) | Noise: build byproducts, no knowledge content |
merge-no-files | Git merge commit with no file changes (first-parent only) | Housekeeping |
session-command-noise | Session user message is a slash command or <20 chars and has no useful outcome | Ephemeral UI/chatter |
Extend the first rule with --skip-globs "extra/**" for repo-specific patterns.
The analyzer and weaver enforce these rules to prevent the bundle from devolving into a mechanical listing of commits or a taxonomy-by-accident:
Concept names describe domain entities, not changes. Forbidden:
merge-pull-request-#2-....md, feat:-add-docs-skill.md, fix:-handle-edge-case.mdupdate.md, fix.md, add-feature.md[a-z0-9-] only)Example: a commit with subject "feat: add presales pipeline" touches a domain concept.
The concept is named presales-pipeline.md (the entity), not feat:-add-presales-pipeline.md
(the change). The change history lives in frontmatter sources and the body's ## History;
log.md holds only lifecycle events.
Prefer update over create. Every event is analyzed for which concepts it touches; if
a concept already exists and the analysis fits, update its sources and body. Only create
a new concept if the analysis reveals a distinct domain entity not yet captured.
Log bullets are lifecycle events, and explain intent. Only a concept created, deprecated or superseded gets a bullet; a routine update does not. A bullet answers "why?" from the commit body or session outcome, never just re-reads the subject:
- Added presales-pipeline.md feature- **Creation**: [Presales pipeline](...), formalized to clarify handoff pointsNo identical consecutive bullets. A run of same-concept bullets means updates leaked into the log:
- Feature X update
- Feature X update
- Feature X updateInstead: no bullet at all; the updates live in the concept's body and sources.
A reversal is not growth. A replay walks the history forward, so a later event routinely
overturns an earlier one (a phase dropped, a limit changed, a target downgraded). "Prefer
update over create" is a merge rule and says nothing about this: applied alone it leaves the
bundle asserting both states in the present tense, in one concept or in two. The weaver greps
the whole bundle before writing and, on contradiction, replaces rather than appends: the body
states what holds today, the previous position drops to a dated line under ## History, and
an outdated concept that a newer one supersedes gets status: deprecated plus a link to its
successor. A deprecated concept keeps its sources, so coverage stays green. None of the
guards in Finalize can catch this — they are lexical, and a superseded claim is well-formed.
Reconstructed concepts are draft, never stable. SPEC §5.4 reads an absent status as
stable ("ready for consumption"); a bundle nobody has reread is draft ("not yet reviewed;
possibly incomplete"). The weaver writes status: on every concept.
--skip-globs to exclude low-signal paths (e.g.,
vendored dependencies, generated code). Map phase is parallel in waves of 4 to 10: the
gate benchmark lost 260 of 299 runs to a high-concurrency mass failure and finished at
concurrency 4 (benchmark/gate/RESULTS.md). Reduce is sequential but much cheaper
(concepts already analyzed).body already contains
trailers in a machine-readable format. The analyzer and weaver should use trailers as
the primary source of "why" (overriding generic inference from diff content).generated.by is the backfill agent (okf-backfill/0.9.5), not
claimed as human-reviewed (human:...); concepts are correctly unverified (SPEC §5.3) and
status: draft (§5.4) — the two axes are independent: trust is who says it, lifecycle is
whether it has been reread. Writing status is not optional here: absent, §5.4 reads it as
stable, so a bundle nobody has reread would declare itself ready for consumption.
Map-phase analyses are working artifacts (stored for auditability during reduce); the
weaver's output is the canonical bundle.Analyzers never read a raw git show: the harness cuts long tool output blindly (mid-hunk,
character-based, host-dependent) and a cheap worker may not notice the cut. The extractor reads
the whole diff instead and emits a deterministic sample:
uv run "${CLAUDE_SKILL_DIR}/scripts/okf_backfill_events.py" <repo-dir> --show <sha> \
[--only <path>] [--max-diff-lines 300] [--per-file-lines 120] [--max-line-chars 400] \
[--skip-globs "vendor/**"]--max-line-chars are shortened with a
marker (a generated one-line file is "1 line" but can be hundreds of KB).vendor/**, --skip-globs) are omitted even inside
mixed commits; their stat line stays.[diff: shown=X total=Y files_shown=A files_total=B truncated=true|false].
The analyzer copies truncated into its frontmatter; finalize reports the count.--only <path> is the one permitted follow-up when a truncated diff hides the rationale:
same cap logic, one file.Defaults keep one call under the harness limits with margin; tune per repo with the flags.
The analyzer's tier is configuration, not infrastructure: agents/event-analyzer.md carries
model and effort in its frontmatter. Fork the file to retier the map phase; the skill
resolves the agent by name and nothing else changes. The default is haiku since the
map-tier benchmark (benchmark/map-tier/RESULTS.md): parity with sonnet on commits at
under half the map cost, on the condition that the two explicit instructions in the agent
file stay (which summary line the flag copies; claims report intent as intent).
© scaccogatto, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/backfill of scaccogatto/okf-skills.
Open the folder on GitHubat commit 8e31878
Backfill 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 |
|---|---|---|---|---|---|---|
| Backfill this skillscaccogatto/okf-skills | 408 | — | ~4.3k | Automated safety check: Notes | MIT | |
| Evolutionary Modular Architecturetech-leads-club/agent-skills | 7k | — | ~3.7k | Automated safety check: Pass | CC-BY-4.0 | |
| Deskcomm Contribuirmelgarafael/DeskcommCRM | 4.5k | — | ~3.6k | Automated safety check: Notes | MIT | |
| Designing ArchitectureCloudAI-X/claude-workflow-v2 | 1.4k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Migration PathAxonIQ/AxonFramework | 3.6k | — | ~594 | Automated safety check: Pass | Apache-2.0 | |
| Bktavivsinai/bitbucket-cli | 232 | 1 repos | ~1k | Automated safety check: Pass | MIT |
tech-leads-club/agent-skills
Guides design of modular-monolith platforms with DDD, flat-by-aggregate modules, anti-corruption layers, outbox events and resilience, plus an architecture document with SVG diagrams.
melgarafael/DeskcommCRM
Guia de contribuição ao DeskcommCRM para quem vai mexer no código e abrir um pull request, sobretudo de um fork.
CloudAI-X/claude-workflow-v2
Designs software architecture and selects appropriate patterns for projects.
AxonIQ/AxonFramework
Create a new Axon Framework 4→5 migration path documentation page.
avivsinai/bitbucket-cli
Operate Bitbucket Cloud or Data Center repositories, pull requests, branches, issues, pipelines, permissions, and webhooks with bkt.
alorence/django-modern-rpc
Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.
scaccogatto/okf-skills
Author, maintain, and consume Open Knowledge Format (OKF) knowledge bundles — portable markdown + YAML frontmatter that both humans and agents read.
scaccogatto/okf-skills
Check that an Open Knowledge Format (OKF) bundle is conformant with the v0.2 spec (§11).
scaccogatto/okf-skills
Render an Open Knowledge Format (OKF) bundle as a single self-contained, interactive HTML graph (viz.html) — concepts as nodes coloured by type and sized by body length, markdown links and…
Works with
Categories
Reconstruct an OKF bundle by event-sourcing a repository's history (git log and Claude session transcripts). Backfill is an agent skill from scaccogatto/okf-skills. Reconstruct an OKF bundle by event-sourcing a repository's history (git log and Claude session transcripts).
Backfill fits situations like: creating an .okf/ bundle for an existing repository that predates this skill; resuming an interrupted backfill session; : reconstruct the OKF bundle; backfill the knowledge bundle.
Run `npx skills add scaccogatto/okf-skills --skill backfill -a claude-code`. Or copy the skill folder (skills/backfill in scaccogatto/okf-skills) into .claude/skills/backfill in your project. Claude Code loads it when a task matches its description.
Run `npx skills add scaccogatto/okf-skills --skill backfill -a codex`. Or copy the skill folder (skills/backfill in scaccogatto/okf-skills) into .agents/skills/backfill 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 scaccogatto/okf-skills --skill backfill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/backfill, .gemini/skills/backfill, .github/skills/backfill and .opencode/skills/backfill in your project.
Going by SKILL.md and its folder, Backfill needs Python for the scripts in its folder and the command-line tools its instructions call (uv, jq and git). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit.
SKILL.md contains no URLs. Its commands use uv and git, which can reach the network depending on how they are called. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Backfill is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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 Backfill: Evolutionary Modular Architecture (tech-leads-club/agent-skills, 7k stars), Deskcomm Contribuir (melgarafael/DeskcommCRM, 4.5k stars), Designing Architecture (CloudAI-X/claude-workflow-v2, 1.4k stars) and Migration Path (AxonIQ/AxonFramework, 3.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
scaccogatto (a GitHub user) maintains it in scaccogatto/okf-skills, which has 408 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 28, 2026.
Source: scaccogatto/okf-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.