alexsmedile/skizl
v1.11.1MIT
Full lifecycle manager and optimizer for agentic skills — author, densify into micro-kernels, pack, unpack, pin, sym, diff, snapshot, bump, archive, fork, publish, and git-guard.
Changelog
All notable changes are documented here. Format: Keep a Changelog
[Unreleased]
[1.11.1] — 2026-09-01
Added
skill-densifyMicro-Kernel Enhancements:- Anti-Lecturing Heuristics &
docs/vsskills/Law: Added strict operational boundary separating human narrative/background documentation (docs/) from agent operational syntax matrices (skills/), eliminating textbook lecturing and definition preambles. - Expansion Handoff Contracts: Formalized companion skill delegation tables to prevent single-responsibility kernel bloat when handling peripheral operations.
- Direct Negative Constraints: Prioritized direct
"DO NOT"prohibitions and prompt-leak prevention rules. densify.pyAnalyzer Upgrades: Added automated detection for pedagogical lecturing and textbook fluff, validation of direct negative constraints and expansion handoffs, and updatedOPTIMALdensity classification score for structured & disclosed micro-kernels.- Graduated Size Bands: Calibrated
THIN,COMPACT,NORMAL,LARGE,REVIEW, andOPTIMALthresholds to evaluate structural density rather than arbitrary line counts.
- Anti-Lecturing Heuristics &
- Antigravity Multi-Surface Symlink Guidance: Documented explicit setup and commands for symlinking local plugin development repositories into both Antigravity 2.0 Desktop (
~/.gemini/config/plugins/<name>) andagyCLI (~/.gemini/antigravity-cli/plugins/<name>). - Antigravity Desktop Startup Discovery Notes: Clarified that Antigravity Desktop scans
~/.gemini/config/plugins/on launch and requires an application restart to discover newly installed or updated plugins.
Fixed
doctorUser-Scope Scan: Added Antigravity roots (~/.gemini/config/plugins,~/.gemini/antigravity-cli/plugins, and~/.gemini/antigravity/skills) to thedoctor --scope userdead-symlink inspection loop.densify.pyMetric Drift: Fixed threshold/display mismatch (70 vs 65) and excluded trigger frontmatter from compression penalties.
[1.11.0] — 2026-08-21
Added
skill-densifyskill: High-density 5-layer micro-kernel compressor that transforms verbose conversational skills into ≤65-line kernels with compact decision tables, mechanical script offloading, silent fast-lanes, and progressive disclosure boundaries. Includesdensify.pyautomated density analyzer and token budget auditor.scripts/skizl-ops.sh: Deterministic mechanical helper script providing single-turn CLI execution forsym-status,doctor,diffsum, andguard-check(saving up to 96% tokens on exploration turns).
Changed
- Micro-Kernel Refactoring across all bundle skills:
skill-manager: Compressed from 291 lines down to 56 lines (~80% reduction) using telegraphic micro-kernel routing and silent fast-lane execution format.skill-forge: Compressed from 195 lines down to 69 lines (~65% reduction) with tabular operation/track matrices.skill-draft: Compressed from 163 lines down to 48 lines (~70% reduction) into a compact single-pass decision engine.
- Antigravity Safeguards: Documented critical warning against executing
agy plugin installon a symlinked plugin target (destructive towards link target). Either symlink/clone directly or install, never both.
[1.10.1] — 2026-08-17
Added
sym declare/sym json— registers skills through Antigravity's declarative.agents/skills.json(and.agents/plugins.json) instead of symlinks. Full schema documented:entries,inherits,include_only,exclude, and the absolute / home-relative / repo-root path resolution rules. Use where git will not store symlinks, on Windows, or to commit the registration so teammates get skills on clone. Merges into an existing file rather than overwriting.publishdocuments Antigravity's plugin enable/disable model:"disabled": trueships a plugin switched off, while the user's choice is recorded inconfig.jsonunder apluginsmap keyed by directory name and always wins. Notes the trade-off —disabledis rejected by the closed Agent Plugins schema, so it belongs only in an Antigravity-specific manifest (verified:check.py --pluginerrors on it,agyaccepts it).
Changed
agents/andcommands/are now marked CLI-verified only. Both load underagy1.1.13, but neither appears in the Antigravity 2.0 plugin specification, which documents four components (skills, rules, hooks, MCP servers). Load-bearing behavior belongs inskills/, which both surfaces are specified to read.platforms.mdrecords that Antigravity's authoritative customization reference ships inside the app at~/.gemini/antigravity/builtin/skills/agy-customizations/and is more complete than the public docs site — the declarative-config schema appears only there. It also notes that Agent Plugins conformance is now confirmed on the Antigravity 2.0 desktop app (2.8.1), not just theagyCLI: installed at~/.gemini/config/plugins/, all three skills load and are listed asPlugin: skizl.
[1.10.0] — 2026-08-17
Added
- Agent Plugins 1.0.0 conformance. The root
plugin.jsonis now a conformant Agent Plugins manifest ($schema: https://agent-plugins.org/schemas/1.0.0/plugin.schema.json) — the open, vendor-neutral packaging standard governed by AWS, Cursor, Microsoft, OpenAI, and Vercel, with Google as Core Maintainer. This makes skizl installable on ChatGPT, Codex, Cursor, GitHub Copilot, Kiro, and VS Code from one manifest. git-guardnow checks the rootplugin.jsonfor version drift, bringing the count to seven version sites. The Agent Plugins schema makesversionoptional, so the file is only checked when it declares one.- Plugin-layer validation.
check.py --pluginvalidates an Agent Plugins root: manifest$schema, thenamepattern, the closed top-level field set,authorsub-keys,keywordstyping, and reverse-domainextensionsnamespacing. It then validatesmcp.json— explicit per-servertype, transport-required fields,$schemaversion agreement withplugin.json, and misuse ofPLUGIN_ROOT/PLUGIN_DATAincommand, URLs, or headers, where they never expand — and finally each discovered skill. Failure isolation follows the spec: a fatal manifest error rejects the plugin, but one broken skill or server never disables the others. doctorgained four manifest-conformance checks (non-conformant manifest, undiscoverable skill, untyped MCP server, dead plugin variable) and a section documenting the--pluginrun and what it deliberately does not cover.doctorgained a vendor component health pass for Antigravity: roothooks.jsonandmcp_config.jsonmust parse, and every hook script must exist and be executable. A hook script that is missing or non-executable fails silently at run time, so nothing else surfaces it. Bare command names are reported as warnings only, since PATH differs on the target machine.publishnow documents Antigravity's four auto-loaded root components —skills/,rules/*.md,hooks.json,mcp_config.json— with templates for each, and states plainly that none is interchangeable with the Claude, Codex, or Agent Plugins equivalent. They stay opt-in: empty scaffolds are noise.platforms.mdgained an Agent Plugins packaging section establishing the standard as the portable packaging target, plus guidance on carrying Antigravity as a namespacedextensionsentry rather than a competing root manifest.
Changed
- The root
plugin.jsonpreviously carried Antigravity's private schema. Since only one$schemavalue can occupy the field, the Agent Plugins schema takes it and Antigravity-specific data moves toextensions["com.google.antigravity"]— the standard's reverse-domain escape hatch for client-specific data. Verified withagy plugin validate(CLI 1.1.13): the conformant and the old Antigravity-style manifest validate identically ([ok], all skills processed), while a missing or unparseableplugin.jsonerrors. Antigravity ignores$schemaentirely, so conformance costs nothing there. publishnow scaffolds portable-first: the Agent Plugins manifest is the core, and.claude-plugin//.codex-plugin/are documented as vendor fallbacks for hosts that have not adopted the standard.publish.mdalso records the closed-schema field list, thenamepattern constraint, theextensionsnamespacing rule, and the boundary between the portable surface (skills/,mcp.json) and the vendor-only surface (agents/,commands/,hooks/).- Antigravity install guidance now distinguishes two products with separate state trees. The published plugin docs sit under the Antigravity 2.0 section, so their
~/.gemini/config/plugins/path describes the desktop app; theagyCLI installs to~/.gemini/antigravity-cli/plugins/, and the two keep independent skill directories. Both surfaces read the workspace path.agents/plugins/<name>/, now documented as the preferred install location. CLAUDE.mddocuments all three bundled skills (skill-manager,skill-forge,skill-draft) instead of describing skizl as a single-skill repository, states the authoring/lifecycle boundary between them, and adds askill-forgearchitecture section covering package layout, the operation-vs-track distinction,check.pyprofile guidance, and the six-brief regression protocol.
Fixed
- Incomplete Antigravity install instructions in
publish.md,doctor.md, andREADME.md. Each named a single global root when there are two — one per surface — so a user following them could install into the tree their Antigravity does not scan. All three now list the desktop root, the CLI root, and the workspace path both surfaces read. publish.mdclaimed Antigravity ignoresagents/. It does not:agy plugin validateconfirmsagents/andcommands/both load, andcommands/entries are converted to skills. Neither appears in the published documentation.publish.mdclaimed the rootplugin.jsoncarries no version and there was "nothing to bump". It does now, and git-guard checks it — corrected in the release checklist.platforms.mdreplaced the stalegeminirow (which citedgeminicli.comand a.gemini/skills/root) with the documented Antigravity discovery roots and the officialantigravity.googlereferences. Also corrected the frontmatter guidance: Antigravity documents onlynameanddescription, andnamedefaults to the folder name.
Notes
- Verified on the
agyCLI (1.1.13) only. The Antigravity 2.0 desktop app has a separate state tree and was not exercised — its plugin loading is documented but untested here. - Declarative
.agents/skills.json/plugins.json(withentries/inherits/include_only/exclude) is not implemented: the format does not appear in the published Antigravity skills, plugins, or CLI reference documentation. Revisit if a specification surfaces.
[1.9.0] — 2026-08-14
Added
- Skill Forge operations (
Create/Update/Resume) — a lifecycle dimension orthogonal to the existing weight tracks. The operation decides where a run starts; the track still decides how much evidence and process the work needs. A completed skill receiving a new request is an Update, not a Resume. - Forge record: compact continuation state (operation, contract, architecture decisions, track, completed gates, feedback deltas, review issue dispositions, evidence, next action) kept outside the distributable skill folder, so process state is never mistaken for runtime content. A new session resumes from the first incomplete gate instead of restarting or relitigating settled decisions.
- Architecture workshop: a pre-draft pass over boundary, capability clusters, runtime modes and branches, rules, routing, and only then package shape. Every proposed file must name the branch that reads it and the behavior it changes. Deliberately scale-aware — for a Light skill it stays one compact paragraph and is never expanded into a separate artifact.
- Two-phase review: the reviewer's single prompt splits into a Full-review prompt and an issue-scoped Verification prompt that checks disposition of a closed issue list without reopening general review.
- Issue severity and stable IDs —
blockingvsadvisory, with an explicit calibration rule tied to concrete consequence rather than section label. Two reviewer calls are the default maximum; a third requires a major structural rewrite and a recorded reason. extendmode on the audit track, for a completed skill receiving a new behavioral delta.- Sixth regression scenario covering the Resume operation:
evals/brief-resume.md,evals/prompts/resume.md, and fixtures (resume-forge-record.yaml,resume-repaired/), plus a held-out trigger case for resuming an unfinished review.
Changed
- The standard track reorders around the workshop: contract and architecture map are confirmed first, routing is validated before prose, and the package plan is committed as its own step (8 steps → 9). The empirical track's cross-reference follows to "steps 1–8".
- Reviewer checks expanded with failure recovery, safe resume and rerun idempotency, explicit approval boundaries before consequential actions, tool availability and declared fallbacks, portable path and environment assumptions, output-contract explicitness, evidence-backed completion claims, and proportional evaluation effort with a stopping condition.
passnow always pairs with right-sized — an underbuilt or overbuilt verdict requires a blocking issue naming the missing behavior or unjustified process weight. Blockers are never truncated; advisories cap at five.- Every regression brief now asserts the selected operation before the track, and the light and standard briefs test that workshop output stays proportional to the decision surface.
- Skill Forge bumped 1.1.0 → 1.4.0. Its description now covers create, update, resume, audit, debloat, repair, and activation-boundary tuning. (1.2.0 and 1.3.0 were development increments and were never released separately.)
Fixed
.gitignorenow excludes local secrets (.env*, with*.examplere-included), Python build artifacts, Skill Forge continuation state (/.skill-forge/), and local feedback, planning, and article drafts that were never part of the plugin.
[1.8.0] — 2026-08-13
Added
- Skill Forge host profiles for the portable Agent Skills specification plus Claude Code, Codex, Cursor, Gemini CLI, and skizl conventions, with official documentation links and explicit portability rules.
- Executable Skill Forge regression fixtures, isolated prompt briefs, a held-out trigger suite, and profile-aware validation for portable and host-specific packages.
Changed
- Skill Forge now recovers demonstrated workflows before interviewing, preserves descriptions for manual-only skills, chooses instruction rigidity by task fragility, applies least-surprise security rules, and evaluates empirical skills against isolated baselines.
- The fresh-context reviewer now checks host compatibility, invocation behavior, permissions, script dependencies, and evidence quality in addition to sizing and progressive disclosure.
- Expanded Skill Forge guidance, templates, and evals from four illustrative briefs to a repeatable five-scenario regression protocol covering light, standard, empirical, repair, and hardening workflows.
Fixed
- Replaced shell-looking
skizllifecycle examples with an explicit handoff to the installedskill-managerskill;skizlis a plugin/meta-skill namespace, not a CLI binary. - Corrected host-specific invocation guidance so portable skills stay portable and vendor-only fields are emitted only for their target host.
[1.7.0] — 2026-07-12
Added
releasecommand (ship): an atomic, verified, and resumable plugin release workflow supporting scope checks, auth preflights, test suites, and distribution verification.
Changed
- Upgraded
git-guardpre-commit hook to support parsingmetadata.versionin skill frontmatter with fallback to top-levelversion:, and validation of arbitrary CLI version constants (e.g.SPECTACULAR_VERSIONincli/spectacular).
[1.6.1] — 2026-07-08
Added
skill-forgeskill — a standalone skill-that-writes-skills: a lean router (SKILL.md) over four weight tracks (light / standard / empirical / audit), a fresh-context reviewer gate, a co-locatedGLOSSARY.md, minimal templates, and a mechanicalcheck.pylint. Self-contained: the empirical track runs its own with-skill-vs-baseline eval loop rather than depending on another skill.skill-draftskill — the fast lane: sketch a small skill in one pass (singleSKILL.md, no tracks/reviewer/evals), meant to pair withskill-forgefor the heavy build.
Changed
- Renamed the packaged skill
skizl→skill-manager: folderskills/skizl/→skills/skill-manager/and frontmattername:updated. Invocation is unchanged — the plugin namespace staysskizl, so/skizl <command>and allskizl <verb>commands work as before. - Leaner, non-overlapping descriptions across the three skills to stop them colliding on triggering:
skill-draft= quick single-file draft,skill-forge= full tracked build with reviewer + evals (each names the other as the off-ramp),skill-manager= post-authoring lifecycle only (no "create" verb; dropped the redundant trigger list).skill-managerbumped to 1.6.0. skill-forgelearns the draft→forge handoff: its audit track now forks into repair mode (trim/fix an aged or bloated skill) and harden mode (build up a validated fast draft, e.g. askill-draftoutput plus human feedback). In harden mode, thinness is the starting point, not a defect — no ceremony is added unless a branch, a failing test, or the feedback demands it. Added thebrief-audit-harden.mdregression brief.
Removed
- Archived
skill-creator,writing-great-skills, andprogressive-skill-builderinto the repo-root_archive/— their doctrine (vocabulary, eval loop, scaffold weighting) is now folded intoskill-forge, which no longer references them.
[1.6.0] — 2026-07-07
Added
- Google Antigravity plugin support:
publishnow scaffolds a rootplugin.jsonmanifest (conforming to the Antigravity plugin spec, including the required$schemafield and description) alongside the Claude and Codex manifests, documents Antigravity's component discovery (skills/,rules/, roothooks.json, rootmcp_config.json), and reports install paths — workspace.agents/plugins//_agents/plugins/and global~/.gemini/antigravity-cli/plugins/. Docs are explicit that Antigravity has no marketplace/install CLI for third-party plugins — install is always manual (clone or symlink into a scan directory). - README: Antigravity install section; skizl repo itself now ships a root
plugin.jsonso it installs as an Antigravity plugin directly.
Changed
.gitignore: excludedskills/skill-creator/,skills/progressive-skill-builder/,skills/writing-great-skills/— local-only skills not part of the skizl plugin.
[1.5.4] — 2026-06-20
Added
- Description-field safeguards for Codex's 1024-character skill description limit:
packnow generates and reports bounded frontmatterdescriptionvalues,publishblocks over-limit descriptions and can produce missing ones, anddoctorchecks installed/source skills for missing, near-limit, or over-limit descriptions. The check applies todescriptionalone, notdescriptionpluswhen_to_use.
Changed
- Shortened the active skizl skill description so it stays comfortably under the Codex limit.
pin.mjsnow normalizes generated shortcut descriptions and caps them before writing redirect skills.
[1.5.3] — 2026-05-16
Changed
- Install docs: clarified the two Codex install paths —
npx codex-marketplace add … --plugin(external helper, adds marketplace and activates) vs. the nativecodex plugin marketplace addCLI (registers the marketplace only; activate afterward from the in-app/pluginsbrowser). - Corrected
publish.md:codex plugin marketplace addis a valid command (previous docs said otherwise); there is still nocodex plugin installsubcommand. - Restructured README install section with per-target headings and a "test locally" block.
[1.5.2] — 2026-05-10
Fixed
git-guardhook: git tag is now allowed to lag behind manifest versions (commit first, tag after is normal workflow). Hook only blocks if a tag is somehow ahead of manifests — a genuinely broken state. Tag uses a newTYPESparallel array;collectaccepts optional third arg"tag"to opt into this relaxed check.- Removed the
--no-verifybootstrap workaround from the install report — no longer needed.
[1.5.1] — 2026-05-10
Fixed
git-guard install: gather all inputs (existing hook check + SKILL.md question) upfront before writing any files, so the install flow runs without mid-process interruptionsgit-guard installStep 4 report: added ⚠ git tag bootstrap note — on the very first commit after install,--no-verifyis required once (the tag cannot exist before its commit); suggested commands included
[1.5.0] — 2026-05-10
Added
git-guardcommand (version-guard,hook,drift): installs apre-commithook viacore.hooksPaththat collects versions from all 6 locations (manifests, README badge, CHANGELOG, git tag, optional SKILL.md), takes the highest as truth, prints a ✓/✗ table, and blocks the commit if anything divergesreferences/git-guard.md: full spec forinstall,remove, andchecksub-commands, including the complete hook script and.git-guard.jsonconfigpublishStep 5 now auto-runsgit-guard installwhen no hook exists, so every published repo gets the guard automatically
Fixed
- Hook script: empty
VERSIONSarray +set -ucould crash on bash < 4.4 — replaced${VERSIONS[@]:-}with safe${VERSIONS[@]+"${VERSIONS[@]}"}expansion - Hook script: all file paths now anchored to
$(git rev-parse --show-toplevel)so the hook works correctly when invoked outside the repo root - Hook script:
sort -Von macOS BSD sort misorders semver across major digit boundaries (e.g.1.9 < 1.10) — addedgsort -Vdetection with a pure-bash semver fallback - Hook script: zero version sources found now prints an explicit notice and exits 0 instead of silently claiming "all consistent"
[1.4.0] — 2026-05-10
Added
snapshotcommand: saveSKILL.mdasversions/SKILL@<version>.md; auto-triggered onpublish(ifversion:present) and ondiffwhen local is ahead of global installedbumpcommand: incrementversion:frontmatter (patch/minor/major or explicit), with optional snapshot after bumphistorycommand: list snapshots inversions/sorted by semver descending;--show <ver>to read,--diff <ver>to diff current vs snapshotarchivecommand: tar the entire skill folder as a timestamped tarball (_backups/<name>@YYYYMMDD-HHMM[--tag].tar.gz); always manual, suggested by diff on large-scale changesreferences/snapshot.md: full spec for snapshot, bump, and history sub-commandsreferences/archive.md: full spec for archive including intent-detection table and large-diff heuristic
Changed
diffnow offers to snapshot when local version is ahead of global installedpublishreference updated:source.pathcorrected to"./"(relative to repo root), hybrid layout removed, Codex install commands corrected tonpx codex-marketplace add ... --plugin
[1.3.0] — 2026-05-07
Added
.codex-plugin/plugin.jsonenriched with optionalinterfaceblock (displayName, shortDescription, longDescription, developerName, category, capabilities, websiteURL, defaultPrompt, brandColor) for Codex browser UIpublishreference andcreate-pluginskill updated to document theinterfaceblock as optional, with warning against addingprivacyPolicyURL/termsOfServiceURLunless those files exist
Changed
publishreference updated with verified Claude Code and Codex install methods from official docs- Claude Code install key format clarified as
{plugin-name}@{marketplace-key}—{marketplace-key}is the top-level"name"in.claude-plugin/marketplace.json,{plugin-name}isplugins[0].name; they are often the same but can differ (e.g.codex@openai-codex) - README install command corrected from
skizl@alexsmedile-skizltoskizl@skizl - Quick Start examples replaced with generic
writingcontainer (removed project-specificcscontainer) - Icon replaced with v2 squircle design matching Blip-style app icon aesthetic
Fixed
.codex-plugin/plugin.jsonmissing requiredversion,description, andskillsfields.agents/plugins/marketplace.jsonsource.pathcorrected from"./"to"../../"(resolves relative to.agents/plugins/)
[1.2.0] — 2026-05-07
Fixed
- Removed hardcoded GitHub username from examples in
SKILL.md,references/publish.md, andreferences/fork.md— replaced with generic<username>placeholder - Removed personal file paths from
references/list.mdoutput example — replaced with/path/to/... publishcommand now resolves GitHub identity viagh api user(login for URL fields, full name forauthor.name) withgit config user.nameas fallbackauthor.name/owner.namein all plugin manifests corrected to full display name
[1.1.0] — 2026-05-07
Added
symcommand with sub-commandsinit/in,migrate/out,status— symlinksskills/into.claude/skills/and.agents/skills/using portable relative symlinkslistcommand — shows installed skills across global, project, and source locations with symlink state (linked / broken / direct / source)diffcommand — compares two versions of a skill'sSKILL.md, with version field extraction from frontmatterdoctorcommand — diagnoses broken symlinks, missingSKILL.md, direct directories, orphaned agent links, and unlinked source skillsforkcommand — clones a skill from a local path or GitHub URL intoskills/<name>/and symlinks it; strips git history on clonepublishcommand — scaffolds.claude-plugin/,.codex-plugin/, and.agents/plugins/manifests fromSKILL.mdfrontmatter; generatesREADME.mdif missingIDEAS.md— name brainstorm and action backlog
Changed
- Skill renamed from
skilztoskizl references/architecture replacesactions/+knowledge/layoutlistpromoted from alias ofstatusto standalone commandstatusalias list updated (removedlist, keptinfo)- Command order in
SKILL.mdreordered:symfirst,statusandonboardlast
[1.0.0] — 2026-05-07
Added
- Initial release:
pack,unpack,pin,unpin,status,onboardcommands scripts/pin.mjsfor pin/unpin automation- Plugin manifests for Claude Code and Codex