# spek 0.1 install ↓

spek
one line, one meaning,
machine-checked.

spek is a token-minimal spec language for LLM-driven development. Sigils replace boilerplate, a constrained grammar kills ambiguity, and a coverage gate ties every scenario to a real test.

~70 tokens where prose specs burn ~300
spek 0.1
@auth.login
~ doing
! email+password auth
! when 5 bad tries in 10m -> lock 15m
? oauth google
- magic links
= session ttl 24h
> ok-login
g user exists, pw valid
w POST /login
t 200 + session cookie

@landing.language ~ doing

Twelve constructs. Nothing else exists — the parser rejects invented sigils, glued payloads, double arrows, and steps out of order. What checks green means one thing.

spekheaderspek 0.1
@feature@auth.login
~status~ todo | doing | done
!must! when 5 bad tries -> lock 15m
?may? oauth google
-won't- magic links
=invariant= session ttl 24h
>scenario> ok-login
ggiveng user exists
wwhenw POST /login
tthent 200 + session cookie
#comment# kept by fmt, hidden by show

@landing.demo ~ doing

The gate is executable. check validates grammar and lint; cov refuses to call a feature done while any scenario lacks a tagged test.

$ spek check specs/
ok: 9 feature(s), 1 file(s)
$ spek cov specs/ tests/
✓ engine.parse/minimal-feature tests/parser.test.mjs:7
✓ engine.cov/tag-boundary tests/hardening.test.mjs:77
… 42 more
45/45 covered, 0 dead tag(s) exit 0
$

@landing.workflow ~ doing

Five moves, two of them yours. The LLM drafts and implements; you edit fifteen terse lines and approve. The exit code does the rest.

1 · draftDescribe the feature. The LLM writes specs/area.spek — sigils, not prose.
2 · checkspek check rejects invented sigils, double arrows, broken step order. Drift dies before code exists.
3 · reviewYou read 15 lines, not 3 pages. Edit inline, commit — the spec diff is the product decision record.
4 · implementOne test per scenario, tagged spek: feature/scenario, red first. The g/w/t lines are the assertions.
5 · covspek cov exits 0 only when every scenario of a doing/done feature has its test. Done is a checked claim.

@landing.install ~ doing

One skill folder, zero dependencies. Plugin install or manual clone, then it works in any Claude Code session.

# as a plugin
/plugin marketplace add github:mikedotJS/spek
/plugin install spek@spek
# or, as a personal skill
git clone https://github.com/mikedotJS/spek
mv spek ~/.claude/skills/spek
# then, in any repo
/spek init
/spek new "users can log in, lock after 5 fails"
/spek implement auth.login