This document describes the stable design constraints behind aweskill.
It is not a user quickstart and not a contributor workflow guide. Use:
README.mdfor installation and command usagedocs/CONTRIBUTING.mdfor development workflow, testing, and PR expectations
aweskill is intentionally centered on a small set of responsibilities:
- keep one canonical skill store
- define reusable bundles
- project skills into multiple agent runtimes
- provide boring, safe maintenance operations around that workflow
New features should make that workflow clearer, safer, or easier to use. They should not turn the tool into a general package manager, remote registry, or configuration platform unless there is a strong reason.
aweskill uses a five-part command model:
bundleagentstoredoctor- direct top-level convenience commands only where they reduce friction without creating overlap
Current top-level convenience commands:
aweskill findaweskill installaweskill updateaweskill self-update
Store-only commands stay under store, including:
store initstore wherestore importstore scanstore backupstore restorestore liststore remove
self-update is the only top-level maintenance command outside the core bundle / agent / store / doctor areas. It exists to update the aweskill CLI itself, not the managed skill store.
New concepts should be rare. Prefer making existing areas clearer before adding more CLI surface.
aweskill keeps its projection model deliberately simple:
- Skill content has one canonical home:
~/.aweskill/skills/<skill-name>/ agent addprojects selected skills into agent-specific directories- On Unix-like systems, that projection is normally a symlink
- On Windows, that projection prefers a directory junction and may fall back to a managed copy
agent removeonly deletes projections thataweskillcan identify as managedagent listis the primary read-only inspection commanddoctor syncis the primary repair command and defaults to dry run
There is no separate global activation registry. The projected filesystem state is the activation model.
aweskill treats projected filesystem state as the truth. This avoids a second layer of activation metadata drifting out of sync with what users can see on disk.
agent add bundle <name> expands the bundle into skill names and projects those skills. There is no separate long-lived bundle activation object after projection.
Mutating agent commands should default to the detected installed agent set for the chosen scope. If no installed agents are detected, they should fail with an actionable message instead of silently creating directories for every supported agent. Users who want a broad rollout should opt into it explicitly with --agent all.
aweskill removes only entries it can identify as its own managed projections. It does not blindly delete arbitrary directories in user-owned skill roots.
store scan --importdefaults to relinking scanned paths unless--keep-sourceis passedstore scan --importandstore import --scanaccept the same--global|--project [dir]and--agent <agent>filters used by agent-side commandsstore import <path>defaults to keeping the source path in place--link-sourcereplaces the source path with an aweskill-managed projection after importing--keep-sourceleaves the source path in place after importing--keep-sourceand--link-sourceare mutually exclusive and should error when both are passed- when a source path is a symlink,
aweskillcopies from the resolved real path and may emit a warning - broken symlinks during batch import are reported while other items continue
restorecreates a fresh backup of the current store before applying the archiverestoreaccepts either a backup archive or an unpacked directory containingskills/restoreskips existing skills and bundles by default and only overwrites with--overridebackupandrestoreinclude bothskills/andbundles/by default; use--skills-onlyfor a reduced flow- new backup archives should include a lightweight root manifest with format and version metadata
restoreshould accept older backup archives and unpacked backup directories that do not include that manifest
find searches across three skill providers:
skills.sh— community skill directory with downloadable GitHub sourcessciskill— scientific and technical skill registry withsciskill:<skill-id>identifierslocal— the local central store at~/.aweskill/skills/*/SKILL.md
Results are merged by normalized name. When a provider returns a discover-only source, the result still appears but is marked as unsupported for direct install. Local results do not print install commands; they point back to the managed skill path and store show.
show <skill> is the primary inspection command for one managed local skill. It can print a summary, the raw SKILL.md, or just the resolved path.
install <source> accepts local paths, GitHub sources, and sciskill:<skill-id> identifiers. Installed skills are recorded in the lock file for future store update runs.
update [skill...] checks or refreshes tracked skills from their recorded source.
--domainand--stageare sciskill-only filters- invalid sciskill enum values should fail fast before the network request
skills-shshould reject--domainand--stageinstead of silently ignoring them
- when
--provideris specified,--limitapplies to that provider's visible result count - when
--provideris omitted,--limitapplies per provider before merge and dedupe
The canonical store should only contain:
- skill directories or managed links under
~/.aweskill/skills/, each with aSKILL.md - bundle YAML files under
~/.aweskill/bundles/
Examples of suspicious entries:
- files such as
._globalinsideskills/orbundles/ - skill directories missing
SKILL.md - non-YAML files in
bundles/ - malformed bundle YAML files
If hygiene rules change, update all consumers together. Backup, restore, and list flows should not silently drift away from doctor clean.
When reading agent skill directories, contributors should use the same notion of validity across all consumers:
- entries missing
SKILL.mdare suspicious - reserved or hidden skill names such as
.systemare suspicious - suspicious entries should not be imported, relinked, or counted as new skills
- suspicious agent entries may be removed only when the user passes both
--applyand--remove-suspiciousthroughdoctor sync - warning text should explain why the entry was skipped
This rule should stay consistent across agent list, doctor sync, and any future agent-side maintenance flow.
store listshows totals and a short preview unless--verbosestore scanshows per-agent totals by default and concrete entries with--verbosestore scandefaults toglobalscope unless--projectis selected explicitlyagent listcategorizes entries aslinked,broken,duplicate,matched,new, andsuspiciousstore listandbundle listsummarize suspicious store entries and suggestdoctor cleanagent listis the read-only dry-run view ofdoctor syncagent listshould stay read-only and point users todoctor sync,doctor sync --apply, anddoctor sync --apply --remove-suspiciouswhen relevantdoctor sync --applyshould relink duplicate and matched entries, repair broken symlinks when the central store has a same-name skill, remove broken projections otherwise, and report suspicious entries unless--apply --remove-suspiciousis setagent listshould reportnewentries and suggestaweskill store scan --importwith matching scope and agent filtersbackupandrestorereport suspicious entries they skipped
- runtime bundles live under
~/.aweskill/bundles/ - in-repo template bundles live under
resources/bundle_templates/ resources/skill_archives/is reserved for repository-level backup archives you intentionally keep in-tree for sharing or reference- built-in meta-skills live under
resources/skills/
aweskill ships two meta-skills that teach AI agents how to operate the CLI:
resources/skills/aweskill/— core operationsresources/skills/aweskill-doctor/— diagnostics and repair
Each skill follows this structure:
resources/skills/<name>/
├── SKILL.md
├── agents/
│ └── openai.yaml
└── references/
└── *.md
Design principles:
- facts live in one place
- rules go in
SKILL.md - examples go in
references/ - no wrapper scripts; the aweskill CLI is the interface
When changing CLI behavior, update the corresponding skill files in the same PR.
These principles matter more than adding surface area quickly:
Skills should have a canonical home in ~/.aweskill/skills/.
aweskill should clearly distinguish between files it manages and files it does not.
The user should be able to predict what add, remove, sync, recover, and dedup will do without reading implementation code.
This tool operates on local directories that users care about. Be conservative about deleting files, replacing unmanaged directories, or introducing hidden state.