Bootstrap Skills Reference¶
The init-project pipeline runs exactly one bootstrap skill against the
analyzed repository. That skill writes .agentsmith/context.yaml and
.agentsmith/coding-principles.md — the two files every code-touching
pipeline (fix-bug, add-feature, security-scan, ...) requires.
Which bootstrap skill runs is decided by the project_language enum, derived
from ProjectAnalyzer's detected primary language.
The project_language enum¶
The enum has four values. The mapping from the free-form
ProjectMap.PrimaryLanguage string to the enum is a fixed code table
(ProjectLanguageMapper) — adding a fifth language is a vocabulary change,
not a config knob.
project_language |
Synonyms recognized in primary_language |
|---|---|
csharp |
csharp, c#, .net, dotnet |
node |
typescript, javascript, node, node.js, nodejs, ts, js |
python |
python, py |
generic |
any value not listed above, or empty/missing |
Matching is case-insensitive. The detected primary_language is preserved
verbatim in ProjectMap — only the enum collapses.
The four bootstrap skills¶
Each bootstrap skill declares its activation in SKILL.md frontmatter. The
expression is evaluated by the skill loader at run time.
| Skill | activates_when |
|---|---|
csharp-bootstrap |
pipeline_name = "init-project" AND project_language = "csharp" |
node-bootstrap |
pipeline_name = "init-project" AND project_language = "node" |
python-bootstrap |
pipeline_name = "init-project" AND project_language = "python" |
generic-bootstrap |
pipeline_name = "init-project" AND project_language = "generic" |
The generic-bootstrap skill is the fallback for everything outside the
narrow enum (Go, Java, Kotlin, Rust, Ruby, Elixir, Swift, ...). Its output is
deliberately minimal and flagged in context.yaml as a stub that the
operator is expected to flesh out before merging the bootstrap PR.
Diagnosing language misclassification¶
If a TypeScript monorepo gets bootstrapped as generic, or a multi-language
repo picks the wrong language:
- Open the init run's
result.mdunder.agentsmith/runs/<run-id>/. It reports the analyzer'sprimary_languagevalue and the resolvedproject_languageenum side by side. - If
primary_languageis correct but the enum collapsed togeneric, the synonym is missing from the mapper table — file an issue. - If
primary_languageitself is wrong,ProjectAnalyzer's detection heuristics need adjustment. The most common cause is a vendored third-party directory swaying the file-count heuristic; exclude it via the repo's.gitignoreor analyzer ignore rules and re-runinit-project.
The PR body of a bootstrap run names the skill that ran, so you can confirm the dispatch decision without reading the run log.