shaktra-init — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited shaktra-init (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
.shaktra/ directory must NOT already exist (prevents double-init)Run python3 -c "import yaml" via Bash.
If the command fails (non-zero exit code), stop and report: "Shaktra requires PyYAML for its hook scripts. Install with: pip install pyyaml Then run /shaktra:init again."
Do not proceed to Step 1 until PyYAML is confirmed installed.
Check if .shaktra/ directory exists in the current working directory.
.shaktra/ directory first."Ask the user for the following project details. Present these as a single prompt, offering sensible defaults where possible:
| Field | Prompt | Default | Valid Values |
|---|---|---|---|
name | Project name? | Current directory name | Any string |
type | Greenfield or brownfield? | greenfield | greenfield, brownfield |
language | Primary language? | _(none)_ | python, typescript, javascript, go, java, rust, ruby, php, csharp, other |
architecture | Architecture style? | _(none)_ | layered, hexagonal, clean, mvc, feature-based, event-driven, or blank |
test_framework | Test framework? | Infer from language | pytest, jest, vitest, mocha, go test, junit, rspec, phpunit, xunit, or custom |
coverage_tool | Coverage tool? | Infer from language | coverage.py, istanbul/nyc, c8, go cover, jacoco, simplecov, phpunit, coverlet, or custom |
package_manager | Package manager? | Infer from language | pip, poetry, uv, npm, yarn, pnpm, go mod, maven, gradle, cargo, bundler, composer, dotnet, or custom |
Inference rules for defaults:
python → pytest, coverage.py, piptypescript / javascript → jest, istanbul/nyc, npmgo → go test, go cover, go modjava → junit, jacoco, mavenrust → cargo test, cargo-tarpaulin, cargoruby → rspec, simplecov, bundlerphp → phpunit, phpunit, composercsharp → xunit, coverlet, dotnetCreate the following directories:
.shaktra/
.shaktra/memory/
.shaktra/stories/
.shaktra/designs/
.shaktra/analysis/Read template files from ${CLAUDE_PLUGIN_ROOT}/templates/ and write them into .shaktra/:
All 7 template files must be copied. Read each from ${CLAUDE_PLUGIN_ROOT}/templates/ and write to .shaktra/:
templates/settings.yml → .shaktra/settings.yml — Replace empty project: fields with user's answers from Step 2templates/principles.yml → .shaktra/memory/principles.yml — Copy as-istemplates/anti-patterns.yml → .shaktra/memory/anti-patterns.yml — Copy as-istemplates/procedures.yml → .shaktra/memory/procedures.yml — Copy as-istemplates/sprints.yml → .shaktra/sprints.yml — Copy as-istemplates/analysis-manifest.yml → .shaktra/analysis/manifest.yml — Copy as-istemplates/shaktra-CLAUDE.md → .shaktra/CLAUDE.md — Copy as-is (project state documentation — describes what .shaktra/ contains)For settings.yml, populate the project: section with the gathered values:
project:
name: "<user's project name>"
type: "<greenfield or brownfield>"
language: "<user's language>"
architecture: "<user's architecture style, or empty>"
test_framework: "<user's test framework>"
coverage_tool: "<user's coverage tool>"
package_manager: "<user's package manager>"Architecture field notes:
principles.yml./shaktra:analyze workflow detects the existing architecture (D1: structure.yml) and the user can populate this field after analysis.All other sections (tdd, quality, analysis, sprints, memory) retain their template defaults.
Read the project CLAUDE.md template from ${CLAUDE_PLUGIN_ROOT}/templates/CLAUDE.md.
This template is a generic project documentation wireframe — no Shaktra-specific content. It includes:
Note: A separate .shaktra/CLAUDE.md file is also created to document the .shaktra/ directory structure and how Shaktra agents use it.
If no CLAUDE.md exists in the project root:
CLAUDE.md with the template content.If CLAUDE.md already exists in the project root:
/init CLAUDE.md to have Claude fill it in."If .shaktra/memory/decisions.yml or .shaktra/memory/lessons.yml already exist (upgrading from a previous Shaktra version):
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/migrate_memory.py <project_root>Display a summary of what was created:
Shaktra initialized successfully!
Project: <name> (<type>)
Language: <language>
Test Framework: <test_framework>
Coverage Tool: <coverage_tool>
Package Manager: <package_manager>
Created:
.shaktra/CLAUDE.md # Project state documentation (.shaktra/ structure and contents)
.shaktra/settings.yml
.shaktra/sprints.yml
.shaktra/memory/principles.yml
.shaktra/memory/anti-patterns.yml
.shaktra/memory/procedures.yml
.shaktra/analysis/manifest.yml
.shaktra/memory/
.shaktra/stories/
.shaktra/designs/
.shaktra/analysis/
CLAUDE.md (created | already exists)
Next steps:
1. Update CLAUDE.md with your project-specific information
2. Review .shaktra/settings.yml and adjust thresholds if needed
3. For brownfield projects: run /shaktra:analyze to understand the existing codebase
4. Run /shaktra:tpm to create design docs and stories
5. Run /shaktra:help for available commands and workflows~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.