awshare

Publish an artifact, and fetch it back verified.

awshare bundles a directory into a tar.gz plus a small JSON manifest naming its digest, its size and the files inside it. A consumer fetches the manifest first and can decide, before opening anything, whether the archive is the one that was published.

pip install awshare            # stdlib only
pip install "awshare[seal]"    # adds provenance via awseal

awshare publish ./my-adapter --out ./dist --seal
awshare fetch ./dist/my-adapter.awshare.json --dest ./here --key <publisher-key>

It pairs with awseal; it does not replace it

awshare — are these the bytes that were published?   (integrity)
awseal  — who published them?                        (provenance)

A digest cannot answer the second, because whoever produced the bytes also produced the digest. publish --seal seals the directory before archiving, so the seal travels inside the artifact and one download answers both. Unsealed publishes say so on every run rather than letting a clean-looking pass be mistaken for provenance.

Exit codes are three answers, not two

0   verified
1   checked, and it failed      (digest mismatch, wrong publisher, bad seal)
2   could not check at all      (missing archive, unknown manifest version)

Collapsing 1 and 2 is how “I could not check this” becomes “it checked out”. This package’s own CLI got it wrong first: an artifact from the wrong publisher — definitively judged and definitively rejected — exited 2, the code reserved for not being able to tell.

What it refuses

  • Path traversal, in four flavours, because each defeats the previous defence: .. segments, absolute paths (Path("/a") / "/etc/passwd" is /etc/passwd), Windows drive-relative names, and symlinks inside the destination that only escape after resolve().
  • Non-regular archive members. A symlink in a tarball passes every check applied to its name and points anywhere once created.
  • Unbounded expansion. A small download that expands without limit fills the disk long before anyone reads a log line.
  • An empty tree. It would fetch and verify perfectly while containing nothing.
  • Contents that disagree with the manifest, even when the digest matches — that is a manifest describing a different set of files to the one it names, which is worse than corruption because every integrity check passes.

Archives normalise uid, gid and mtime, so two builds of identical content produce identical bytes and a content-addressed store does not treat them as different artifacts.

Licence

Apache-2.0.


The aw family

Standalone tools that share one idea: replace something you would otherwise have to trust with something you can check.

Each installs on its own, works offline, and needs no account.

  instead of trusting you check
awnix that the box is what you left it as an immutable image you built, with atomic rollback
awnode a vendor’s cloud with every prompt a local gateway routing to backends you chose
awgit that no one else is editing this file a lease, refused at commit time if you do not hold it
awgraph that grep found everything an AST + tree-sitter call graph an agent can traverse
awseal that the artifact came from who you think an Ed25519 seal — the key that verifies is not the key that forges
awshare (you are here) that the download is intact content-addressed bundles, verified on fetch
awrelay a SaaS in the middle of your agents findings, alerts and coordination over your own transport
awm that memory stayed in its lane tenant:user:project scopes, so a write cannot cross a boundary
awrecover that the restore worked a restore that fully lands or does not land at all

awnix is the ground floor — a bootable, immutable Linux base for machines where software writes software.

Aitherium open-source ecosystem

This repo is one piece of a connected set. All public, MIT/BSL-licensed:

repo what it is pages
awrecover Labelled snapshots with an all-or-nothing restore docs
awshare Publish an artifact and fetch it back verified docs
awseal Sign an artifact so a stranger can verify it docs
awnode Lightweight local gateway — your apps to backends you chose docs
awnix A bootable, immutable Linux base for agent-run machines docs
awdk Build AI agent fleets — 3 lines, any backend docs
awskills Free agent skills, scripts & automations docs
AitherZero PowerShell 7+ automation framework docs
awgit Semantic version control on top of git docs
awgraph Code knowledge graph for AI agents docs
aitherkvcache Near-optimal KV cache quantization docs
awrelay Agent-to-agent messaging over any chat server docs
awm A small world model (LeWM JEPA + MLP) to bootstrap your own docs
AitherConnect Browser extension: federated AI search & desktop bridge
homebrew-tap brew tap aitherium/tap

Built by Aitherium.


Part of the aw family — standalone tools that replace something you would otherwise have to trust with something you can check. Apache-2.0.

This site uses Just the Docs, a documentation theme for Jekyll.