#!/usr/bin/env sh # Missive installer — drop the contract + the full working toolchain into the current project. # curl -fsSL https://missive.daystra.com/install.sh | sh set -e BASE="https://missive.daystra.com" # THE manifest: one server path per line. scripts/test/releases_sync_test.sh asserts every # line exists in the served tree — edit this list and the sync list together. FETCH="MISSIVE.md MISSIVE-TEMPLATE.md MISSIVE-PATTERNS.md scripts/vault.sh scripts/missive-run.sh scripts/lib/missive-redact.sh scripts/lib/missive-parse.sh scripts/lib/missive-refs.sh scripts/lib/missive-checks.sh scripts/lib/missive-sign.sh scripts/lib/missive-capture.sh scripts/lib/missive-fire.sh scripts/lib/missive-sigv4-fixture.sh scripts/fixtures/sigv4/README.md scripts/fixtures/sigv4/get-vanilla/request.txt scripts/fixtures/sigv4/get-vanilla/authz.txt scripts/fixtures/sigv4/get-query/request.txt scripts/fixtures/sigv4/get-query/authz.txt scripts/fixtures/sigv4/get-query-reserved/request.txt scripts/fixtures/sigv4/get-query-reserved/authz.txt scripts/fixtures/sigv4/get-space-path/request.txt scripts/fixtures/sigv4/get-space-path/authz.txt scripts/fixtures/sigv4/get-utf8-path/request.txt scripts/fixtures/sigv4/get-utf8-path/authz.txt scripts/fixtures/sigv4/get-header-trim/request.txt scripts/fixtures/sigv4/get-header-trim/authz.txt scripts/fixtures/sigv4/post-body/request.txt scripts/fixtures/sigv4/post-body/authz.txt scripts/fixtures/sigv4/session-token/request.txt scripts/fixtures/sigv4/session-token/authz.txt scripts/fixtures/sigv4/synthetic-unsigned/request.txt scripts/fixtures/sigv4/synthetic-unsigned/authz.txt scripts/fixtures/sigv4/synthetic-unsigned/NOTE.txt" echo "Missive -> installing the contract + toolchain into $(pwd)" printf '%s\n' "$FETCH" | while IFS= read -r p; do [ -n "$p" ] || continue d="$(dirname "$p")" [ "$d" = "." ] || mkdir -p "$d" curl -fsSL "$BASE/$p" -o "$p" done chmod +x scripts/vault.sh scripts/missive-run.sh echo " + MISSIVE.md + MISSIVE-TEMPLATE.md + MISSIVE-PATTERNS.md" echo " + scripts/ (vault.sh, missive-run.sh, 8 libs, SigV4 KAT vectors)" # Claude adapter (a ~25-line router). The contract (MISSIVE.md) is runtime-neutral; the adapter # is just how Claude Code gets pointed at it. Other agents: tell them "read MISSIVE.md". mkdir -p .claude/skills/missive curl -fsSL "$BASE/skills/claude/SKILL.md" -o .claude/skills/missive/SKILL.md echo " + .claude/skills/missive/SKILL.md (Claude adapter)" echo echo "What you need: an AI agent + bash/curl/jq/openssl (already on stock macOS/Linux)." echo "Quickstart:" echo " 1) store a secret: printf %s 'VALUE' | scripts/vault.sh set NAME (your terminal, not an agent transcript)" echo " 2) start a collection: cp MISSIVE-TEMPLATE.md my-service.api.md (recipes: MISSIVE-PATTERNS.md)" echo " 3) advanced auth fires deterministically: scripts/missive-run.sh \"\" --env " echo echo "The law: the Markdown holds {{vault:NAME}} references, never values." echo "Contract: $BASE/MISSIVE.md Examples: $BASE/examples/ Agents: $BASE/llms.txt"