Minimal skill examples for every supported language. Each directory is a self-contained, buildable skill.
| Directory | Language | Network | Published as | Description |
|---|---|---|---|---|
rust-hello-skill |
Rust | No | — | Minimal sandboxed greeting — best starting point |
go-hello-skill |
TinyGo | No | — | Same skill, TinyGo version |
prompt-optimizer-skill |
Rust | No | nullapt/prompt-optimizer |
Heuristic prompt compression — saves LLM tokens, no LLM call |
web-search-skill |
Rust | api.duckduckgo.com |
nullapt/web-search |
DuckDuckGo search — demonstrates network permissions |
- nullapt CLI installed
- Rust +
wasm32-wasip1target:rustup target add wasm32-wasip1(formerlywasm32-wasi— renamed in Rust 1.78. Older docs may use the old name.) - TinyGo (for Go examples): tinygo.org/getting-started
# Pick an example
cd prompt-optimizer-skill
# Build the WASM
cargo build --target wasm32-wasip1 --release
cp target/wasm32-wasip1/release/prompt_optimizer.wasm skill.wasm
# Generate a key pair (first time only — keys go to ~/.nullapt/keys/)
nullapt keygen
# Sign the manifest
nullapt sign ./SKILL.json
# Install locally to test
nullapt get ./SKILL.jsonIf you've forked an example and want to publish it under your own name:
- Edit
SKILL.json— changenamefromnullapt/<thing>to<your-username>/<thing>(or just<thing>for personal namespace), updateauthor,description, etc. nullapt sign ./SKILL.json— re-sign with your own keynullapt loginif you haven't alreadynullapt publish ./SKILL.json
For org namespaces (e.g. acme/foo), see nullapt/nullapt CONTRIBUTING.md for the GitHub org membership flow.
Submit a PR to add an example in a new language (AssemblyScript, C, Zig, etc.). See CONTRIBUTING.md.