agents-676c07 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited agents-676c07 (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.
Guidance for AI coding agents working on the adeptability (adept) codebase. Humans: see README.md for usage and CONTRIBUTING.md for the contributor workflow.
adept is a single-binary Go CLI for cross-harness AI skill portability: you author a skill once in a canonical format and adept renders it accurately into every AI coding harness in your project — Claude Code, Cursor, Codex, GitHub Copilot, OpenCode, and any config-driven adapter you register — then keeps the two sides in sync in both directions.
github.com/itaywol/adeptability. Binary: adept (entrypoint cmd/adept).git + optional network(GitHub API, skills.sh, an LLM provider for the optional intent pass).
sync decision. There is no central database.
User-facing CLI (five verbs + three subcommand groups):
| Command | Description | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| `adept init [--from <url>] [--ref <branch>] [--name <local>] [--mode symlink\ | copy]` | Scaffold .adeptability/, optionally clone a library, adopt existing harness files | |||||||
adept status | Project state at a glance: init, libraries, harnesses, drift | ||||||||
adept sync [--harness <id>] [--force] [--dry-run] | Push canonical skills → every enabled harness | ||||||||
adept sync-from [--harness <id>] [--all] [--force] [--dry-run] | Adopt harness-side edits back into canonical | ||||||||
adept diff [--harness <id>] | Show drift between canonical and rendered output | ||||||||
| `adept harness {add\ | remove\ | list}` | Manage enabled harnesses | ||||||
| `adept skill {add\ | install\ | update\ | info\ | search\ | check\ | edit\ | remove\ | list}` | Manage canonical skills (local + skills.sh/GitHub) |
| `adept library {add\ | remove\ | list}` | Manage remote skill-library remotes | ||||||
| `adept config {list\ | get\ | set\ | unset\ | llm ...}` | Strict-typed project config |
Global flags: --json, --log-level debug|info|warn|error, --project <path>, --library <path>. Run adept <cmd> --help for the authoritative, always-up-to-date surface.
cmd/adept/ main(): injects build info, calls cli.NewRoot, maps errors→exit codes
internal/cli/ Cobra composition root. One file per command group. NO package state.
pkg/adept/ STABLE public types + interfaces + sentinel errors (no behavior here)
pkg/adeptschema/ embedded JSON Schemas (skill / adapter / org / config) for validation
internal/canonical/ parse skill.yaml & SKILL.md frontmatter → *adept.Skill, schema-validate
internal/render/<h>/ one package per built-in harness: Renderer + Import (reverse render)
internal/adapter/ config-driven (YAML) harness adapters: load, validate, synthesize
internal/harness/ orchestrator: sync / sync-from / drift detection across all harnesses
internal/merge/ 3-way merge + diff3 for sync-from conflict handling
internal/library/ centralized + multi-library skill resolution (first-wins on collision)
internal/scan/ static safety scanner (+ optional LLM intent pass)
internal/registry/ github (trees API) + skillssh (skills.sh catalog) clients
internal/git/ git clone/pull/checkout-at-SHA wrapper
internal/{fsutil,locks,hash,config,project,log,budget,org}/ supporting primitiveswhere possible — e.g. SkillIDPattern is a string, compiled in internal/canonical). In-process consumers (tests, future LSP/plugins) depend on it; keep it stable.
cli.NewRoot wires every concrete implementationbehind an interface into a *Deps container. No package-level state, no init() side effects. Every command takes its dependencies explicitly so it can be unit-tested with mocks. Add a new dependency by extending Deps, not by reaching for a singleton.
answer to "did this change". Do not introduce version numbers as a sync signal.
<root>/skills/<id>/ with one SKILL.md(YAML frontmatter + markdown body) plus optional sidecars (scripts/, references/, assets/). The directory name is the authoritative id. Skill ids use the harness-compatible charset ^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$ (no underscore). Per-skill, per-harness overrides live in an optional harness: map (keyed by harness id) plus a promoted model field; renderers merge their entry last via common.MergeOverride, and the schema forbids overriding identity fields. Currently consumed by claude-code and cursor.
single-file (Cursor — drops sidecars), and aggregator (Codex/Copilot — concatenate into one file with section markers under a byte budget). Aggregators must parse their own markers on Import and degrade to a single synthesized skill when markers are absent.
config.json records which LLM provider/model is used;API keys are resolved from the environment (ANTHROPIC_API_KEY) at call time only.
cli.ExitFromError)0 clean · 1 generic error · 2 dirty/drift (ErrDirty) or merge conflict (ErrMergeConflict).clean/low/medium → 0, high → 1, critical → 2.HarnessAdapter, Renderer, Skill, RenderOutput, DriftReport,ImportedSkill, sentinel errors (ErrSkillNotFound, ErrMergeConflict, …), on-disk layout constants (BaseDirName, SkillsDirName, …). Start here to understand contracts.
means updating the schema and the Go struct tags in pkg/adept together.
Deps wiring. New commands are constructed from Deps.internal/render/<h>/ package pin exact output.go build ./... # build everything
go build -o /tmp/adept ./cmd/adept # build the binary
go test ./... # fast tests
go test -race ./... # race detector (CI gate)
go test -run E2E ./cmd/adept # end-to-end (builds the binary, drives real commands)
go vet ./...
gofmt -l . # must print nothing
golangci-lint run # config in .golangci.ymlThis repo is itself an adept skill library — committed skills live in skills/, and the project-canonical layout (.adeptability/, .claude/) is regenerated on demand and gitignored. To regenerate and verify rendering locally:
adept init --from "$(git rev-parse --show-toplevel)" --name adept --mode copy
adept harness add claude-code
adept sync
adept statusgofmt + goimports. CI fails on any unformatted file — run gofmt -w .before committing. There is no separate formatter to learn.
.golangci.yml enables errcheck, staticcheck, govet, gocritic,revive (exported symbols need doc comments), errorlint, nilerr, bodyclose, prealloc, unconvert, misspell, and more. Run golangci-lint run locally.
fmt.Errorf("doing X: %w", err). Compare witherrors.Is against the sentinels in pkg/adept/errors.go; add a new sentinel there rather than matching on error strings. Never silently drop an error that loses data.
deep nesting; doc comments on every exported symbol (full sentences, starting with the symbol name).
derives the next semver from the types (feat → minor, fix/perf → patch, feat!/BREAKING CHANGE: → major; refactor/docs/chore/test/ci → no bump).
testify/require for assertions.testdata/ beside each renderer; they pin exact renderedbytes. When you intentionally change output, update the fixture in the same commit and explain why in the message.
cmd/adept/*_test.go) builds the real binary and drives commands against tempdirs with an isolated HOME and ADEPT_LIBRARY. Guard slow paths with if testing.Short().
internal/render, internal/status, internal/budget, andinternal/canonical at ≥80%. Tests should catch regressions, not pad coverage.
Built-in (Go) adapter — for harnesses needing custom logic:
adept.HarnessAdapter in internal/render/<id>/.testdata/.internal/cli/deps.go (registerBuiltinAdapters).Config-driven adapter — for harnesses expressible declaratively (no code, no rebuild):
Drop a <id>.yaml adapter in ~/.adeptability/adapters/ matching pkg/adeptschema/adapter.schema.json (kind = per-skill | aggregator-single | aggregator-per-glob, plus output, frontmatter, body, detect, import hints).
release-please opens/maintains a release PR from Conventional Commits;merging it tags vX.Y.Z.
goreleaser (cross-compiled archives for darwin/linux/windows× amd64/arm64), checksums.txt, cosign signing, and build-provenance attestation via actions/attest-build-provenance (immutable-release safe). Docker publish to GHCR is opt-in via the DOCKER_PUBLISH repo variable.
go install, the scripts/install.shcurl installer, Homebrew tap (itaywol/homebrew-tap), and GHCR images.
scripts/npm/,@itaywol/adeptability) are unpublished — tracked in the "additional package managers" issue, gated on a thumbs-up before we commit to maintaining them.
CHANGELOG.md, .release-please-manifest.json, or version strings;release-please owns them.
<!-- gitnexus:start -->
This project is indexed by GitNexus as adeptability (3310 symbols, 11238 relationships, 248 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
Index stale? Runnode .gitnexus/run.cjs analyzefrom the project root — it auto-selects an available runner. No.gitnexus/run.cjsyet?npx gitnexus analyze(npm 11 crash →npm i -g gitnexus; #1939).
impact({target: "symbolName", direction: "upstream"}) and report the blast radius (direct callers, affected processes, risk level) to the user.detect_changes({scope: "compare", base_ref: "main"}).query({query: "concept"}) to find execution flows instead of grepping. It returns process-grouped results ranked by relevance.context({name: "symbolName"}).impact on it.rename which understands the call graph.detect_changes() to check affected scope.| Resource | Use for |
|---|---|
gitnexus://repo/adeptability/context | Codebase overview, check index freshness |
gitnexus://repo/adeptability/clusters | All functional areas |
gitnexus://repo/adeptability/processes | All execution flows |
gitnexus://repo/adeptability/process/{name} | Step-by-step execution trace |
| Task | Read this skill file |
|---|---|
| Understand architecture / "How does X work?" | .claude/skills/gitnexus/gitnexus-exploring/SKILL.md |
| Blast radius / "What breaks if I change X?" | .claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md |
| Trace bugs / "Why is X failing?" | .claude/skills/gitnexus/gitnexus-debugging/SKILL.md |
| Rename / extract / split / refactor | .claude/skills/gitnexus/gitnexus-refactoring/SKILL.md |
| Tools, resources, schema reference | .claude/skills/gitnexus/gitnexus-guide/SKILL.md |
| Index, status, clean, wiki CLI commands | .claude/skills/gitnexus/gitnexus-cli/SKILL.md |
<!-- gitnexus:end -->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.