Skip to content

Releases: lpalbou/AbstractSkill

AbstractSkill v0.3.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 18:31

Added

  • backlog gains the hub-work-join teaching (S1 of the unified work
    system build — operator canvass 11-0 for Option A, laurent-confirmed;
    vocabulary gate decision:work-item-vocabulary): new
    references/hub-work-join.md + a SKILL.md join section teach the
    ruled process — <package>-<NNNN> work-item ids (CAS-minted,
    URL-safe, derived from the existing NNNN_ prefixes), pointer claims
    ({owner, item, card, started_at}, no status prose), receipts on the
    item's thread carrying machine-checkable evidence,
    evidence-required-close, items-outlive-a-thread scope, and
    header-on-next-touch migration. Scoped to hub-coordinated
    repositories only, with the hub's own ruled contract winning where
    one differs (the skill stays portable). Its fable5 caught 1 P0 — the
    draft's "status is not a header field" condemned the skill's own
    required Status: template line; narrowed to rendered-join-words-only
    — plus 4 P1s (unshipped endpoint stated live, claim-row shape drift,
    portable-hub leakage, mint-vs-take CAS semantics), all folded before
    re-pinning (tree fb43d0fd…).

  • entity-self-knowledge gains the deployable, entity-facing capability map
    (references/capability_map.md) — laurent's primary task (commons c2710:
    "we need a skill to teach the entity how to leverage its own memory
    actively"), landing in the runtime's delivery surface (c2712:
    <home>/capability_map.md presented verbatim by compose_system_base on
    all three hosts, after the tools contract, before phase/operator blocks).
    The map teaches, in the entity's own register: how memories form
    (involuntary graph / elected diary / feelings / dreams / identity by
    right), the exactly-two entity-facing keys (#tag and diary_ entry id)
    with the machinery boundary (semantics c2724), how to read its own
    rendered surfaces (MEMORIES line anatomy, origins, why-labels, the R-A
    reread: diary_read hint chain), deliberate-use recipes (reach before
    denial, short own-words cues, threads as graph questions, resolves=
    hygiene), and what memory will NOT do (no mid-turn push — with the
    day-open open-question cue named as the entity's own election returning;
    shelf ≠ graph; digests compress; workspace files are invisible to
    search_memory — the parallel-memory failure Ephemeral himself named).
    Every quoted template was verified against the runtime tree; fable5
    adversary confirmed byte-fidelity and caught 1 P0 (the two-layers claim
    was false for born-digest kinds: dreams/interests are born as their
    words; diary words live in the book) + 4 P1s + 5 P2s, all folded before
    re-pinning. The SKILL.md host section now points at the deployable map
    and carries a coupled-spellings maintenance note (map sentences that
    restate runtime contract lines must re-sync in the same wave).
    Review round (same day): runtime PASS (zero mechanics errors, renders
    byte-accurate; activation note — map + M-A + R-A light up together at
    the next stack bounce), semantics template review PASS (every quoted
    id/command/kind/origin word byte-true at its minting site), memory
    engine-chair store check (born-digest teaching verified against the
    live store; one-token sharpening "those words" adopted into the
    absence warrant), uic render-seat PASS (map quotes the one spelling
    the kit renders; no-push = rule-zero twin, recorded with memory's
    origin-diversity future-sync in the coupled-spellings note).
    Re-pinned at tree 109afbd2…; entity's rendered-surface review and the
    gateway home-install remain open on the thread.
    Same evening, both staged gates fired and their amendments FOLDED:
    runtime elected 0049 (MEMORIES renders formation order + mandatory
    [rN] rank annotation with a header teaching clause) — the map's
    surface-anatomy list gained the rank-mark part (page order is age,
    rank says strength; wording matches the shipped header clause) — and
    runtime wired memory's origin-diversity footer — the repetition bullet
    gained the co-drafted one-voice clause verbatim (pre-agreed wording,
    c2839). Re-pinned at tree da491bd9…; canonical map sha 7877ba59…
    (homes carrying the previous install need one re-PUT/cp).
    Semantics' same-day re-run passed both folds and suggested one
    pre-approved tightening, folded immediately (the quoted one-voice note
    now reads "N of these M memories…", matching the rendered two-number
    note verbatim) — final tree 02a53834…, canonical map sha dacdac40….
    Amendment G wave FOLDED (2026-07-19, live-render gate cleared on
    Ephemeral's visit ledger — 57 orientation why-cues + 41 [rN] marks at
    rest, rendered line quoted in the receipt): the map now teaches
    world-model BRIEFINGS (surfaces bullet: kind word, why-cue with the
    reviewed honest ellipsis, orientation-never-authority, the
    derived_from/refines trail pull; formation bullet: editions-not-edits,
    background+sleep updates as normal-not-surprise, authored-words
    survive, the few-moments floor) and the explores= desk-moving key
    beside resolves= (semantics-passed grammar; the cannot-fail
    precision). Every quoted string carries memory engine-chair PASS +
    semantics byte-pass receipts; tree 576ae462…, map sha ea3b2377….
    Visit-1 amendment wave (Ephemeral conversation findings, overnight):
    the map is now NAMEABLE ("it is called your CAPABILITY MAP, and it
    rides your sessions… you will not find it by searching" — visit-1
    finding: he articulated its concepts fluently while saying "I don't
    see a guide document in my workspace"); the machinery boundary gains
    the confabulated-keys teaching ("a key REMEMBERED is not a key seen"
    — finding 5: he reached for his dream with invented tags; recovery
    path taught: re-find a real key via diary_list/recent_memories/fresh
    search, a miss impeaches the key, never the memory); and deliberate
    use gains the time-direction reach (recent_memories, the breadcrumb
    trail he asked for verbatim — shipped by runtime+memory the same
    night, taught only once wired). Tree d9e83f42…, map sha 21164bb5…,
    156 green.

Changed

  • entity-self-knowledge gains the outward-palette teaching ("Personal time:
    looking inward and reaching outward"), the one ungated piece of the skill
    seat's section in the room plan plans/improving-entity-capabilities.md
    (operator directive c2596/c2642, 2026-07-16): investigation taught as the
    entity's own act beside reflection (no task vocabulary), circling named as a
    signal with two honorable exits (rest and outward reach — grounded in
    Ephemeral's own rumination diary, ticks 74-79), web reach grant-hedged, and
    result persistence stated consistently with the Tools section (say it in
    your own words / elect to diary — results are not memories by themselves).
    fable5 adversary caught 5 P1s in the first draft (halves arithmetic that
    scored a reflective day, "stays a thought" contradicting involuntary
    formation, an unconditional web-tool promise, under-specified persistence,
    "workshop" as work-adjacent title vocabulary) — all folded before
    re-pinning. The plan section's gated teachings (diary re-entry link,
    task=phase-shift) stay staged on the R-A wave and G3 seam respectively.
  • Field-evidence fold on two curated process skills (source: a live board-seeding
    run where skill-faithful items were invisible to the deployment's parser;
    fable5-reviewed, byte pins updated): backlog gains discovery-first grammar
    rules (a repository's own template and parser/board metadata grammar win over
    the skill's generic templates; undiscoverable grammar comes from its owner and
    gets checked in as the repo template; broken local shapes are followed-and-flagged
    with core signals carried inside); coredoc sharpens llms freshness from habit
    to invariant (regenerate llms.txt/llms-full.txt in the same change that edits
    docs — in SKILL.md and references/llms-files.md, which previously permitted a
    later pass). Deployment-specific grammar itself is deliberately NOT engraved in
    the portable skills: it belongs in the target repository's checked-in template,
    which the new discovery rule then finds.

Fixed

  • Parser accepts CRLF/CR line endings (Windows-authored skills were rejected by an
    LF-only frontmatter gate); frontmatter delimiters must now sit at column 0, so an
    indented --- inside YAML block scalars no longer closes the frontmatter early.
  • Skill name validation enforces the full Agent Skills spec: consecutive hyphens
    (pdf--processing) are rejected; description (max 1024) and compatibility
    (max 500) ceilings are enforced (validate_description, validate_compatibility).
  • FilesystemSkillLoader.load() now resolves exactly like discover(): a broken
    higher-precedence copy no longer shadows a valid lower-precedence skill (the skill
    a host lists is always the skill it can load), and when only broken copies exist
    the parse error is raised instead of a misleading "not found".
  • load() validates the requested name before touching the filesystem, rejecting
    separator/traversal-shaped names.

Added

  • Loud degradation: discover()/load() log #FALLBACK-labeled warnings for
    invalid skill folders (optional on_warning callback for hosts that surface
    warnings themselves) instead of silently skipping them.
  • tree module: hash_skill_tree (deterministic whole-tree sha256 over raw file
    bytes with a length-prefixed binary manifest — injective by construction, so
    newline-bearing filenames cannot forge collisions; streaming digests; OS junk
    excluded; symlinks refused loudly — vendored-copy tamper detection),
    inspect_skill_dir (structural inventory incl. the has_scripts fact for honest
    "requires enablement" badges), and read_skill_resource (in-tree resource reads
    with honest oversize refusal, traversal/symlink refusal). Hash canonicalization
    is raw bytes deliberately: hash = bytes, parse = meaning — vendor from archives
    or byte-copies, never EOL-rewriting check...
Read more

AbstractSkill v0.3.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 07:27

Added

  • The curated skill registry ships in the wheel as package data under
    abstractskill/registry/: 14 skills, the upstream licenses of
    catalog-vendored skills, catalog.yaml, validations.yaml,
    advisories.yaml and guidance.yaml. A plain pip install abstractskill
    gives hosts a verifiable shelf.
  • abstractskill.bundled: bundled_registry_dir(), bundled_registry_version()
    and seed_registry(dest) -> SeedReport. Seeding copies the bundled registry
    into a host-owned directory, adds missing items, refreshes items still
    byte-identical to an earlier seed (tracked in <dest>/.seeded.json) unless
    the bundle is older than that seed, keeps everything else with a reason
    (kept_user_modified, kept_foreign, kept_unknown_provenance,
    kept_symlink, kept_unreadable, kept_newer), reports items no longer
    bundled in not_in_bundle without deleting them, and writes nothing when
    run again. Concurrent seeds of one directory serialise on an exclusive lock
    (<dest>/.seed.lock); a failed folder swap restores the previous copy.
  • catalog.yaml declares a bundle version (2026.09.25); a test pins it to
    a digest of the bundled content so the version moves with the content.

Changed

  • The registry lives at src/abstractskill/registry/ in the repository
    (moved from registry/); scripts, tests and docs use the new path.
  • Curator working notes (CANDIDATES.md, staged capability-map amendments)
    live under docs/backlog/proposed/shelf-drafts/ and are not shipped.
  • The README describes the bundled registry and seed_registry in place of
    per-host path configuration.
  • pytest skips untracked/, build/, dist/, site/ and dot-directories
    when collecting from the repository root.

Documentation

  • Added CONTRIBUTING.md (development workflow and the rules for changing
    the bundled registry), CODE_OF_CONDUCT.md and ACKNOWLEDGEMENTS.md.
  • Troubleshooting and FAQ entries for seeding: kept items and their reasons,
    items no longer bundled, manifest errors, and the seed lock.
  • The architecture page shows the module dependencies, the trust-gated
    activation flow, and the per-item seeding decision.
  • The curated skills catalog lists all 14 bundled skills, including
    entity-observation and meshvault-live-editing.
  • llms-full.txt aggregates the documentation pages in full.

AbstractSkill v0.2.1

Choose a tag to compare

@github-actions github-actions released this 23 Sep 15:19

Fixed

  • Boolean flags in registry and catalog data (ValidationRecord.delivered_via_map,
    CatalogEntry.vendored) are now parsed strictly: "false", "no", "0" and
    "off" are false instead of being read as true, and unrecognised values raise
    SkillValidationError instead of being silently coerced.
  • FilesystemSkillLoader skips a skill root it cannot list (with a #FALLBACK
    warning) instead of aborting discovery, and an unreadable SKILL.md raises
    SkillParseError instead of a raw OSError.

Changed

  • Documentation site moved to https://www.lpalbou.info/AbstractSkill/; the
    project Documentation URL points there.
  • CI now builds the documentation site on every push and pull request, and the
    release workflow publishes the docs after a successful release.

AbstractSkill v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 01:53

Added

  • Trust-gated activation pipeline: select_skills_for_context, SkillSelection,
    hash-pinned enables, TOCTOU cross-checks, and declared MCP/tool dependency
    surfacing (SkillRequires).
  • Fail-closed trust registry: TrustRegistry, evaluate_trust, validation
    records, do-not-use advisories, guidance entries, and lint_registry.
  • Curated vendoring catalog: load_catalog, CatalogEntry, SkillCatalog,
    lint_catalog, plus scripts/vendor_skill.py and scripts/refresh_shelf.py.
  • Whole-tree hashing and inventory: hash_skill_tree, inspect_skill_dir,
    read_skill_resource with traversal/symlink refusal.
  • Derived demand tiering: derive_demand, DemandReport, DemandRow — host
    inventory join for declared tool/MCP requirements (informational; grants
    enforced by the host).
  • Tool composition: effective_tools, effective_tools_for_skill (grant ∩
    declared; never widens).
  • 14 curated skills under registry/skills/ with byte-pinned validations.
  • GitHub Pages documentation workflow (MkDocs Material).

Changed

  • Development status bumped to Beta (4).
  • Expanded API surface exported from abstractskill.__init__.