bmad-module-skill-forge 3.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/README.md +3 -3
- package/docs/_data/pinned.yaml +19 -13
- package/docs/architecture.md +2 -2
- package/docs/concepts.md +4 -4
- package/docs/examples.md +33 -26
- package/docs/getting-started.md +3 -3
- package/docs/how-it-works.md +2 -2
- package/docs/index.md +1 -1
- package/docs/skill-model.md +41 -39
- package/docs/troubleshooting.md +8 -0
- package/docs/verifying-a-skill.md +46 -21
- package/docs/why-skf.md +1 -1
- package/docs/workflows.md +5 -5
- package/package.json +1 -1
- package/src/knowledge/qmd-registry.md +1 -1
- package/src/knowledge/version-paths.md +1 -1
- package/src/shared/health-check.md +2 -50
- package/src/shared/scripts/schemas/skf-audit-result-envelope.v1.json +2 -2
- package/src/shared/scripts/schemas/skf-update-result-envelope.v1.json +12 -4
- package/src/shared/scripts/schemas/skill-brief.v1.json +1 -1
- package/src/shared/scripts/skf-atomic-write.py +212 -59
- package/src/shared/scripts/skf-build-change-manifest.py +1437 -178
- package/src/shared/scripts/skf-classify-changed-files.py +78 -0
- package/src/shared/scripts/skf-compare-file-hashes.py +266 -104
- package/src/shared/scripts/skf-count-tokens.py +54 -10
- package/src/shared/scripts/skf-derive-assembly-shape.py +18 -1
- package/src/shared/scripts/skf-detect-scripts-assets.py +196 -54
- package/src/shared/scripts/skf-detect-workspaces.py +67 -0
- package/src/shared/scripts/skf-emit-result-envelope.py +6 -5
- package/src/shared/scripts/skf-extract-public-api.py +1673 -189
- package/src/shared/scripts/skf-extraction-inventory.py +584 -46
- package/src/shared/scripts/skf-extraction-snapshot.py +158 -33
- package/src/shared/scripts/skf-forge-tier-rw.py +26 -3
- package/src/shared/scripts/skf-github-probe.py +47 -8
- package/src/shared/scripts/skf-hash-content.py +14 -8
- package/src/shared/scripts/skf-load-provenance.py +3 -1
- package/src/shared/scripts/skf-merge-doc-urls.py +142 -19
- package/src/shared/scripts/skf-parse-gaps.py +135 -26
- package/src/shared/scripts/skf-preflight.py +15 -1
- package/src/shared/scripts/skf-provenance-gap-dispatch.py +25 -1
- package/src/shared/scripts/skf-render-metadata-stats.py +1 -1
- package/src/shared/scripts/skf-resolve-authoritative-files.py +29 -3
- package/src/shared/scripts/skf-resolve-customization.py +197 -0
- package/src/shared/scripts/skf-shard-body.py +239 -41
- package/src/shared/scripts/skf-structural-diff.py +133 -18
- package/src/shared/scripts/skf-update-active-symlink.py +115 -62
- package/src/shared/scripts/skf-validate-brief-schema.py +19 -1
- package/src/shared/scripts/skf-validate-output.py +12 -3
- package/src/shared/scripts/skf-verify-provenance-completeness.py +1439 -79
- package/src/shared/scripts/skf-write-skill-brief.py +41 -8
- package/src/shared/tool-requirements.yaml +8 -2
- package/src/skf-analyze-source/SKILL.md +2 -2
- package/src/skf-analyze-source/assets/skill-brief-schema.md +1 -1
- package/src/skf-analyze-source/references/map-unit-exports.md +1 -1
- package/src/skf-audit-skill/SKILL.md +2 -2
- package/src/skf-audit-skill/assets/drift-report-template.md +1 -0
- package/src/skf-audit-skill/references/headless-contract.md +1 -1
- package/src/skf-audit-skill/references/health-check.md +2 -0
- package/src/skf-audit-skill/references/init.md +2 -1
- package/src/skf-audit-skill/references/re-index.md +14 -9
- package/src/skf-audit-skill/references/report.md +2 -2
- package/src/skf-audit-skill/references/semantic-diff.md +15 -15
- package/src/skf-audit-skill/references/structural-diff.md +10 -5
- package/src/skf-audit-skill/scripts/render-drift-tables.py +29 -2
- package/src/skf-brief-skill/SKILL.md +3 -3
- package/src/skf-brief-skill/assets/scope-templates.md +1 -1
- package/src/skf-brief-skill/assets/skill-brief-schema.md +4 -11
- package/src/skf-brief-skill/references/analyze-target.md +6 -6
- package/src/skf-brief-skill/references/confirm-brief.md +1 -1
- package/src/skf-brief-skill/references/scope-definition.md +4 -4
- package/src/skf-brief-skill/references/step-auto-brief.md +11 -29
- package/src/skf-brief-skill/references/version-resolution.md +5 -9
- package/src/skf-campaign/SKILL.md +2 -2
- package/src/skf-campaign/references/step-05-skill-loop.md +6 -1
- package/src/skf-create-skill/SKILL.md +2 -2
- package/src/skf-create-skill/assets/compile-assembly-rules.md +5 -3
- package/src/skf-create-skill/assets/skill-sections.md +7 -7
- package/src/skf-create-skill/references/authoritative-files-protocol.md +2 -23
- package/src/skf-create-skill/references/compile.md +31 -60
- package/src/skf-create-skill/references/component-extraction.md +3 -3
- package/src/skf-create-skill/references/enrich.md +2 -2
- package/src/skf-create-skill/references/entry-points-by-hand.md +24 -7
- package/src/skf-create-skill/references/extract.md +23 -19
- package/src/skf-create-skill/references/extraction-patterns-tracing.md +9 -9
- package/src/skf-create-skill/references/extraction-patterns.md +10 -11
- package/src/skf-create-skill/references/generate-artifacts.md +1 -1
- package/src/skf-create-skill/references/report.md +21 -5
- package/src/skf-create-skill/references/source-resolution-protocols.md +12 -17
- package/src/skf-create-skill/references/sub/fetch-docs.md +1 -1
- package/src/skf-create-stack-skill/SKILL.md +2 -2
- package/src/skf-create-stack-skill/references/validate.md +1 -1
- package/src/skf-drop-skill/SKILL.md +2 -2
- package/src/skf-drop-skill/references/execute.md +5 -1
- package/src/skf-drop-skill/references/health-check.md +2 -0
- package/src/skf-drop-skill/references/invocation-contract.md +1 -1
- package/src/skf-drop-skill/references/report.md +2 -2
- package/src/skf-drop-skill/references/select.md +7 -3
- package/src/skf-export-skill/SKILL.md +2 -2
- package/src/skf-export-skill/assets/snippet-format.md +5 -5
- package/src/skf-export-skill/references/generate-snippet.md +22 -15
- package/src/skf-export-skill/references/load-skill.md +1 -1
- package/src/skf-export-skill/references/token-report.md +29 -9
- package/src/skf-forger/SKILL.md +2 -2
- package/src/skf-quick-skill/SKILL.md +2 -2
- package/src/skf-refine-architecture/SKILL.md +6 -8
- package/src/skf-rename-skill/SKILL.md +2 -2
- package/src/skf-setup/SKILL.md +2 -2
- package/src/skf-test-skill/SKILL.md +2 -2
- package/src/skf-test-skill/assets/output-section-formats.md +6 -4
- package/src/skf-test-skill/references/coherence-check.md +5 -4
- package/src/skf-test-skill/references/coverage-check-branches.md +61 -0
- package/src/skf-test-skill/references/coverage-check-tiers.md +5 -5
- package/src/skf-test-skill/references/coverage-check.md +69 -111
- package/src/skf-test-skill/references/init.md +5 -6
- package/src/skf-test-skill/references/migration-section-rules.md +26 -14
- package/src/skf-test-skill/references/report.md +11 -9
- package/src/skf-test-skill/references/scoring-rules.md +8 -6
- package/src/skf-test-skill/references/source-access-protocol.md +15 -18
- package/src/skf-test-skill/scripts/build-result-context.py +114 -21
- package/src/skf-test-skill/scripts/gap-ledger.py +580 -80
- package/src/skf-test-skill/scripts/load-coverage-inputs.py +646 -107
- package/src/skf-test-skill/scripts/locate-export-segments.py +101 -20
- package/src/skf-test-skill/scripts/reconcile-coverage.py +450 -23
- package/src/skf-test-skill/scripts/score-signatures.py +356 -61
- package/src/skf-test-skill/scripts/stage-helper-payload.py +64 -13
- package/src/skf-test-skill/scripts/validate-inventory.py +108 -9
- package/src/skf-test-skill/scripts/verify-declared-numerator.py +7 -5
- package/src/skf-test-skill/templates/test-report-template.md +1 -0
- package/src/skf-update-skill/SKILL.md +2 -2
- package/src/skf-update-skill/references/detect-changes.md +32 -13
- package/src/skf-update-skill/references/gap-driven.md +37 -22
- package/src/skf-update-skill/references/init.md +6 -2
- package/src/skf-update-skill/references/invocation-contract.md +1 -1
- package/src/skf-update-skill/references/merge.md +17 -12
- package/src/skf-update-skill/references/re-extract.md +4 -2
- package/src/skf-update-skill/references/report.md +7 -4
- package/src/skf-update-skill/references/write.md +77 -36
- package/src/skf-update-skill/scripts/skf-new-file-diff.py +157 -42
- package/src/skf-verify-stack/SKILL.md +2 -2
- package/tools/cli/lib/tool-check.js +158 -2
package/README.md
CHANGED
|
@@ -52,15 +52,15 @@ results = cognee.search("What does Cognee do?", mode="graph")
|
|
|
52
52
|
import cognee
|
|
53
53
|
|
|
54
54
|
# Agent follows the skill instruction:
|
|
55
|
-
# `search(query_text: str, query_type: SearchType =
|
|
56
|
-
# [AST:cognee/api/v1/search/search.py:
|
|
55
|
+
# `search(query_text: str, query_type: SearchType = SearchType.HYBRID_COMPLETION, ...) -> list[SearchResult]`
|
|
56
|
+
# [AST:cognee/api/v1/search/search.py:L41]
|
|
57
57
|
results = await cognee.search(
|
|
58
58
|
query_text="What does Cognee do?",
|
|
59
59
|
query_type=cognee.SearchType.GRAPH_COMPLETION
|
|
60
60
|
)
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
The skill told the agent the real function name, the real parameters, and that the call is async, all traced to the exact source line. This example is from the real [`oms-cognee`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.
|
|
63
|
+
The skill told the agent the real function name, the real parameters, and that the call is async, all traced to the exact source line. This example is from the real [`oms-cognee`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.6.2/oms-cognee/SKILL.md) skill in [**oh-my-skills**](https://github.com/armelhbobdad/oh-my-skills), SKF's reference output. Its provenance map records `search` as an ast-grep match at that line, which is what `[AST:...]` means; an export SKF reads by eye instead is cited `[SRC:...]`. The [**Verifying a Skill**](#verifying-a-skill) section below shows how to walk the citation chain yourself.
|
|
64
64
|
|
|
65
65
|
## Install
|
|
66
66
|
|
package/docs/_data/pinned.yaml
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
# Enforced two ways: (1) release.yaml bumps this line in the same commit
|
|
33
33
|
# as package.json + marketplace.json on every release; (2) validate-docs-drift.js
|
|
34
34
|
# cross-checks this value against package.json.version and fails on mismatch.
|
|
35
|
-
skf_version: "
|
|
35
|
+
skf_version: "5.0.0"
|
|
36
36
|
|
|
37
37
|
# Path to the oh-my-skills repo, resolved relative to this repo's root.
|
|
38
38
|
# Override at runtime with the OMS environment variable if oh-my-skills
|
|
@@ -46,12 +46,13 @@ oh_my_skills_path: "../oh-my-skills"
|
|
|
46
46
|
skills:
|
|
47
47
|
oms-cognee:
|
|
48
48
|
library: cognee
|
|
49
|
-
version: "1.
|
|
49
|
+
version: "1.6.2"
|
|
50
50
|
source_repo: "https://github.com/topoteretes/cognee"
|
|
51
|
-
source_commit: "
|
|
52
|
-
source_ref: "v1.
|
|
53
|
-
upstream_commit_date: "2026-
|
|
54
|
-
|
|
51
|
+
source_commit: "ba3631f2ed363a6ea50d649c34c56885af6b36fe"
|
|
52
|
+
source_ref: "v1.6.2"
|
|
53
|
+
upstream_commit_date: "2026-09-29"
|
|
54
|
+
# strict SKF 4.0.0 re-test of the version that ships (20261103T134151Z-12e5ccdf)
|
|
55
|
+
test_score: 99.0
|
|
55
56
|
test_mode: "naive"
|
|
56
57
|
confidence_tier: "Deep"
|
|
57
58
|
source_authority: "community"
|
|
@@ -59,12 +60,13 @@ skills:
|
|
|
59
60
|
|
|
60
61
|
oms-cocoindex:
|
|
61
62
|
library: cocoindex
|
|
62
|
-
version: "0.
|
|
63
|
+
version: "1.0.0"
|
|
63
64
|
source_repo: "https://github.com/cocoindex-io/cocoindex"
|
|
64
|
-
source_commit: "
|
|
65
|
-
source_ref: "
|
|
66
|
-
upstream_commit_date: "2026-
|
|
67
|
-
|
|
65
|
+
source_commit: "5fe4f37a526e51516655832ec9814e7ca24ade9a"
|
|
66
|
+
source_ref: "v1.0.0"
|
|
67
|
+
upstream_commit_date: "2026-04-22"
|
|
68
|
+
# strict SKF 4.0.0 re-test of the version that ships (20261103T131524Z-5907fba9)
|
|
69
|
+
test_score: 100.0
|
|
68
70
|
test_mode: "naive"
|
|
69
71
|
confidence_tier: "Deep"
|
|
70
72
|
source_authority: "community"
|
|
@@ -77,7 +79,9 @@ skills:
|
|
|
77
79
|
source_commit: "e486d3826bcd40c52db1c766966d1c8ec16df6cb"
|
|
78
80
|
source_ref: "v10.3.5"
|
|
79
81
|
upstream_commit_date: "2026-04-07"
|
|
80
|
-
|
|
82
|
+
# null: the strict SKF 4.0.0 re-test of the version that ships
|
|
83
|
+
# (20261103T131516Z-6e2b972a) is blocked by the hard gate, so it records no score.
|
|
84
|
+
test_score: null
|
|
81
85
|
test_mode: "naive"
|
|
82
86
|
confidence_tier: "Deep"
|
|
83
87
|
source_authority: "community"
|
|
@@ -90,7 +94,9 @@ skills:
|
|
|
90
94
|
source_commit: "a5ffb45be05335d2c547436664cfbfb8c22d04df"
|
|
91
95
|
source_ref: "HEAD"
|
|
92
96
|
upstream_commit_date: "2026-03-22"
|
|
93
|
-
|
|
97
|
+
# null: the strict SKF 4.0.0 report (20261103T100001Z-981f84e6) is
|
|
98
|
+
# blocked by the hard gate, so it records no score.
|
|
99
|
+
test_score: null
|
|
94
100
|
test_mode: "naive"
|
|
95
101
|
confidence_tier: "Deep"
|
|
96
102
|
source_authority: "community"
|
package/docs/architecture.md
CHANGED
|
@@ -22,7 +22,7 @@ A workflow directory holds some or all of these files, and each has a specific j
|
|
|
22
22
|
| File | What it does | When it loads |
|
|
23
23
|
|---------------------------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
|
24
24
|
| `SKILL.md` | Human-readable entry point: goals, role definition, initialization sequence, invocation contract, and the route to the first step | Entry point per workflow |
|
|
25
|
-
| `customize.toml` | Settings a team or a person can override without editing SKF, such as facts to keep in mind for the whole run or a command to run when the workflow ends. Overrides go in `_bmad/custom/<workflow>.toml` (shared) or `_bmad/custom/<workflow>.user.toml` (personal), for example `_bmad/custom/skf-create-skill.toml`. The workflow reads them by running BMAD Method's customization script,
|
|
25
|
+
| `customize.toml` | Settings a team or a person can override without editing SKF, such as facts to keep in mind for the whole run or a command to run when the workflow ends. Overrides go in `_bmad/custom/<workflow>.toml` (shared) or `_bmad/custom/<workflow>.user.toml` (personal), for example `_bmad/custom/skf-create-skill.toml`. The workflow reads them by running SKF's customization helper through `uv`, which runs BMAD Method's customization script, added by the BMAD Method installer. When that script cannot run, as with SKF installed alone, the workflow prints one warning, adds `customization_resolver_unavailable` to the run's warnings (an interactive Export Skill run only prints it) and applies the bundled settings | Read once, when the workflow starts |
|
|
26
26
|
| `references/*.md` (step files) | The workflow's stages, one file per step. Each names the next one in its `nextStepFile` front matter, and the last one hands off to the shared health check | One at a time (just-in-time) |
|
|
27
27
|
| `references/*.md` (reference data) | Workflow-specific reference data: rules, patterns, protocols | Read by steps on demand |
|
|
28
28
|
| `assets/*.md` | Workflow-specific output formats: schemas, templates, heuristics | Read by steps on demand |
|
|
@@ -55,7 +55,7 @@ flowchart LR
|
|
|
55
55
|
|
|
56
56
|
1. **Trigger**: You type `@Ferris CS` (or a close match like `create-skill`). The menu in `skf-forger/SKILL.md` maps the code to the workflow's skill, here `skf-create-skill`.
|
|
57
57
|
2. **Agent loads**: `skf-forger/SKILL.md` puts the persona (identity, principles, critical actions) into the context window. Ferris also loads its sidecar files (`forge-tier.yaml`, `preferences.yaml`), which keep your tier and preferences between sessions.
|
|
58
|
-
3. **Workflow loads**: The workflow's `SKILL.md` loads your SKF settings from `_bmad/skf/config.yaml` and checks whether the run is headless (runs without asking questions). It then runs
|
|
58
|
+
3. **Workflow loads**: The workflow's `SKILL.md` loads your SKF settings from `_bmad/skf/config.yaml` and checks whether the run is headless (runs without asking questions). It then runs SKF's customization helper through `uv`, which runs BMAD Method's customization script to apply any team or personal overrides to the workflow's `customize.toml`, as Ferris does for his own settings when he starts. When that script cannot run (with SKF installed alone it is missing), the workflow prints one warning, adds `customization_resolver_unavailable` to the run's warnings (an interactive Export Skill run only prints it) and keeps the bundled settings. Then it opens the first step file.
|
|
59
59
|
4. **Step-by-step execution**: Only the current step file is in context (just-in-time loading). Each step names the next one. The assistant reads the step, carries it out, saves its output, then loads the next step. Future steps are never loaded early.
|
|
60
60
|
5. **Sub-agent delegation**: Some steps would otherwise read many large files, such as several `SKILL.md` documents or every file that imports a library. These steps hand the reading to sub-agents, which are helper AI sessions started with the Agent tool. Each sub-agent reads its share and returns a short JSON summary. The parent never loads the full text, so the next step starts with an uncluttered context window. AN (per-unit analysis), TS (coverage and coherence checks), VS (integration verification), RA (gap analysis) and SS (per-library extraction) work this way. VS and RA run at most 8 sub-agents at a time. SS runs 3 to 5 at a time in Claude Code.
|
|
61
61
|
6. **Knowledge injection**: Steps consult `skf-knowledge-index.csv` and load only the fragments from `knowledge/` that match by tags and relevance. Cross-cutting principles (zero hallucination, confidence tiers, provenance) load only when a step asks for them, never in advance.
|
package/docs/concepts.md
CHANGED
|
@@ -15,7 +15,7 @@ An agent skill is an instruction file that tells an AI agent how to use your cod
|
|
|
15
15
|
|
|
16
16
|
Skills follow the [agentskills.io](https://agentskills.io) open standard, so they work across Claude, Cursor, Copilot, and other AI tools.
|
|
17
17
|
|
|
18
|
-
**Example:** A skill for [cognee](https://github.com/topoteretes/cognee) tells your agent: "The function is `cognee.search()`, its first parameters are `query_text`, `query_type`, `user`, `datasets`, and `dataset_ids`, and it's defined at `cognee/api/v1/search/search.py:
|
|
18
|
+
**Example:** A skill for [cognee](https://github.com/topoteretes/cognee) tells your agent: "The function is `cognee.search()`, its first parameters are `query_text`, `query_type`, `user`, `datasets`, and `dataset_ids`, and it's defined at `cognee/api/v1/search/search.py:L41` (v1.6.2, commit `ba3631f2`)." With ast-grep installed, SKF reads such a signature from the structure of the actual source code (its abstract syntax tree, or AST) and labels it T1; a signature it reads by eye instead is labeled T1-low (see [Confidence Tiers](#confidence-tiers-t1t1-lowt2t3)).
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -24,8 +24,8 @@ Skills follow the [agentskills.io](https://agentskills.io) open standard, so the
|
|
|
24
24
|
Provenance means every instruction in a skill traces back to where it came from. For code, that's a file and line number. For documentation, it's a URL. For developer discourse such as issues, pull requests, and changelogs, it's the indexed document the instruction came from. **If SKF can't point to a source, it doesn't include the instruction.**
|
|
25
25
|
|
|
26
26
|
**Examples** (the citation forms, with paths from the oms-cognee skill in [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills)):
|
|
27
|
-
- `[AST:cognee/api/v1/search/search.py:
|
|
28
|
-
- `[SRC:cognee/api/v1/
|
|
27
|
+
- `[AST:cognee/api/v1/search/search.py:L41]`: an ast-grep rule matched the definition in the source code (T1)
|
|
28
|
+
- `[SRC:cognee/api/v1/__init__.py:L8]`: read from source code by eye, without an ast-grep match (T1-low)
|
|
29
29
|
- `[QMD:oms-cognee-temporal:releases.md]`: found in indexed release notes and other developer discourse (T2)
|
|
30
30
|
- `[EXT:https://docs.cognee.ai/getting-started/quickstart]`: taken from external documentation (T3)
|
|
31
31
|
|
|
@@ -79,7 +79,7 @@ Audit Skill also checks the documentation pages a skill tracked when it was buil
|
|
|
79
79
|
|
|
80
80
|
Every skill records the exact version (or commit) of the source code it was built from. This means you always know which version of the library the instructions apply to.
|
|
81
81
|
|
|
82
|
-
By default, the version is auto-detected from the source (package.json, pyproject.toml, etc.). You can also target a specific version, either by giving it during `@Ferris BS` (Brief Skill) or by adding `@version` to a Quick Skill command (`@Ferris QS cognee@1.
|
|
82
|
+
By default, the version is auto-detected from the source (package.json, pyproject.toml, etc.). You can also target a specific version, either by giving it during `@Ferris BS` (Brief Skill) or by adding `@version` to a Quick Skill command (`@Ferris QS cognee@1.6.2`). This is especially useful for docs-only skills, where there is no source code to detect a version from. When you target a version on a remote repository, SKF finds the matching git tag and clones from it. That way the extracted API signatures come from that version's code, not from whatever is on the default branch with a label added. If no tag matches, Quick Skill stops and lists the tags it found, while Create Skill warns you and falls back to the default branch.
|
|
83
83
|
|
|
84
84
|
When the source updates, re-run `@Ferris US` (Update Skill) to regenerate the skill. SKF writes the result as a new version and leaves the old one in place. Anything you wrote between `<!-- [MANUAL:name] -->` and `<!-- [/MANUAL:name] -->` markers is carried over; edits made anywhere else are not protected and can be overwritten. Update Skill follows the ref the skill was built from, so a skill built from a branch picks up that branch's new commits. To move a skill built from a release tag to a newer release, run `@Ferris US <name> --target-ref <tag>`.
|
|
85
85
|
|
package/docs/examples.md
CHANGED
|
@@ -5,25 +5,26 @@ description: Real-world scenarios and operational tips for Skill Forge. For comm
|
|
|
5
5
|
|
|
6
6
|
## What the Output Looks Like
|
|
7
7
|
|
|
8
|
-
When SKF generates a skill, you get a `SKILL.md` file with machine-readable frontmatter and provenance-backed instructions. Below is a trimmed example from the real [`oms-cognee` SKILL.md](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.
|
|
8
|
+
When SKF generates a skill, you get a `SKILL.md` file with machine-readable frontmatter and provenance-backed instructions. Below is a trimmed example from the real [`oms-cognee` SKILL.md](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.6.2/oms-cognee/SKILL.md) generated for [cognee](https://github.com/topoteretes/cognee) (full portfolio at [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills)):
|
|
9
9
|
|
|
10
10
|
**Frontmatter (tells AI agents when to load this skill):**
|
|
11
11
|
|
|
12
12
|
```yaml
|
|
13
13
|
name: oms-cognee
|
|
14
14
|
description: >
|
|
15
|
-
Builds apps on
|
|
16
|
-
Use when ingesting text/files/URLs into
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
visualizing
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
Builds apps on cognee v1.6.2, the knowledge-graph memory engine for AI agents.
|
|
16
|
+
Use when ingesting text/files/URLs into memory, building knowledge graphs, searching
|
|
17
|
+
memory with SearchType modes, enriching graphs with memify/improve, scoping memory
|
|
18
|
+
with datasets and node_sets, configuring LLM/embedding/graph/vector backends,
|
|
19
|
+
running custom pipelines, decorating agents with `agent_memory`, connecting
|
|
20
|
+
to Cognee Cloud with `serve`/`push`, exporting, validating or reporting on graphs,
|
|
21
|
+
or visualizing graphs and memory provenance. Covers cognee/__init__.py exports: the
|
|
22
|
+
V1 API (add, cognify, search, memify, datasets, agents, prune, update,
|
|
23
|
+
run_custom_pipeline, config, SearchType, report, validate, visualize_graph,
|
|
24
|
+
pipelines, Drop, run_migrations, tracing, tools) and the V2 memory API (remember,
|
|
25
|
+
recall, improve, forget, serve, disconnect, visualize, push, export, agent_memory,
|
|
26
|
+
MemoryEntry). Do NOT use for: cognee internals, the HTTP REST API (use
|
|
27
|
+
cognee-mcp or the FastAPI server), non-cognee memory/RAG libraries.
|
|
27
28
|
```
|
|
28
29
|
|
|
29
30
|
**Body (what your AI agent reads):**
|
|
@@ -33,15 +34,15 @@ description: >
|
|
|
33
34
|
|
|
34
35
|
| Function | Purpose | Key Params | Source |
|
|
35
36
|
|----------|---------|------------|--------|
|
|
36
|
-
| add() | Ingest text, files, binary data | data, dataset_name | [AST:cognee/api/v1/add/add.py:
|
|
37
|
-
| cognify() | Build knowledge graph | datasets, graph_model | [AST:cognee/api/v1/cognify/cognify.py:
|
|
38
|
-
| search() | Query knowledge graph | query_text, query_type | [AST:cognee/api/v1/search/search.py:
|
|
39
|
-
| memify() | Enrich graph with custom tasks | extraction_tasks, data | [AST:cognee/modules/memify/memify.py:
|
|
40
|
-
| remember() | V2 one-shot memory ingest | data, dataset_name | [AST:cognee/api/v1/remember/remember.py:
|
|
41
|
-
| DataPoint | Base class for custom graph nodes | inherit and add fields | [
|
|
37
|
+
| add() | Ingest text, files, binary data | data, dataset_name | [AST:cognee/api/v1/add/add.py:L39] |
|
|
38
|
+
| cognify() | Build knowledge graph | datasets, graph_model | [AST:cognee/api/v1/cognify/cognify.py:L110] |
|
|
39
|
+
| search() | Query knowledge graph | query_text, query_type | [AST:cognee/api/v1/search/search.py:L41] |
|
|
40
|
+
| memify() | Enrich graph with custom tasks | extraction_tasks, data | [AST:cognee/modules/memify/memify.py:L27] |
|
|
41
|
+
| remember() | V2 one-shot memory ingest | data, dataset_name | [AST:cognee/api/v1/remember/remember.py:L867] |
|
|
42
|
+
| DataPoint | Base class for custom graph nodes | inherit and add fields | [SRC:cognee/low_level.py:L2] |
|
|
42
43
|
```
|
|
43
44
|
|
|
44
|
-
Every line number above is copied from the real SKILL.md and points at the line where that function is defined in the cognee source, so none of it is illustrative. SKF also ships its extraction record for this skill in oh-my-skills: [`forge-data/oms-cognee/1.
|
|
45
|
+
Every line number above is copied from the real SKILL.md and points at the line where that function is defined in the cognee source, so none of it is illustrative. SKF also ships its extraction record for this skill in oh-my-skills: [`forge-data/oms-cognee/1.6.2/provenance-map.json`](https://github.com/armelhbobdad/oh-my-skills/blob/main/forge-data/oms-cognee/1.6.2/provenance-map.json). The tags follow the tool that read each definition: that record lists the five functions as ast-grep matches (`T1`), so the skill cites them `[AST:...]`, while `DataPoint` is an alias that `cognee/low_level.py` re-binds, read by eye and cited `[SRC:...]` (`T1-low`). [Verifying a Skill](/docs/verifying-a-skill.md#2-open-the-skills-provenance-mapjson) walks through the `search` entry.
|
|
45
46
|
|
|
46
47
|
Provenance tags trace each instruction to its source:
|
|
47
48
|
- `[AST:file:Lnn]` (T1): an ast-grep rule matched the definition in the code (highest confidence)
|
|
@@ -55,16 +56,22 @@ See [Skill Model → Output Architecture](/docs/skill-model.md#output-architectu
|
|
|
55
56
|
|
|
56
57
|
```
|
|
57
58
|
skills/oms-cognee/
|
|
58
|
-
├── active -> 1.
|
|
59
|
+
├── active -> 1.6.2
|
|
59
60
|
├── 0.5.8/
|
|
60
61
|
│ └── oms-cognee/
|
|
61
62
|
│ ├── SKILL.md # Archived: v0.5.8, pinned to b51dcce1
|
|
62
63
|
│ ├── context-snippet.md
|
|
63
64
|
│ ├── metadata.json
|
|
64
65
|
│ └── references/
|
|
65
|
-
|
|
66
|
+
├── 1.0.0/
|
|
67
|
+
│ └── oms-cognee/
|
|
68
|
+
│ ├── SKILL.md # Archived: v1.0.0, pinned to 3c048aa4
|
|
69
|
+
│ ├── context-snippet.md
|
|
70
|
+
│ ├── metadata.json
|
|
71
|
+
│ └── references/
|
|
72
|
+
└── 1.6.2/
|
|
66
73
|
└── oms-cognee/
|
|
67
|
-
├── SKILL.md # Active: pinned to cognee v1.
|
|
74
|
+
├── SKILL.md # Active: pinned to cognee v1.6.2 (ba3631f2)
|
|
68
75
|
├── context-snippet.md # Compressed index for platform context files
|
|
69
76
|
├── metadata.json # Machine-readable provenance
|
|
70
77
|
└── references/ # Progressive disclosure detail
|
|
@@ -74,7 +81,7 @@ skills/oms-cognee/
|
|
|
74
81
|
└── pipelines-and-datapoints.md
|
|
75
82
|
```
|
|
76
83
|
|
|
77
|
-
This is the real directory listing from [`oh-my-skills/skills/oms-cognee/`](https://github.com/armelhbobdad/oh-my-skills/tree/main/skills/oms-cognee) after cognee shipped v1.0.0 upstream. SKF recompiled the skill from the
|
|
84
|
+
This is the real directory listing from [`oh-my-skills/skills/oms-cognee/`](https://github.com/armelhbobdad/oh-my-skills/tree/main/skills/oms-cognee) after cognee shipped v1.0.0 and then v1.6.2 upstream. Each time SKF recompiled the skill from the new commit and wrote it next to the existing trees. The older versions stay pinned to their original commits (`b51dcce1`, `3c048aa4`) and are still installable by any project that hasn't bumped its `CLAUDE.md` pin yet. The `active` symlink and the [`.export-manifest.json`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/.export-manifest.json) both point at the current version. Some skills also include `scripts/` and `assets/` directories when the source repository contains executable scripts or static assets. oms-cognee has neither; see [Skill Model → Per-Skill Output](/docs/skill-model.md#per-skill-output) for the full schema.
|
|
78
85
|
|
|
79
86
|
---
|
|
80
87
|
|
|
@@ -93,7 +100,7 @@ Ferris reads the repository, lists its public exports, and validates against the
|
|
|
93
100
|
Need a specific version? Append `@version`:
|
|
94
101
|
|
|
95
102
|
```
|
|
96
|
-
@Ferris QS cognee@1.
|
|
103
|
+
@Ferris QS cognee@1.6.2
|
|
97
104
|
```
|
|
98
105
|
|
|
99
106
|
### Brownfield Platform: Pipeline or per-workflow
|
|
@@ -325,7 +332,7 @@ Generated skills automatically follow authoring best practices: third-person des
|
|
|
325
332
|
|
|
326
333
|
### Scripts & Assets
|
|
327
334
|
|
|
328
|
-
If your source repo includes executable scripts (such as `scripts/`, `bin/` or `
|
|
335
|
+
If your source repo includes executable scripts (such as `scripts/`, `bin/`, `tools/` or `cli/`; when one of these folders is a Python package, holding `__init__.py`, only its `__main__.py` and the modules with a shebang or an `if __name__ == "__main__":` block count as scripts) or static assets (such as `assets/`, `templates/` or `schemas/`), SKF detects and packages them automatically with provenance tracking. Only the files the brief's `scope.include` takes and its `scope.exclude` leaves are packaged, and Audit Skill reports a new one the same way. Scripts and assets you add yourself under `scripts/[MANUAL]/` or `assets/[MANUAL]/` are preserved during updates, just like `<!-- [MANUAL] -->` markers in SKILL.md.
|
|
329
336
|
|
|
330
337
|
### Let the Health Check Run
|
|
331
338
|
|
package/docs/getting-started.md
CHANGED
|
@@ -8,7 +8,7 @@ description: Install Skill Forge and generate your first verified skill in under
|
|
|
8
8
|
One command. One verified skill. Here's what an instruction in a cognee skill looks like:
|
|
9
9
|
|
|
10
10
|
```python
|
|
11
|
-
await cognee.search( # [AST:cognee/api/v1/search/search.py:
|
|
11
|
+
await cognee.search( # [AST:cognee/api/v1/search/search.py:L41]
|
|
12
12
|
query_text="What does Cognee do?"
|
|
13
13
|
)
|
|
14
14
|
```
|
|
@@ -93,7 +93,7 @@ After a successful `install` or `update`, and in `status`, the installer checks
|
|
|
93
93
|
ccc - optional, Forge+ tier https://github.com/cocoindex-io/cocoindex-code
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
Each tool reads `ok`, `upgrade to >= <minimum>` with the command that upgrades it, `missing` or `optional` with where to get it, or `installed, version unknown` when SKF cannot read its version. The minimums are the ones in the [Prerequisites](#prerequisites-full-reference) table. The check waits at most about 3 seconds for the tools to answer and never changes the command's exit code. It runs no tool from your project folder and never runs `npx`, so `tessl` and `skill-check`, which SKF runs through `npx`, read as optional when they are not installed.
|
|
96
|
+
Each tool reads `ok`, `upgrade to >= <minimum>` with the command that upgrades it, `missing` or `optional` with where to get it, or `installed, version unknown` when SKF cannot read its version. The minimums are the ones in the [Prerequisites](#prerequisites-full-reference) table. The check waits at most about 3 seconds for the tools to answer and never changes the command's exit code. It runs no tool from your project folder and never runs `npx`, so `tessl` and `skill-check`, which SKF runs through `npx`, read as optional when they are not installed. It never runs `tessl` or `skill-check`: on a tessl that has never run, any tessl command accepts tessl's Terms. It reads tessl's version from the name of the binary tessl installs, the one tessl's npm and Homebrew packages also run, and the version of `skill-check`, which has no `--version` option, from its installed package. An `@tessl/cli` before 0.63.0 is tessl itself, so its package gives the version. tessl reads `installed, version unknown` when it was installed with winget, pnpm or Volta, when an npm or Homebrew tessl's binary is not installed at `~/.local/bin/tessl` (`%LOCALAPPDATA%\tessl\bin\tessl.exe` on Windows), or when two files in tessl's `versions` folder have the size of the Windows copy, `tessl\bin\tessl.exe`. So does a `skill-check` installed with pnpm or Volta, or with yarn or bun on Windows.
|
|
97
97
|
|
|
98
98
|
A tier tool below its minimum does not count toward your tier. With an ast-grep older than 0.45.3, `@Ferris SF` leaves you at Quick, whatever else you have installed. Setup's FORGE STATUS report then shows an upgrade line for the tool, and a headless setup adds a `tool_below_minimum` warning to its `SKF_SETUP_RESULT_JSON` envelope. Upgrade the tool and run `@Ferris SF` again. A tool with no minimum, or one whose version SKF cannot read, never lowers your tier.
|
|
99
99
|
|
|
@@ -129,7 +129,7 @@ Ferris reads the repository, extracts the public API, and generates a skill in u
|
|
|
129
129
|
|
|
130
130
|
**Targeting a specific version:** Append `@version` to pin the skill to a library version:
|
|
131
131
|
```
|
|
132
|
-
@Ferris QS cognee@1.
|
|
132
|
+
@Ferris QS cognee@1.6.2
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
**Full quality path (pipeline mode):**
|
package/docs/how-it-works.md
CHANGED
|
@@ -23,7 +23,7 @@ In under a minute, plus one preview for you to approve, you get a `SKILL.md` you
|
|
|
23
23
|
|
|
24
24
|
### 2. The workflow resolves your target
|
|
25
25
|
|
|
26
|
-
Ferris turns your input into a GitHub repository. A GitHub URL is used as given. A package name is looked up on every registry of npm, PyPI and crates.io (a language hint asks only that language's registry), with a web search as the last resort. When more than one registry answers, an interactive run lists every candidate and asks which project you mean, and a headless run keeps the first registry's pick (npm, then PyPI, then crates.io) and records an `also_found_in` warning in its result envelope. He then detects the main language from the repository's files, starting with its manifest (`pyproject.toml`, `package.json`, etc.). By default Quick Skill reads the repository's default branch. To pin a release, add it to the command (`@Ferris QS cognee@1.
|
|
26
|
+
Ferris turns your input into a GitHub repository. A GitHub URL is used as given. A package name is looked up on every registry of npm, PyPI and crates.io (a language hint asks only that language's registry), with a web search as the last resort. When more than one registry answers, an interactive run lists every candidate and asks which project you mean, and a headless run keeps the first registry's pick (npm, then PyPI, then crates.io) and records an `also_found_in` warning in its result envelope. He then detects the main language from the repository's files, starting with its manifest (`pyproject.toml`, `package.json`, etc.). By default Quick Skill reads the repository's default branch. To pin a release, add it to the command (`@Ferris QS cognee@1.6.2`): Ferris checks that the matching git tag exists, stops if it doesn't, and reads everything from that tag.
|
|
27
27
|
|
|
28
28
|
Quick Skill has a step that checks for an official skill before it reads any code, but it skips that check until agentskills.io offers a registry API to ask, so Ferris goes straight on to extraction.
|
|
29
29
|
|
|
@@ -50,7 +50,7 @@ That's the whole pipeline. One trigger in, one reviewed skill out, built from co
|
|
|
50
50
|
Quick Skill is the fastest path, not the most thorough one. When you want every instruction tied to a file and a line, use the brief-driven [`create-skill`](/docs/workflows.md#create-skill-cs) path instead: describe the skill's scope with `@Ferris BS`, which writes a `skill-brief.yaml`, then compile it with `@Ferris CS`. That path records the exact commit it read, and with ast-grep installed each export an ast-grep rule matches carries a receipt like this one:
|
|
51
51
|
|
|
52
52
|
```python
|
|
53
|
-
await cognee.search( # [AST:cognee/api/v1/search/search.py:
|
|
53
|
+
await cognee.search( # [AST:cognee/api/v1/search/search.py:L41]
|
|
54
54
|
query_text="What does Cognee do?"
|
|
55
55
|
)
|
|
56
56
|
```
|
package/docs/index.md
CHANGED
|
@@ -26,7 +26,7 @@ Skill Forge reads a library's source code and docs and writes a skill: an instru
|
|
|
26
26
|
|
|
27
27
|
<div class="receipt-sample">
|
|
28
28
|
<span class="receipt-sample__label">An ast-grep receipt looks like</span>
|
|
29
|
-
<code class="receipt-sample__chip">[AST:cognee/api/v1/search/search.py:
|
|
29
|
+
<code class="receipt-sample__chip">[AST:cognee/api/v1/search/search.py:L41]</code>
|
|
30
30
|
<span class="receipt-sample__check" aria-label="verified">✓</span>
|
|
31
31
|
</div>
|
|
32
32
|
|
package/docs/skill-model.md
CHANGED
|
@@ -187,25 +187,26 @@ Skills follow the [agentskills.io specification](https://agentskills.io/specific
|
|
|
187
187
|
---
|
|
188
188
|
name: oms-cognee
|
|
189
189
|
description: >
|
|
190
|
-
Builds apps on
|
|
191
|
-
Use when ingesting text/files/URLs into
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
visualizing
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
190
|
+
Builds apps on cognee v1.6.2, the knowledge-graph memory engine for AI agents.
|
|
191
|
+
Use when ingesting text/files/URLs into memory, building knowledge graphs, searching
|
|
192
|
+
memory with SearchType modes, enriching graphs with memify/improve, scoping memory
|
|
193
|
+
with datasets and node_sets, configuring LLM/embedding/graph/vector backends,
|
|
194
|
+
running custom pipelines, decorating agents with `agent_memory`, connecting
|
|
195
|
+
to Cognee Cloud with `serve`/`push`, exporting, validating or reporting on graphs,
|
|
196
|
+
or visualizing graphs and memory provenance. Covers cognee/__init__.py exports: the
|
|
197
|
+
V1 API (add, cognify, search, memify, datasets, agents, prune, update,
|
|
198
|
+
run_custom_pipeline, config, SearchType, report, validate, visualize_graph,
|
|
199
|
+
pipelines, Drop, run_migrations, tracing, tools) and the V2 memory API (remember,
|
|
200
|
+
recall, improve, forget, serve, disconnect, visualize, push, export, agent_memory,
|
|
201
|
+
MemoryEntry). Do NOT use for: cognee internals, the HTTP REST API (use
|
|
202
|
+
cognee-mcp or the FastAPI server), non-cognee memory/RAG libraries.
|
|
202
203
|
---
|
|
203
204
|
```
|
|
204
205
|
|
|
205
206
|
Every instruction in the body traces to source, with a citation that names the tool that read it (`[AST:]` for an ast-grep match, `[SRC:]` for a read by eye):
|
|
206
207
|
|
|
207
208
|
```python
|
|
208
|
-
await cognee.search( # [AST:cognee/api/v1/search/search.py:
|
|
209
|
+
await cognee.search( # [AST:cognee/api/v1/search/search.py:L41]
|
|
209
210
|
query_text="What does Cognee do?"
|
|
210
211
|
)
|
|
211
212
|
```
|
|
@@ -214,44 +215,46 @@ await cognee.search( # [AST:cognee/api/v1/search/search.py:L27]
|
|
|
214
215
|
|
|
215
216
|
Machine-readable provenance for every skill:
|
|
216
217
|
|
|
217
|
-
This is a trimmed excerpt from the real [`oms-cognee/1.
|
|
218
|
+
This is a trimmed excerpt from the real [`oms-cognee/1.6.2/metadata.json`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.6.2/oms-cognee/metadata.json) shipped with the oh-my-skills canonical output. Every value below is copied from the file, not made up for illustration.
|
|
218
219
|
|
|
219
220
|
```json
|
|
220
221
|
{
|
|
221
222
|
"name": "oms-cognee",
|
|
222
|
-
"version": "1.
|
|
223
|
+
"version": "1.6.2",
|
|
223
224
|
"skill_type": "single",
|
|
224
225
|
"source_authority": "community",
|
|
225
226
|
"source_repo": "https://github.com/topoteretes/cognee",
|
|
226
|
-
"source_commit": "
|
|
227
|
-
"source_ref": "v1.
|
|
227
|
+
"source_commit": "ba3631f2ed363a6ea50d649c34c56885af6b36fe",
|
|
228
|
+
"source_ref": "v1.6.2",
|
|
228
229
|
"confidence_tier": "Deep",
|
|
229
230
|
"spec_version": "1.3",
|
|
230
|
-
"generation_date": "2026-
|
|
231
|
+
"generation_date": "2026-11-02T19:41:43Z",
|
|
231
232
|
"language": "python",
|
|
232
|
-
"ast_node_count":
|
|
233
|
+
"ast_node_count": 42,
|
|
233
234
|
"confidence_distribution": {
|
|
234
|
-
"t1":
|
|
235
|
-
"t1_low":
|
|
236
|
-
"t2":
|
|
237
|
-
"t3":
|
|
235
|
+
"t1": 37,
|
|
236
|
+
"t1_low": 49,
|
|
237
|
+
"t2": 0,
|
|
238
|
+
"t3": 0
|
|
238
239
|
},
|
|
239
240
|
"stats": {
|
|
240
|
-
"exports_documented":
|
|
241
|
-
"exports_public_api":
|
|
242
|
-
"exports_internal":
|
|
243
|
-
"exports_total":
|
|
244
|
-
"public_api_coverage":
|
|
245
|
-
"total_coverage":
|
|
241
|
+
"exports_documented": 86,
|
|
242
|
+
"exports_public_api": 102,
|
|
243
|
+
"exports_internal": 355,
|
|
244
|
+
"exports_total": 457,
|
|
245
|
+
"public_api_coverage": 0.8431,
|
|
246
|
+
"total_coverage": 0.1882,
|
|
247
|
+
"scripts_count": 0,
|
|
248
|
+
"assets_count": 0
|
|
246
249
|
}
|
|
247
250
|
}
|
|
248
251
|
```
|
|
249
252
|
|
|
250
|
-
Fields omitted from this excerpt for brevity: `source_root`, `description`, `exports[]`, `tool_versions`, `dependencies`, `compatibility
|
|
253
|
+
Fields omitted from this excerpt for brevity: `source_root`, `description`, `exports[]`, `tool_versions`, `dependencies`, `compatibility` and `generated_by`. Update Skill records `last_update` and `update_type` at the top level of `provenance-map.json` in `forge-data/{name}/{version}/`, and an update removes both from `metadata.json`, which marks an update only in `generation_date`. The full 146-line file lives at [`oh-my-skills/skills/oms-cognee/1.6.2/oms-cognee/metadata.json`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.6.2/oms-cognee/metadata.json).
|
|
251
254
|
|
|
252
|
-
Two fields are easy to mix up. `confidence_tier` holds the forge tier a single skill like this one was compiled at (Quick, Forge, Forge+ or Deep). A stack skill records there the dominant confidence tier of its libraries (T1, T1-low, T2 or T3) and keeps its forge tier in `forge_tier`; Export Skill still accepts a forge tier from a stack made by an earlier SKF version, with a warning that running Stack Skill again records the dominant tier. `confidence_distribution` counts the
|
|
255
|
+
Two fields are easy to mix up. `confidence_tier` holds the forge tier a single skill like this one was compiled at (Quick, Forge, Forge+ or Deep). A stack skill records there the dominant confidence tier of its libraries (T1, T1-low, T2 or T3) and keeps its forge tier in `forge_tier`; Export Skill still accepts a forge tier from a stack made by an earlier SKF version, with a warning that running Stack Skill again records the dominant tier. `confidence_distribution` counts each claim by the tier of its signature (`signature_source`: T1, T1-low, T2 or T3), which can be lower than the entry's `confidence` label. In a stack it counts each library once, by the library's tier, so its bins sum to `library_count`.
|
|
253
256
|
|
|
254
|
-
|
|
257
|
+
Its counts follow the tool that read each export's signature: 37 exports whose signature an ast-grep rule matched count as `t1`, and 49 count as `t1_low`. Of those 49, 44 were read by eye (`source-read`), such as aliases, module namespaces and the names gap-driven repairs added. The other 5 were located by an ast-grep rule, but their signatures were read by eye, such as the methods of the `config` class. `ast_node_count` (42) counts every export an ast-grep rule matched. The skill's 1.0.0 metadata, written by an SKF version that labeled exports by the forge tier, counted all 34 of its exports as `t1`. `exports_documented` (86) is below `exports_public_api` (102): the brief leaves some top-level names out of scope, and the skill's test report lists them and logs the remaining difference as a Medium `metadata-drift` gap.
|
|
255
258
|
|
|
256
259
|
`scripts` and `assets` arrays are optional: SKF leaves them out entirely, rather than writing empty arrays, when the source has no scripts or assets.
|
|
257
260
|
|
|
@@ -301,18 +304,17 @@ Export injects a managed section between markers:
|
|
|
301
304
|
The block below is the real managed section currently in [`oh-my-skills/CLAUDE.md`](https://github.com/armelhbobdad/oh-my-skills/blob/main/CLAUDE.md), showing one of its four compiled skills. Every line is copied from the file except the last one before `<!-- SKF:END -->`, which stands in for the three skills left out:
|
|
302
305
|
|
|
303
306
|
```markdown
|
|
304
|
-
<!-- SKF:BEGIN updated:2026-
|
|
307
|
+
<!-- SKF:BEGIN updated:2026-11-02 -->
|
|
305
308
|
[SKF Skills]|4 skills|0 stack
|
|
306
309
|
|IMPORTANT: Prefer documented APIs over training data.
|
|
307
310
|
|When using a listed library, read its SKILL.md before writing code.
|
|
308
311
|
|
|
|
309
|
-
|[oms-cognee v1.
|
|
310
|
-
|IMPORTANT: oms-cognee v1.
|
|
312
|
+
|[oms-cognee v1.6.2]|root: skills/oms-cognee/
|
|
313
|
+
|IMPORTANT: oms-cognee v1.6.2 — read SKILL.md before writing oms-cognee code. Do NOT rely on training data.
|
|
311
314
|
|quick-start:SKILL.md#quick-start
|
|
312
|
-
|api
|
|
313
|
-
|
|
|
314
|
-
|
|
|
315
|
-
|gotchas: cognee.low_level REMOVED from public API in v1.0.0 (import from cognee.infrastructure.engine directly); cognee.run_migrations REPLACED by cognee.run_startup_migrations (relational + vector); cognee.delete is DEPRECATED since v0.3.9 (use cognee.datasets.delete_data or cognee.forget); cognee.pipelines restructured in v1.0.0 (package with Drop + lazy re-exports); cognee.agent_memory requires async function; cognee.serve() without url triggers Auth0 Device Code Flow; cognee.start_ui is sync and needs pid_callback arg; all add/cognify/search/memify/remember/recall/improve/forget/serve are async — always await.
|
|
315
|
+
|api: add(), cognify(), search(), memify(), remember(), recall(), improve(), forget(), serve(), run_migrations()
|
|
316
|
+
|key-types:SKILL.md#key-types — SearchType (20 modes, HYBRID_COMPLETION default), RememberResult, DataPoint, Drop
|
|
317
|
+
|gotchas: cognee.run_startup_migrations is GONE in v1.6.2 (AttributeError) — use cognee.run_migrations(); search() now defaults to HYBRID_COMPLETION (pin query_type when the result shape matters); low_level is not a top-level name but `from cognee.low_level import DataPoint, setup` still works; a bare cognee.serve() runs the Auth0 device flow only when a device client ID is configured, else raises CogneeConfigurationError; agent_memory's save_traces is now save_session_traces; cognee.delete is DEPRECATED since v0.3.9 (use cognee.forget or cognee.datasets.delete_data); cognee.start_ui is sync and needs pid_callback; add/cognify/search/memify/remember/recall/improve/forget/serve/push/export/report/validate are async — always await.
|
|
316
318
|
|
|
|
317
319
|
|(three more skills are left out here for brevity: oms-cocoindex, oms-storybook-react-vite and oms-uitripled; see the full file)
|
|
318
320
|
<!-- SKF:END -->
|
package/docs/troubleshooting.md
CHANGED
|
@@ -49,6 +49,12 @@ Install [cocoindex-code](https://github.com/cocoindex-io/cocoindex-code) (the `c
|
|
|
49
49
|
|
|
50
50
|
When ccc is available (Forge+, or Deep with ccc), create-skill indexes the skill's source with it. A local source folder inside your project or inside another git checkout (a subfolder such as `./packages/lib`, a linked worktree or a submodule) becomes a ccc project of its own, and ccc does not gitignore an index there. create-skill keeps it out of git by writing a `.gitignore` holding `*` inside that `.cocoindex_code/` folder, and says so in one line; it never edits your own `.gitignore`. For a folder an earlier SKF release left untracked, run create-skill for that source again, or create `<source>/.cocoindex_code/.gitignore` holding the single line `*`. If you already committed the index, `git rm -r --cached <source>/.cocoindex_code` stops tracking it.
|
|
51
51
|
|
|
52
|
+
### Setup says the CCC index failed
|
|
53
|
+
|
|
54
|
+
Surfaced by `@Ferris SF` when ccc is available and `ccc index` exits with an error: the forge status shows `indexing failed, semantic discovery unavailable this session` with ccc's own message. Setup still finishes at your tier; only semantic discovery is off until the index builds. One cause is an index that an older ccc wrote and the installed ccc cannot read, with a message such as `Failed to deserialize pickle payload`.
|
|
55
|
+
|
|
56
|
+
**Fix:** from the project root, run `ccc reset`, then `ccc daemon restart`, then re-run `@Ferris SF`. `ccc reset` deletes only the index databases and keeps `.cocoindex_code/settings.yml` with SKF's exclusions. Restart the daemon before indexing again: it still holds the databases `ccc reset` deleted, so an index built right after the reset can fail with `environment already open in this program`.
|
|
57
|
+
|
|
52
58
|
### `@Ferris deepwiki` shows a deprecation notice
|
|
53
59
|
|
|
54
60
|
The auto pipeline was briefly named `deepwiki`; it's now [`forge-auto`](/docs/forge-auto.md). It was renamed to avoid confusion with the DeepWiki MCP server, since the pipeline compiles a verified skill from source and does **not** call that server. `deepwiki` still works (it resolves to `forge-auto`) but prints a one-time notice. Switch your commands to `@Ferris forge-auto <repo-or-doc-url>`.
|
|
@@ -145,6 +151,8 @@ Surfaced by `@Ferris US` when another update of the same skill holds its run loc
|
|
|
145
151
|
|
|
146
152
|
**`run-lock-lost`:** the same status with this reason means the update waited at a question past the stale time, so another update may have changed the skill (`error.phase` is `merge:run-lock` or `write:run-lock`). It stops before it writes `metadata.json`, and the halt undoes anything the update already wrote: it removes the new version folders, or, for a repair from a test report, restores the files it edited in place from the copy it took first, and the message says which. Re-run the update once no other update of that skill runs; if a version folder the message names is still on disk, delete it first.
|
|
147
153
|
|
|
154
|
+
**`busy`:** the same status with this reason means another run's flip of the skill's `active` link (Create Skill, Quick Skill or Drop Skill) held the link's lock for 5 seconds while the update was pointing the link at its version (`error.phase` is `write:active-symlink`). The update did not change the link, and the halt undid what the update wrote. Re-run the update once that run ends.
|
|
155
|
+
|
|
148
156
|
### A report says `Tessl Review: off`, `not run`, `no result` or `failed`
|
|
149
157
|
|
|
150
158
|
Create Skill and Test Skill record one `Tessl Review:` line in the evidence report and the test report. Tessl Review is optional and never stops a run, so the line says why it produced no score:
|