Extend Bolt

The Boltpack format.

A .boltpack is one signed file that carries User Apps, their scripts, skills and agents from one person to another.

What is inside.

Layout
my-pack.boltpack          gzip tar
  bundle.json             what is inside, who signed it, the content hash
  signature.bin           64-byte Ed25519 signature over bundle.json
  manifests/
    utilities/*.yaml      User Apps
    scripts/*             scripts those Apps call
    skills/*.json         skills
    agents/*.json         agents

A Boltpack is a gzip tar of up to 50 MB. ZIP is refused. The hash covers each file's path and bytes only, so file dates and order do not matter.

What gets installed, and where.

Folder in the packKindInstalled byEnds up in
utilities/*.yamluser_utilityDesktop app, when you drop the pack on the launcherBolt's User Apps folder, as <id>.yaml
scripts/*scriptDesktop app, same stepThe scripts folder beside it, marked runnable
skills/*.jsonskillSettings → Agents → ImportYour skills
agents/*.jsonagentSettings → Agents → ImportYour personal agents
anything elseotherNothingIgnored

bundle.json.

FieldMeaning
schema_versionAlways 1.
bundle_versionYour version of the pack, for example 1.2.0.
signed_by, signed_atThe author as written by the signer, and when (RFC 3339).
min_bolt_api_version, max_bolt_api_versionThe Bolt versions it is meant for.
content_sha256, manifest_count, entriesA hash of every file, and one entry per file with its own hash and kind.
release_notesWhat changed.
bundle_kindutil_pack for a personal Boltpack.
packpack_id, name, icon, description, author (name, email, kind).
signer_pubkeyThe public key that checks the signature, for a self-signed pack.
riskThe packer's own risk summary. Bolt works it out again and uses its own.

Signing and trust.

PackWhat it meansWhat happens
Signed by SparcleThe signature matches a key built into Bolt.Installs after the review card. From the next release the card reads Signed by Sparcle.
Self-signed (from the next release the card reads Signed by its author)The signature matches a key inside the pack. It proves nobody changed the files after signing; it does not prove who wrote them.After the review card, Bolt asks again in its own window: Install an unverified Bolt pack? Cancel, or no answer, installs nothing.
Unsigned or changedNo signature, or the files do not match it.Refused.

Bolt checks the signature and the hash before it shows you anything, and checks them again in the desktop app before it writes a file, so a page cannot hand the installer a different verdict. Today the only key built into Bolt is Sparcle's; a company signing key is planned.

Permissions.

Each script entry can declare what it touches. The review card shows these before you install, and they set the risk level: a script, a network host or a write makes it medium; a whole-disk path such as /, ~ or ** makes it high.

DeclaredMeaning
networkHosts the entry calls, as host:port.
fs_read, fs_writeFiles and folders it reads or writes.
execPrograms it runs.
envEnvironment variables it reads.

Versions and updates.

Give each release a new bundle_version. Installing a pack whose App has the same id as one you have replaces that file. Bolt does not yet compare versions or show what changed between two versions, so read the review card each time.

Making one.

Settings → Skills and Settings → Agents export your own as a signed Boltpack, each with a fresh key. A command-line tool to pack and sign User Apps and scripts is not public yet; it will come with the gallery.