Verdict: Skillscript is a declarative, non‑Turing‑complete language for authoring persistent agent workflows. If you’ve built an AI agent that repeatedly does the same thing (review PRs, generate daily briefings, run reports) and you’re tired of paying tier‑1 inference costs for every single run, Skillscript is worth a serious look. If you only do one‑shot exploratory queries, stick with what you have. The project is at v0.30, single‑maintainer, with 19 GitHub stars – early days, but the design is coherent enough that I’d bet on it growing.
The problem that made me search
Every agent I’ve built eventually became a leaky abstraction. I’d give it a task – “check open PRs and summarise what’s critical” – and it would re‑derive the same procedure from prose reasoning each time. That’s expensive, slow, and prone to drift. Session A produces a sharp summary; session B, after a model update, produces a fluff piece.
Current fixes don’t fix it:
- Markdown skills (Anthropic/OpenAI) are human‑authored and loaded into context every time – noisy and costly.
- Python scripts are unsafe for agent‑authored code – subprocess, arbitrary imports, silent failures.
- Loop‑based agents (Ralph Loops, /goal commands) re‑derive the approach on every cycle; no persistent artifact.
I wanted something an agent could write once, I could audit once, and the runtime could fire cheaply thereafter. That’s the niche Skillscript claims.
Hands‑on: from npm to a real skill
Install is a single line:
npm install -g skillscript-runtime && skillfile init && skillfile dashboard
No additional runtime or Docker. skillfile init creates a project directory with a minimal example. The hello‑world skill is strikingly clean:
# Skill: hello
# Status: Approved
# Description: The canonical first-run example.
# Vars: WHO=world
Hello, ${WHO}!
Welcome to Skillscript.
The body text is the output. No boilerplate. skillfile dashboard spins up a local web dashboard where you can run skills and see results. Five minutes from npm install to running a skill.
I then wrote a real one. My team has a morning ritual: check gh pr list, summarise deploys, flag urgent items. A skill for that:
# Skill: morning-briefing
# Description: Check open PRs and recent deploys, then summarise.
# Cron: 0 8 * * 1-5
# Vars: TEAM=engineering
# Tools: shell, openai
step: Fetch PRs
action: shell
cmd: gh pr list --json number,title,author,headRefName,baseRefName | wc -l
step: Fetch deploys
action: shell
cmd: gh run list --branch main --limit 5 --json conclusion,displayTitle,createdAt
step: Generate briefing
action: openai
model: gpt-4o-mini
system: "You are a technical briefing writer. Summarise the following data."
input: |
Open PR count: $(Prev.PRs)
Recent deploys: $(Prev.deploys)
The runtime parses the # Tools: line, checks the connector registry, and validates the DAG before admitting the skill. I used shell (allowlisted commands, no subprocess) and openai for the cheap GPT‑4o‑mini model. Running it costs me a few cents instead of the $0.30+ a full agent loop would burn.
What surprised me most: the skill runs on a cron schedule without any agent involvement. The # Cron: 0 8 * * 1-5 line just works. I now get a Slack notification (via a connector I’ll cover below) every weekday morning with a one‑paragraph summary – never re‑derived, never recalculated.
Why the design makes sense
The authors (Scott, with AI assistance) made three deliberate constraints that together form a coherent safety story:
- Not Turing‑complete. No unbounded loops, no
eval, nosubprocess. Computation lives inside connectors (Python, shell, model), coordination lives in the skill. An agent can’t write a fork bomb. - Declarative DAG grammar. A skill is a directed acyclic graph of typed operations. The runtime can statically validate the whole graph before running it – no runtime surprises.
- Connector‑mediated capability. Skills don’t import packages. They invoke connectors – gated artifacts with a curated surface. Python doesn’t disappear; it moves to the connector edge, where a human curates the allowed functions.
The result: a skill can be authored by an agent via MCP, but a human can quickly audit it before signing. In secured mode, only operator‑signed skills perform effectful operations (Ed25519 signatures). This is not vapourware – the tooling is there, though the key management UX needs a better story.
What surprised me (in a good way)
The Ed25519 signing model. I expected some Docker‑like sandbox or runtime filtering. Instead, the runtime trusts skills that carry an operator’s signature. I can set up a pipeline where an agent drafts a skill, I review the DAG, then sign it with my key. From that point, the skill runs automatically – no more gatekeeping every execution. This is a smart trade‑off between safety and autonomy.
The asymmetric cost story. Routine work (the shell calls, the cheap model) runs locally or on minimal infrastructure. The expensive frontier model is only invoked for the steps that genuinely need frontier judgment – in my case, the summarisation step. Most skills I’ve seen so far reserve openai or claude for one or two nodes; the rest are cheap connectors. This is where the savings live.
Agents author, humans approve. The MCP server lets an agent write a skill to disk and ask for approval. The agent doesn’t run the skill itself – it just defines it. After signing, the runtime runs it forever. This flips the script: instead of the agent being the executor, the agent becomes the author.
The honest weaknesses
Is it production‑ready? Not yet.
- 19 GitHub stars, zero issues, zero PRs. That’s not a community; it’s a project. I’m the fifth person to write a skill on my machine, probably.
- Single maintainer. Scott (sshwarts) is clearly sharp, but one person can’t sustain the connector ecosystem that real adoption needs. The
shellandopenaiconnectors work, but I couldn’t find a Slack connector or a PostgreSQL connector – I’d have to write one. - v0.30. The tooling is rough around the edges. The dashboard is usable but ugly. Error messages on validation failures are sometimes cryptic.
- Local model integration. I tried pointing it at an Ollama instance – it works, but the documentation assumes OpenAI‑compatible APIs. The connector contract is clear, but the example code for custom connectors is thin.
- Complex branching. My morning briefing is a straight‑line DAG. If I wanted conditional logic (e.g., skip deploys if no PRs), I’d need to use the branching syntax, which is documented but hasn’t been battle‑tested. I haven’t stress‑tested it.
Who this is for (and who it isn’t)
You should try Skillscript if: You run routine agent workflows where the same procedure runs daily – briefings, report generators, maintenance tasks. You care about cost and auditability. You’re willing to accept early‑stage tooling for a design that meaningfully reduces waste.
You should skip Skillscript if: Your agent primarily does one‑shot research or exploratory analysis. If each task is unique, the overhead of writing and signing a skill doesn’t pay off. You also might wait if you need a mature connector ecosystem or multi‑team deployment support.
I’m keeping it in my stack for the morning briefing. It saved me $8 in model calls last week – and more importantly, it stopped the weekly anxiety of “will the agent do the same thing this time?” That alone made the npm install worth it.
[Sources: README, GitHub commits, docs, Skillscript.ai]