Archon Keymaster - Core DID Toolkit Core toolkit for Archon decentralized identities (DIDs). Manages identity lifecycle, encrypted communication, cryptographic operations, and authorization. Related skills: - — Vault management and encrypted distributed backups - — Cashu ecash with DID-locked tokens Capabilities - Identity Management - Create, manage multiple DIDs, recover from mnemonic - Verifiable Credentials - Create schemas, issue/accept/revoke credentials - Encrypted Messaging (Dmail) - Send/receive end-to-end encrypted messages between DIDs - Nostr Integration - Derive Nostr keypairs fr…

\\n' ]]; then\n echo \"ERROR: Wallet path contains invalid characters (\\$, \\`, \\\", ', ;, or newlines)\"\n echo \"Please use a simple path like: ~/.archon.wallet.json\"\n exit 1\nfi\n\necho \"\"\necho \"Using wallet path: $WALLET_PATH\"\necho \"\"\n\n# Check if wallet already exists at the chosen path\nif [ -f \"$WALLET_PATH\" ]; then\n echo \"ERROR: Wallet already exists at $WALLET_PATH\"\n echo \"\"\n echo \"If you want to create a new identity in your existing wallet, use:\"\n echo \" ./scripts/identity/create-additional-id.sh \u003cdid-name>\"\n echo \"\"\n echo \"If you want to start over (WARNING: will lose existing DIDs), remove:\"\n echo \" rm \\\"$WALLET_PATH\\\" ~/.archon.env\"\n exit 1\nfi\n\n# Check if .archon.env already exists\nif [ -f ~/.archon.env ]; then\n echo \"WARNING: ~/.archon.env already exists\"\n read -p \"Overwrite? (yes/no): \" confirm\n if [ \"$confirm\" != \"yes\" ]; then\n echo \"Aborted.\"\n exit 1\n fi\nfi\n\n# Generate secure passphrase (or let user provide one)\necho \"Generating secure passphrase...\"\nPASSPHRASE=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)\n\n# Create .archon.env\necho \"Creating ~/.archon.env...\"\ncat > ~/.archon.env \u003c\u003c EOF\n# Archon environment configuration\n# DO NOT COMMIT THIS FILE TO GIT\n\n# Wallet location (required by all archon-keymaster scripts)\nexport ARCHON_WALLET_PATH=\"$WALLET_PATH\"\n\n# Passphrase for wallet encryption\nexport ARCHON_PASSPHRASE=\"$PASSPHRASE\"\n\n# Gatekeeper URL (public gatekeeper has 10MB limit)\nexport ARCHON_GATEKEEPER_URL=\"https://archon.technology\"\n# For local gatekeeper (unlimited): export ARCHON_GATEKEEPER_URL=\"http://localhost:4224\"\nEOF\n\nchmod 600 ~/.archon.env\necho \"✓ Environment saved to ~/.archon.env (chmod 600)\"\n\n# Source it for this session\nsource ~/.archon.env\n\n# Create wallet directory if needed\nWALLET_DIR=$(dirname \"$WALLET_PATH\")\nif [ ! -d \"$WALLET_DIR\" ]; then\n mkdir -p \"$WALLET_DIR\"\n echo \"✓ Created directory: $WALLET_DIR\"\nfi\n\n# Create wallet first\necho \"\"\necho \"Creating wallet...\"\necho \"\"\n\nWALLET_OUTPUT=$(npx @didcid/keymaster create-wallet 2>&1)\necho \"$WALLET_OUTPUT\"\n\n# Display mnemonic explicitly (CLI no longer prints it during create-wallet)\nnpx @didcid/keymaster show-mnemonic | tr -d '\\r'\necho \"\"\necho \"==========================================\"\necho \" SAVE YOUR MNEMONIC (12 words above) \"\necho \"==========================================\"\necho \"\"\n\n# Prompt for DID name\nread -p \"Name for your DID (e.g., 'main', 'work'): \" DID_NAME\nDID_NAME=\"${DID_NAME:-main}\"\n\necho \"\"\necho \"Creating DID '$DID_NAME'...\"\nnpx @didcid/keymaster create-id \"$DID_NAME\"\n\necho \"\"\necho \"=== Setup Complete ===\"\necho \"\"\necho \"✓ Wallet created: $WALLET_PATH\"\necho \"✓ DID created: $DID_NAME\"\necho \"✓ Environment configured: ~/.archon.env\"\necho \"\"\necho \"CRITICAL: Your 12-word mnemonic was displayed above.\"\necho \" Write it down and store it offline (paper, metal plate, etc.)\"\necho \" This is the ONLY way to recover your identity.\"\necho \"\"\necho \"To use your DID in other terminal sessions, run:\"\necho \" source ~/.archon.env\"\necho \"\"\necho \"Next steps:\"\necho \" - Save your mnemonic securely (offline!)\"\necho \" - Set up backups: archon-backup skill\"\necho \" - Backup wallet to seed bank: npx @didcid/keymaster backup-wallet-did\"\necho \"\"\necho \"View your DIDs:\"\necho \" npx @didcid/keymaster list-ids\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":4131,"content_sha256":"d8caf67fb5bb49869f615eda990a4f5c1b3e898e2b517c2d7f392ccc6e2038b7"},{"filename":"scripts/identity/list-ids.sh","content":"#!/bin/bash\n# List all DIDs in your wallet\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nelse\n echo \"ERROR: ~/.archon.env not found\"\n echo \"Run ./scripts/identity/create-id.sh first\"\n exit 1\nfi\n\n# Require ARCHON_WALLET_PATH\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Check wallet exists\nif [ ! -f \"$ARCHON_WALLET_PATH\" ]; then\n echo \"ERROR: No wallet found at $ARCHON_WALLET_PATH\"\n exit 1\nfi\n\necho \"=== Your Archon DIDs ===\"\necho \"\"\n\nnpx @didcid/keymaster list-ids\n\necho \"\"\necho \"Switch active DID:\"\necho \" ./scripts/identity/switch-id.sh \u003cdid-name>\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":678,"content_sha256":"620408ac898909c353dafcc331033911ea7429d89fddb3703e349069919f794a"},{"filename":"scripts/identity/switch-id.sh","content":"#!/bin/bash\n# Switch active DID (for multi-DID setups)\n# Usage: ./switch-id.sh \u003cdid-name>\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cdid-name>\"\n echo \"\"\n echo \"Available DIDs:\"\n \"$(dirname \"$0\")/list-ids.sh\"\n exit 1\nfi\n\nDID_NAME=\"$1\"\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nelse\n echo \"ERROR: ~/.archon.env not found\"\n exit 1\nfi\n\n# Require ARCHON_WALLET_PATH\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Check wallet exists\nif [ ! -f \"$ARCHON_WALLET_PATH\" ]; then\n echo \"ERROR: No wallet found at $ARCHON_WALLET_PATH\"\n exit 1\nfi\n\necho \"=== Switching Active DID ===\"\necho \"\"\necho \"Target: $DID_NAME\"\necho \"\"\n\n# Switch active DID (keymaster validates the name exists)\nnpx @didcid/keymaster use-id \"$DID_NAME\"\n\necho \"\"\necho \"✓ Active DID: $DID_NAME\"\necho \"\"\necho \"Note: This updates the wallet. To verify:\"\necho \" npx @didcid/keymaster list-ids\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":985,"content_sha256":"ab95c7458867dcb00c895475c2ba1288814bc47f5940cd63d24e692f739aba85"},{"filename":"scripts/messaging/archive.sh","content":"#!/bin/bash\n# Archive a dmail (removes from inbox)\n# Usage: archive.sh \u003cdmail-did>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 1 ]; then\n echo \"Usage: $0 \u003cdmail-did>\"\n exit 1\nfi\n\nDMAIL_DID=\"$1\"\n\n# Set archive tag (removes inbox, unread)\nnpx @didcid/keymaster file-dmail \"$DMAIL_DID\" \"archive\"\n\necho \"Archived: $DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":497,"content_sha256":"27106494bf9299ab0182087715306e2cc00fb0d8acf60883fa6e819e59d50624"},{"filename":"scripts/messaging/attach.sh","content":"#!/bin/bash\n# Add an attachment to a dmail\n# Usage: attach.sh \u003cdmail-did> \u003cfile-path>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 2 ]; then\n echo \"Usage: $0 \u003cdmail-did> \u003cfile-path>\"\n exit 1\nfi\n\nDMAIL_DID=\"$1\"\nFILE_PATH=\"$2\"\n\nif [ ! -f \"$FILE_PATH\" ]; then\n echo \"Error: File not found: $FILE_PATH\"\n exit 1\nfi\n\nnpx @didcid/keymaster add-dmail-attachment \"$DMAIL_DID\" \"$FILE_PATH\"\n\nFILENAME=$(basename \"$FILE_PATH\")\necho \"Attached '$FILENAME' to $DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":637,"content_sha256":"fa72185895621e2a5e8fa60d41ad26be8b3a77c4f16a5c1085ba5f170acc468a"},{"filename":"scripts/messaging/delete.sh","content":"#!/bin/bash\n# Delete a dmail from inbox\n# Usage: delete.sh \u003cdmail-did>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 1 ]; then\n echo \"Usage: $0 \u003cdmail-did>\"\n exit 1\nfi\n\nDMAIL_DID=\"$1\"\n\nnpx @didcid/keymaster remove-dmail \"$DMAIL_DID\"\n\necho \"Deleted: $DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":434,"content_sha256":"1fa76b399851ad75a1de994290ab072ab121d271a980aa3acac92847d5732c01"},{"filename":"scripts/messaging/forward.sh","content":"#!/bin/bash\n# Forward a dmail\n# Usage: forward.sh \u003cdmail-did> \u003crecipient-did> [additional-body]\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 2 ]; then\n echo \"Usage: $0 \u003cdmail-did> \u003crecipient-did> [additional-body]\"\n exit 1\nfi\n\nORIGINAL_DID=\"$1\"\nRECIPIENT=\"$2\"\nADDITIONAL=\"${3:-}\"\n\n# Get original message from list (has metadata)\nDMAILS=$(npx @didcid/keymaster list-dmail 2>/dev/null)\nORIGINAL=$(echo \"$DMAILS\" | jq --arg did \"$ORIGINAL_DID\" '.[$did] // empty')\n\nif [ -z \"$ORIGINAL\" ] || [ \"$ORIGINAL\" = \"null\" ]; then\n echo \"Error: Could not retrieve original dmail from inbox\"\n exit 1\nfi\n\nSENDER=$(echo \"$ORIGINAL\" | jq -r '.sender // \"Unknown\"')\nSUBJECT=$(echo \"$ORIGINAL\" | jq -r '.message.subject')\nBODY=$(echo \"$ORIGINAL\" | jq -r '.message.body')\nDATE=$(echo \"$ORIGINAL\" | jq -r '.date')\n\n# Add Fwd: prefix if not already there\nif [[ ! \"$SUBJECT\" =~ ^Fwd: ]]; then\n SUBJECT=\"Fwd: $SUBJECT\"\nfi\n\n# Build forwarded body\nFORWARD_BODY=\"\"\nif [ -n \"$ADDITIONAL\" ]; then\n FORWARD_BODY=\"$ADDITIONAL\n\n---------- Forwarded message ----------\"\nelse\n FORWARD_BODY=\"---------- Forwarded message ----------\"\nfi\nFORWARD_BODY=\"$FORWARD_BODY\nFrom: $SENDER\nDate: $DATE\nSubject: $SUBJECT\n\n$BODY\"\n\n# Create forward JSON\nTMPFILE=$(mktemp /tmp/dmail-XXXXXX.json)\ntrap \"rm -f $TMPFILE\" EXIT\n\n# Escape for JSON\nFORWARD_BODY_ESCAPED=$(echo \"$FORWARD_BODY\" | jq -Rs .)\n\ncat > \"$TMPFILE\" \u003c\u003c EOF\n{\n \"to\": [\"$RECIPIENT\"],\n \"cc\": [],\n \"subject\": \"$SUBJECT\",\n \"body\": $FORWARD_BODY_ESCAPED,\n \"reference\": \"$ORIGINAL_DID\"\n}\nEOF\n\n# Create and send\necho \"Creating forward...\" >&2\nDMAIL_DID=$(npx @didcid/keymaster create-dmail \"$TMPFILE\")\necho \"Sending...\" >&2\nNOTICE_DID=$(npx @didcid/keymaster send-dmail \"$DMAIL_DID\")\necho \"Forwarded! Notice: $NOTICE_DID\" >&2\n\nnpx @didcid/keymaster file-dmail \"$DMAIL_DID\" \"sent\" >/dev/null 2>&1\n\necho \"$DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":2026,"content_sha256":"fe3dfae359790ec932e2202378b5eccbe84e0bf702cd8bfe5e86fdf6aa4df47e"},{"filename":"scripts/messaging/get-attachment.sh","content":"#!/bin/bash\n# Download an attachment from a dmail\n# Usage: get-attachment.sh \u003cdmail-did> \u003cattachment-name> \u003coutput-path>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 3 ]; then\n echo \"Usage: $0 \u003cdmail-did> \u003cattachment-name> \u003coutput-path>\"\n echo \"\"\n echo \"To list attachments, use: npx @didcid/keymaster list-dmail-attachments \u003cdmail-did>\"\n exit 1\nfi\n\nDMAIL_DID=\"$1\"\nATTACHMENT_NAME=\"$2\"\nOUTPUT_PATH=\"$3\"\n\nnpx @didcid/keymaster get-dmail-attachment \"$DMAIL_DID\" \"$ATTACHMENT_NAME\" \"$OUTPUT_PATH\"\n\necho \"Downloaded '$ATTACHMENT_NAME' to $OUTPUT_PATH\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":728,"content_sha256":"3efe241a7e8cd115172a703e2b789b85412092185507b1e3868f889ae9b22f76"},{"filename":"scripts/messaging/list.sh","content":"#!/bin/bash\n# List dmails in inbox\n# Usage: list.sh [filter]\n# filter: unread, sent, archive, or any tag\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nFILTER=\"${1:-}\"\n\n# Get all dmails as JSON\nDMAILS=$(npx @didcid/keymaster list-dmail 2>/dev/null)\n\nif [ \"$DMAILS\" = \"{}\" ]; then\n echo \"No messages in inbox.\"\n exit 0\nfi\n\n# Format output\necho \"$DMAILS\" | jq -r --arg filter \"$FILTER\" '\n to_entries | \n map(select(\n if $filter == \"\" then true\n else .value.tags | contains([$filter])\n end\n )) |\n sort_by(.value.date) | reverse |\n .[] | \n \"\\(.value.date | split(\"T\")[0]) | \\(.value.sender // \"Unknown\") | \\(.value.message.subject) | [\\(.value.tags | join(\",\"))] | \\(.key | split(\":\")[2][:12])...\"\n' | column -t -s '|'\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":914,"content_sha256":"4c5d6d23d0f64119486aca2601dfa5709e6d46c2145e483aaba22ffb7853f308"},{"filename":"scripts/messaging/read.sh","content":"#!/bin/bash\n# Read a specific dmail\n# Usage: read.sh \u003cdmail-did>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 1 ]; then\n echo \"Usage: $0 \u003cdmail-did>\"\n exit 1\nfi\n\nDMAIL_DID=\"$1\"\n\n# Get full dmail list and filter for this one (list-dmail has full metadata)\nDMAILS=$(npx @didcid/keymaster list-dmail 2>/dev/null)\nDMAIL=$(echo \"$DMAILS\" | jq --arg did \"$DMAIL_DID\" '.[$did] // empty')\n\nif [ -z \"$DMAIL\" ] || [ \"$DMAIL\" = \"null\" ]; then\n # Try getting just the message content\n MSG=$(npx @didcid/keymaster get-dmail \"$DMAIL_DID\" 2>/dev/null)\n if [ -z \"$MSG\" ] || [ \"$MSG\" = \"null\" ]; then\n echo \"Error: Could not retrieve dmail $DMAIL_DID\"\n exit 1\n fi\n # Display minimal format (message only, no metadata)\n echo \"═══════════════════════════════════════════════════════════════\"\n echo \"$MSG\" | jq -r '\n \"To: \\(.to | join(\", \"))\",\n (if .cc | length > 0 then \"CC: \\(.cc | join(\", \"))\" else empty end),\n \"Subject: \\(.subject)\",\n (if .reference != \"\" then \"Re: \\(.reference)\" else empty end),\n \"═══════════════════════════════════════════════════════════════\",\n \"\",\n .body\n '\n exit 0\nfi\n\n# Display formatted with full metadata\necho \"$DMAIL\" | jq -r '\n \"═══════════════════════════════════════════════════════════════\",\n \"From: \\(.sender // \"Unknown\")\",\n \"To: \\(.to | join(\", \"))\",\n (if .cc | length > 0 then \"CC: \\(.cc | join(\", \"))\" else empty end),\n \"Date: \\(.date // \"Unknown\")\",\n \"Subject: \\(.message.subject)\",\n (if .message.reference != \"\" then \"Re: \\(.message.reference)\" else empty end),\n \"Tags: \\(.tags | join(\", \"))\",\n \"═══════════════════════════════════════════════════════════════\",\n \"\",\n .message.body,\n \"\"\n'\n\n# Show attachments if any\nATTACHMENTS=$(echo \"$DMAIL\" | jq -r '.attachments | keys | length')\nif [ \"$ATTACHMENTS\" -gt 0 ]; then\n echo \"Attachments:\"\n echo \"$DMAIL\" | jq -r '.attachments | to_entries[] | \" - \\(.key)\"'\nfi\n\n# Mark as read (remove unread tag, keep others)\nCURRENT_TAGS=$(echo \"$DMAIL\" | jq -r '.tags | map(select(. != \"unread\")) | join(\",\")')\nif [ -n \"$CURRENT_TAGS\" ]; then\n npx @didcid/keymaster file-dmail \"$DMAIL_DID\" \"$CURRENT_TAGS\" >/dev/null 2>&1 || true\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":2945,"content_sha256":"41c462a6a1d047da17fa80a668131fc222a21fa42868ea12be303ad2f46b636c"},{"filename":"scripts/messaging/refresh.sh","content":"#!/bin/bash\n# Check for new dmails\n# Usage: refresh.sh\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\necho \"Checking for new messages...\"\nnpx @didcid/keymaster refresh-dmail\n\n# Count unread\nUNREAD=$(npx @didcid/keymaster list-dmail 2>/dev/null | jq '[to_entries[] | select(.value.tags | contains([\"unread\"]))] | length')\n\nif [ \"$UNREAD\" -gt 0 ]; then\n echo \"You have $UNREAD unread message(s).\"\nelse\n echo \"No new messages.\"\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":588,"content_sha256":"94711e531943ab31ef0427868ea1bad90282b3dced8312c98e3cc0aff60cd7d4"},{"filename":"scripts/messaging/reply.sh","content":"#!/bin/bash\n# Reply to a dmail\n# Usage: reply.sh \u003cdmail-did> \u003cbody>\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 2 ]; then\n echo \"Usage: $0 \u003cdmail-did> \u003cbody>\"\n exit 1\nfi\n\nORIGINAL_DID=\"$1\"\nBODY=\"$2\"\n\n# Get original message from list (has metadata)\nDMAILS=$(npx @didcid/keymaster list-dmail 2>/dev/null)\nORIGINAL=$(echo \"$DMAILS\" | jq --arg did \"$ORIGINAL_DID\" '.[$did] // empty')\n\nif [ -z \"$ORIGINAL\" ] || [ \"$ORIGINAL\" = \"null\" ]; then\n echo \"Error: Could not retrieve original dmail from inbox\"\n exit 1\nfi\n\n# Extract sender DID (controller of the dmail DID doc)\nSENDER_DID=$(echo \"$ORIGINAL\" | jq -r '.docs.didDocument.controller')\nSUBJECT=$(echo \"$ORIGINAL\" | jq -r '.message.subject')\n\nif [ \"$SENDER_DID\" = \"null\" ] || [ -z \"$SENDER_DID\" ]; then\n echo \"Error: Could not determine sender DID\"\n exit 1\nfi\n\n# Add Re: prefix if not already there\nif [[ ! \"$SUBJECT\" =~ ^Re: ]]; then\n SUBJECT=\"Re: $SUBJECT\"\nfi\n\n# Escape body for JSON\nBODY_ESCAPED=$(echo \"$BODY\" | jq -Rs .)\n\n# Create reply JSON\nTMPFILE=$(mktemp /tmp/dmail-XXXXXX.json)\ntrap \"rm -f $TMPFILE\" EXIT\n\ncat > \"$TMPFILE\" \u003c\u003c EOF\n{\n \"to\": [\"$SENDER_DID\"],\n \"cc\": [],\n \"subject\": \"$SUBJECT\",\n \"body\": $BODY_ESCAPED,\n \"reference\": \"$ORIGINAL_DID\"\n}\nEOF\n\n# Create and send\necho \"Creating reply...\" >&2\nDMAIL_DID=$(npx @didcid/keymaster create-dmail \"$TMPFILE\")\necho \"Sending...\" >&2\nNOTICE_DID=$(npx @didcid/keymaster send-dmail \"$DMAIL_DID\")\necho \"Reply sent! Notice: $NOTICE_DID\" >&2\n\nnpx @didcid/keymaster file-dmail \"$DMAIL_DID\" \"sent\" >/dev/null 2>&1\n\necho \"$DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1734,"content_sha256":"543c89f62cb8dc624ac580fa6d2b435f91be3934ce0a43f1daff52ead429c6cb"},{"filename":"scripts/messaging/send.sh","content":"#!/bin/bash\n# Send a dmail to one or more recipients\n# Usage: send.sh \u003crecipient-did> \u003csubject> \u003cbody> [cc-did...]\n\nset -e\n\n# Load environment\nif [ -f ~/.archon.env ]; then\n source ~/.archon.env\nfi\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\nif [ $# -lt 3 ]; then\n echo \"Usage: $0 \u003crecipient-did> \u003csubject> \u003cbody> [cc-did...]\"\n echo \"Example: $0 'did:cid:alice...' 'Hello' 'How are you?'\"\n exit 1\nfi\n\nRECIPIENT=\"$1\"\nSUBJECT=\"$2\"\nBODY=\"$3\"\nshift 3\n\n# Build CC array from remaining arguments\nCC_JSON=\"[]\"\nif [ $# -gt 0 ]; then\n CC_JSON=$(printf '%s\\n' \"$@\" | jq -R . | jq -s .)\nfi\n\n# Escape subject and body for JSON\nSUBJECT_ESCAPED=$(echo \"$SUBJECT\" | jq -Rs . | sed 's/^\"//;s/\"$//')\nBODY_ESCAPED=$(echo \"$BODY\" | jq -Rs .)\n\n# Create temporary JSON file\nTMPFILE=$(mktemp /tmp/dmail-XXXXXX.json)\ntrap \"rm -f $TMPFILE\" EXIT\n\ncat > \"$TMPFILE\" \u003c\u003c EOF\n{\n \"to\": [\"$RECIPIENT\"],\n \"cc\": $CC_JSON,\n \"subject\": \"$SUBJECT_ESCAPED\",\n \"body\": $BODY_ESCAPED,\n \"reference\": \"\"\n}\nEOF\n\n# Create the dmail\necho \"Creating dmail...\" >&2\nDMAIL_DID=$(npx @didcid/keymaster create-dmail \"$TMPFILE\")\necho \"Created: $DMAIL_DID\" >&2\n\n# Send the dmail\necho \"Sending...\" >&2\nNOTICE_DID=$(npx @didcid/keymaster send-dmail \"$DMAIL_DID\")\necho \"Sent! Notice: $NOTICE_DID\" >&2\n\n# Tag as sent\nnpx @didcid/keymaster file-dmail \"$DMAIL_DID\" \"sent\" >/dev/null 2>&1\n\n# Return the dmail DID\necho \"$DMAIL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1470,"content_sha256":"c008f78ec60817761ff72e2d0dbf4b8169a7198a7531fedbaeeeefb7c99ca823"},{"filename":"scripts/nostr/derive-nostr.sh","content":"#!/bin/bash\n# Derive Nostr keys from Archon DID mnemonic\n# Requires: node, npx @didcid/keymaster\n\nset -e\n\nDEPS_DIR=\"/tmp/archon-nostr-deps\"\n\n# Get mnemonic from keymaster\nMNEMONIC=$(npx @didcid/keymaster show-mnemonic 2>/dev/null)\n\nif [ -z \"$MNEMONIC\" ]; then\n echo \"Error: Could not get mnemonic. Is ARCHON_PASSPHRASE set?\" >&2\n exit 1\nfi\n\n# Install dependencies if needed\nif [ ! -f \"$DEPS_DIR/node_modules/bip39/package.json\" ]; then\n echo \"Installing dependencies...\" >&2\n mkdir -p \"$DEPS_DIR\"\n cd \"$DEPS_DIR\"\n npm install --silent bip39 @scure/bip32 secp256k1 bech32 >/dev/null 2>&1\n cd - >/dev/null\nfi\n\n# Run derivation\ncd \"$DEPS_DIR\"\nnode --input-type=commonjs \u003c\u003cEOF\nconst bip39 = require('bip39');\nconst { HDKey } = require('@scure/bip32');\nconst secp256k1 = require('secp256k1');\nconst { bech32 } = require('bech32');\n\nconst mnemonic = '${MNEMONIC}';\nconst seed = bip39.mnemonicToSeedSync(mnemonic);\nconst hdkey = HDKey.fromMasterSeed(seed);\n\n// Archon uses Bitcoin BIP44 path\nconst derived = hdkey.derive(\"m/44'/0'/0'/0/0\");\nconst privKey = derived.privateKey;\nconst pubKey = secp256k1.publicKeyCreate(privKey, false);\nconst pubKeyX = Buffer.from(pubKey.slice(1, 33)).toString('hex');\n\nfunction toBech32(prefix, hex) {\n const bytes = Buffer.from(hex, 'hex');\n const words = bech32.toWords(bytes);\n return bech32.encode(prefix, words, 1000);\n}\n\nconst nsec = toBech32('nsec', Buffer.from(privKey).toString('hex'));\nconst npub = toBech32('npub', pubKeyX);\n\nconsole.log('nsec:', nsec);\nconsole.log('npub:', npub);\nconsole.log('pubkey:', pubKeyX);\nEOF\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1566,"content_sha256":"84e770e6d6ac74eaf6d9207cf15b0b0038ee7b43ab18e4b9738ff9bf0b69aa4a"},{"filename":"scripts/polls/add-poll-voter.sh","content":"#!/bin/bash\n# Add a voter to a poll\n\nset -e\n\nif [ -z \"$1\" ] || [ -z \"$2\" ]; then\n echo \"Usage: $0 \u003cpoll-did> \u003cvoter-did>\"\n echo \"\"\n echo \"Add a voter to a poll's eligible voter list\"\n echo \"\"\n echo \"Arguments:\"\n echo \" poll-did DID of the poll\"\n echo \" voter-did DID of the voter to add\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier... did:cid:bagaaierb...\"\n exit 1\nfi\n\nPOLL_DID=$1\nVOTER_DID=$2\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Add voter\necho \"Adding voter to poll...\"\nnpx @didcid/keymaster add-poll-voter \"$POLL_DID\" \"$VOTER_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":921,"content_sha256":"f2c096e22d0378de57b59c5171900cc8233001bcc630060df4d7d5f266c78b71"},{"filename":"scripts/polls/create-poll-template.sh","content":"#!/bin/bash\n# Generate a poll template JSON\n\nset -e\n\necho \"Generating poll template...\" >&2\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\" >&2\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\" >&2\n exit 1\nfi\n\n# Generate template\n# Template structure (v2):\n# {\n# \"version\": 2,\n# \"name\": \"poll-name\",\n# \"description\": \"What is this poll about?\",\n# \"options\": [\"yes\", \"no\", \"abstain\"],\n# \"deadline\": \"2026-03-01T00:00:00.000Z\"\n# }\nnpx @didcid/keymaster create-poll-template\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":745,"content_sha256":"e5eef2a3e9b8efc22da1812155b90154f4570e99ee18295ea70044c386f2d3d7"},{"filename":"scripts/polls/create-poll.sh","content":"#!/bin/bash\n# Create a poll from a JSON file\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-file.json> [options]\"\n echo \"\"\n echo \"Create a poll from a JSON template file\"\n echo \"\"\n echo \"Options:\"\n echo \" --alias TEXT DID alias\"\n echo \" --registry TEXT Registry URL (default: hyperswarm)\"\n echo \"\"\n echo \"Generate a template with: create-poll-template.sh > poll.json\"\n echo \"\"\n echo \"Template structure (v2):\"\n echo ' {'\n echo ' \"version\": 2,'\n echo ' \"name\": \"poll-name\",'\n echo ' \"description\": \"What is this poll about?\",'\n echo ' \"options\": [\"yes\", \"no\", \"abstain\"],'\n echo ' \"deadline\": \"2026-03-01T00:00:00.000Z\"'\n echo ' }'\n echo \"\"\n echo \"After creating the poll, add voters with add-poll-voter.sh\"\n exit 1\nfi\n\nPOLL_FILE=$1\nshift\n\nif [ ! -f \"$POLL_FILE\" ]; then\n echo \"Error: Poll file not found: $POLL_FILE\"\n exit 1\nfi\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Create poll\necho \"Creating poll from $POLL_FILE...\"\nnpx @didcid/keymaster create-poll \"$POLL_FILE\" \"$@\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1406,"content_sha256":"27221357f461f7f553471e94cb846685fd5b0ce080e8c8c8ed7dec1001acac0b"},{"filename":"scripts/polls/list-poll-voters.sh","content":"#!/bin/bash\n# List eligible voters in a poll\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"List all eligible voters in a poll\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# List voters\nnpx @didcid/keymaster list-poll-voters \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":698,"content_sha256":"cf502cc2ed267f0e593f6c7007eb1f8ea7723f00499bbba32b7b00efba18cc57"},{"filename":"scripts/polls/publish-poll.sh","content":"#!/bin/bash\n# Publish poll results (hiding individual ballots)\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"Publish poll results while keeping individual ballots hidden\"\n echo \"\"\n echo \"For transparent voting, use reveal-poll.sh instead\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Publish results\necho \"Publishing poll results (ballots hidden)...\"\nnpx @didcid/keymaster publish-poll \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":867,"content_sha256":"58b3287976fb8d341d0a9c8124d031abbbdd795652bffc117445de109faeb467"},{"filename":"scripts/polls/remove-poll-voter.sh","content":"#!/bin/bash\n# Remove a voter from a poll\n\nset -e\n\nif [ -z \"$1\" ] || [ -z \"$2\" ]; then\n echo \"Usage: $0 \u003cpoll-did> \u003cvoter-did>\"\n echo \"\"\n echo \"Remove a voter from a poll's eligible voter list\"\n echo \"\"\n echo \"Arguments:\"\n echo \" poll-did DID of the poll\"\n echo \" voter-did DID of the voter to remove\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier... did:cid:bagaaierb...\"\n exit 1\nfi\n\nPOLL_DID=$1\nVOTER_DID=$2\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Remove voter\necho \"Removing voter from poll...\"\nnpx @didcid/keymaster remove-poll-voter \"$POLL_DID\" \"$VOTER_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":944,"content_sha256":"19a2ccd6d63f4ec44867149a74ddff7031f2fbe41fd54fcc18949215dc2e162c"},{"filename":"scripts/polls/reveal-poll.sh","content":"#!/bin/bash\n# Reveal poll results (showing individual ballots)\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"Publish poll results with individual ballots visible\"\n echo \"\"\n echo \"For private voting, use publish-poll.sh instead\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Reveal results\necho \"Revealing poll results (ballots visible)...\"\nnpx @didcid/keymaster reveal-poll \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":854,"content_sha256":"8159e0c45fafcb27f06f75993cbb164cdb0900a3162273be254a934d4890378d"},{"filename":"scripts/polls/send-ballot.sh","content":"#!/bin/bash\n# Send a ballot to the poll owner\n\nset -e\n\nif [ -z \"$1\" ] || [ -z \"$2\" ]; then\n echo \"Usage: $0 \u003cballot-did> \u003cpoll-did>\"\n echo \"\"\n echo \"Send your ballot to the poll owner for counting\"\n echo \"\"\n echo \"Arguments:\"\n echo \" ballot-did DID of your ballot (from vote-poll.sh)\"\n echo \" poll-did DID of the poll\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaierballot... did:cid:bagaaierpoll...\"\n exit 1\nfi\n\nBALLOT_DID=$1\nPOLL_DID=$2\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Send ballot\necho \"Sending ballot to poll owner...\"\nnpx @didcid/keymaster send-ballot \"$BALLOT_DID\" \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":971,"content_sha256":"97a09f390544c2fb79ce1d8524a7e6f5419f2b044ec52589ff57fb00f151f8ab"},{"filename":"scripts/polls/send-poll.sh","content":"#!/bin/bash\n# Send poll notice to all voters\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"Send a poll notice to all eligible voters\"\n echo \"\"\n echo \"This creates a notice DID that voters can use to find and vote in the poll.\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Send poll notice\necho \"Sending poll notice to all voters...\"\nnpx @didcid/keymaster send-poll \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":846,"content_sha256":"355b6d994f5945fe797ae6e7478e5463459dc36b23186ff95e186809cdd1f2cd"},{"filename":"scripts/polls/unpublish-poll.sh","content":"#!/bin/bash\n# Remove poll results from publication\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"Remove published results from a poll\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Unpublish\necho \"Removing poll results...\"\nnpx @didcid/keymaster unpublish-poll \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":734,"content_sha256":"cf242d90a9236252b046a2584531995b835e3cde2ecf99589cf72243e4fdb5a8"},{"filename":"scripts/polls/update-poll.sh","content":"#!/bin/bash\n# Add a ballot to the poll (poll owner only)\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cballot-did>\"\n echo \"\"\n echo \"Add a received ballot to the poll tally (poll owner only)\"\n echo \"\"\n echo \"This is used by the poll owner to count ballots received from voters.\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaierballot...\"\n exit 1\nfi\n\nBALLOT_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Update poll with ballot\necho \"Adding ballot to poll...\"\nnpx @didcid/keymaster update-poll \"$BALLOT_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":877,"content_sha256":"bcc2c465a72aca35fb1c2c58a3ada6f0db02b1bb7ceecef938e5bab514619469"},{"filename":"scripts/polls/view-ballot.sh","content":"#!/bin/bash\n# View ballot details\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cballot-did>\"\n echo \"\"\n echo \"View details of a ballot\"\n echo \"\"\n echo \"Shows the poll DID, voter DID, and vote (if you have permission to decrypt).\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nBALLOT_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# View ballot\nnpx @didcid/keymaster view-ballot \"$BALLOT_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":778,"content_sha256":"edc189266f401136d9942960488d2b18b3d82f8269a4afd3a48d0e99b5d9c3c3"},{"filename":"scripts/polls/view-poll.sh","content":"#!/bin/bash\n# View poll details\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cpoll-did>\"\n echo \"\"\n echo \"View details of a poll including options and deadline\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier...\"\n exit 1\nfi\n\nPOLL_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# View poll\nnpx @didcid/keymaster view-poll \"$POLL_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":695,"content_sha256":"3e6db81db5a082d6729c21e74bb4a4631d9eb73bdf6e314c7d3c7cc37b6e1cc9"},{"filename":"scripts/polls/vote-poll.sh","content":"#!/bin/bash\n# Vote in a poll\n\nset -e\n\nif [ -z \"$1\" ] || [ -z \"$2\" ]; then\n echo \"Usage: $0 \u003cpoll-did> \u003cvote-index>\"\n echo \"\"\n echo \"Cast a vote in a poll\"\n echo \"\"\n echo \"Arguments:\"\n echo \" poll-did DID of the poll\"\n echo \" vote-index Vote number: 0 = spoil, 1-N = option index\"\n echo \"\"\n echo \"Use view-poll.sh first to see available options and their indices.\"\n echo \"\"\n echo \"Example:\"\n echo \" $0 did:cid:bagaaier... 1 # Vote for first option\"\n echo \" $0 did:cid:bagaaier... 0 # Spoil ballot\"\n exit 1\nfi\n\nPOLL_DID=$1\nVOTE=$2\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Vote\necho \"Casting vote in poll...\"\nnpx @didcid/keymaster vote-poll \"$POLL_DID\" \"$VOTE\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1050,"content_sha256":"79a2da7eb212e4cc0e7508bd3a0880360d6faab4f9e7544e763b515ce400aea3"},{"filename":"scripts/schemas/create-schema.sh","content":"#!/bin/bash\n# Create a verifiable credential schema from a JSON file\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cschema-file.json> [options]\"\n echo \"\"\n echo \"Create a verifiable credential schema\"\n echo \"\"\n echo \"Options:\"\n echo \" --owned Mark schema as owned by creator (default: true)\"\n echo \" --registry TEXT Registry URL (default: hyperswarm)\"\n echo \"\"\n echo \"Example schema file format:\"\n echo '{'\n echo ' \"name\": \"proof-of-human\",'\n echo ' \"description\": \"Verifies human status\",'\n echo ' \"properties\": {'\n echo ' \"credence\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 }'\n echo ' },'\n echo ' \"required\": [\"credence\"]'\n echo '}'\n exit 1\nfi\n\nSCHEMA_FILE=$1\nshift\n\nif [ ! -f \"$SCHEMA_FILE\" ]; then\n echo \"Error: Schema file not found: $SCHEMA_FILE\"\n exit 1\nfi\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Create schema\necho \"Creating schema from $SCHEMA_FILE...\"\nnpx @didcid/keymaster create-schema \"$SCHEMA_FILE\" \"$@\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":1340,"content_sha256":"34d0d274f5988093baa6e531c565801e82dd2720d46480502e97d695e5d0c6ab"},{"filename":"scripts/schemas/get-schema.sh","content":"#!/bin/bash\n# Get a schema by DID or alias\n\nset -e\n\nif [ -z \"$1\" ]; then\n echo \"Usage: $0 \u003cschema-did-or-alias>\"\n echo \"\"\n echo \"Retrieve a schema by its DID or alias\"\n echo \"\"\n echo \"Examples:\"\n echo \" $0 proof-of-human-schema\"\n echo \" $0 did:cid:bagaaiera4yl4xi...\"\n exit 1\nfi\n\nSCHEMA_DID=$1\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# Get schema\nnpx @didcid/keymaster get-schema \"$SCHEMA_DID\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":753,"content_sha256":"d1eb72714ea8b0cac31349c19bcb9d5678632e916e253775ef9e74a8e0da418a"},{"filename":"scripts/schemas/list-schemas.sh","content":"#!/bin/bash\n# List all schemas owned by current DID\n\nset -e\n\n# Ensure environment is loaded\nif [ -z \"$ARCHON_PASSPHRASE\" ]; then\n if [ -f ~/.archon.env ]; then\n source ~/.archon.env\n else\n echo \"Error: ARCHON_PASSPHRASE not set. Run create-id.sh first.\"\n exit 1\n fi\nfi\n\n# Set wallet path\nif [ -z \"$ARCHON_WALLET_PATH\" ]; then\n echo \"Error: ARCHON_WALLET_PATH not set in ~/.archon.env\"\n exit 1\nfi\n\n# List schemas\nnpx @didcid/keymaster list-schemas\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":483,"content_sha256":"3e929c26409c92975b76d51b7e00548ec0e71f97531c99fc26697be9a940d0fb"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Archon Keymaster - Core DID Toolkit","type":"text"}]},{"type":"paragraph","content":[{"text":"Core toolkit for Archon decentralized identities (DIDs). Manages identity lifecycle, encrypted communication, cryptographic operations, and authorization.","type":"text"}]},{"type":"paragraph","content":[{"text":"Related skills:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"archon-vault","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Vault management and encrypted distributed backups","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"archon-cashu","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Cashu ecash with DID-locked tokens","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Capabilities","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Identity Management","type":"text","marks":[{"type":"strong"}]},{"text":" - Create, manage multiple DIDs, recover from mnemonic","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verifiable Credentials","type":"text","marks":[{"type":"strong"}]},{"text":" - Create schemas, issue/accept/revoke credentials","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Encrypted Messaging (Dmail)","type":"text","marks":[{"type":"strong"}]},{"text":" - Send/receive end-to-end encrypted messages between DIDs","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Nostr Integration","type":"text","marks":[{"type":"strong"}]},{"text":" - Derive Nostr keypairs from your DID (same secp256k1 key)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"File Encryption","type":"text","marks":[{"type":"strong"}]},{"text":" - Encrypt files for specific DIDs","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Digital Signatures","type":"text","marks":[{"type":"strong"}]},{"text":" - Sign and verify files with your DID","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DID Aliasing","type":"text","marks":[{"type":"strong"}]},{"text":" - Friendly names for DIDs (contacts, schemas, credentials)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Authorization","type":"text","marks":[{"type":"strong"}]},{"text":" - Challenge/response verification between DIDs","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Groups","type":"text","marks":[{"type":"strong"}]},{"text":" - Create and manage DID groups for access control and multi-party operations","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Polls","type":"text","marks":[{"type":"strong"}]},{"text":" - Cryptographic voting with transparent or secret ballots","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Assets","type":"text","marks":[{"type":"strong"}]},{"text":" - Store and retrieve content-addressed assets in the registry","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Prerequisites","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Node.js installed (for ","type":"text"},{"text":"npx @didcid/keymaster","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Environment: ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" with:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_WALLET_PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":" - path to your wallet file (required)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_PASSPHRASE","type":"text","marks":[{"type":"code_inline"}]},{"text":" - wallet encryption passphrase (required)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_GATEKEEPER_URL","type":"text","marks":[{"type":"code_inline"}]},{"text":" - gatekeeper endpoint (optional, defaults to public)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"All created automatically by ","type":"text"},{"text":"create-id.sh","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Security Notes","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill handles cryptographic identity operations:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Passphrase in environment","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"ARCHON_PASSPHRASE","type":"text","marks":[{"type":"code_inline"}]},{"text":" is stored in ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" for non-interactive script execution. The file should be ","type":"text"},{"text":"chmod 600","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Sensitive files accessed","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"~/.archon.wallet.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" — encrypted wallet containing DID private keys","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" — wallet encryption passphrase","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Network","type":"text","marks":[{"type":"strong"}]},{"text":": Data is encrypted before transmission to Archon gatekeeper/hyperswarm. Only intended recipients can decrypt.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Key recovery","type":"text","marks":[{"type":"strong"}]},{"text":": Your 12-word mnemonic is the master recovery key. Store it offline, never in digital form.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Start","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"First-Time Setup","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/identity/create-id.sh [wallet-path]","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates your first DID, generates passphrase, saves to ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Default wallet location: ","type":"text"},{"text":"~/.archon.wallet.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"You can specify a custom path: ","type":"text"},{"text":"./scripts/identity/create-id.sh ~/my-wallet.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Write down your 12-word mnemonic","type":"text","marks":[{"type":"strong"}]},{"text":" - it's your master recovery key.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Load Environment","type":"text"}]},{"type":"paragraph","content":[{"text":"All scripts require ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" to be configured. Simply run:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"source ~/.archon.env","type":"text"}]},{"type":"paragraph","content":[{"text":"The environment file sets ","type":"text"},{"text":"ARCHON_WALLET_PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"ARCHON_PASSPHRASE","type":"text","marks":[{"type":"code_inline"}]},{"text":". Scripts will error if these are not set.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Identity Management","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Additional Identity","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/identity/create-additional-id.sh \u003cname>","type":"text"}]},{"type":"paragraph","content":[{"text":"Create pseudonymous personas or role-separated identities (all share same mnemonic).","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"List All DIDs","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/identity/list-ids.sh","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Switch Active Identity","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/identity/switch-id.sh \u003cname>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Recovery","type":"text"}]},{"type":"paragraph","content":[{"text":"For disaster recovery and vault restore operations, see the ","type":"text"},{"text":"archon-backup","type":"text","marks":[{"type":"code_inline"}]},{"text":" skill.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Verifiable Credential Schemas","type":"text"}]},{"type":"paragraph","content":[{"text":"Create and manage schemas for verifiable credentials.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Schema","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/schemas/create-schema.sh \u003cschema-file.json>","type":"text"}]},{"type":"paragraph","content":[{"text":"Create a credential schema from a JSON file.","type":"text"}]},{"type":"paragraph","content":[{"text":"Example schema (proof-of-human.json):","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$credentialContext\": [\n \"https://www.w3.org/ns/credentials/v2\",\n \"https://archetech.com/schemas/credentials/agent/v1\"\n ],\n \"$credentialType\": [\n \"VerifiableCredential\",\n \"AgentCredential\",\n \"ProofOfHumanCredential\"\n ],\n \"name\": \"proof-of-human\",\n \"description\": \"Verifies human status\",\n \"properties\": {\n \"credence\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1,\n \"description\": \"Confidence level (0-1) that subject is human\"\n }\n },\n \"required\": [\"credence\"]\n}","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/schemas/create-schema.sh proof-of-human.json\n# Returns: did:cid:bagaaiera4yl4xi...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"List Your Schemas","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/schemas/list-schemas.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Lists all schemas you own.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Get Schema","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/schemas/get-schema.sh \u003cschema-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Retrieve schema definition by DID or alias.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Verifiable Credentials","type":"text"}]},{"type":"paragraph","content":[{"text":"Issue, accept, and manage verifiable credentials.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Issuing Credentials (3-step process)","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"1. Bind Credential to Subject","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/bind-credential.sh \u003cschema-did-or-alias> \u003csubject-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates a bound credential template file for the subject.","type":"text"}]},{"type":"paragraph","content":[{"text":"Example:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/bind-credential.sh proof-of-human-schema alice\n# Creates: bagaaierb...BOUND.json (subject DID without 'did:cid:' prefix)","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"2. Fill in Credential Data","type":"text"}]},{"type":"paragraph","content":[{"text":"Edit the ","type":"text"},{"text":".BOUND.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" file and fill in the ","type":"text"},{"text":"credentialSubject","type":"text","marks":[{"type":"code_inline"}]},{"text":" data:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"credentialSubject\": {\n \"id\": \"did:cid:bagaaierb...\",\n \"credence\": 0.97\n }\n}","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"3. Issue Credential","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/issue-credential.sh \u003cbound-file.json>","type":"text"}]},{"type":"paragraph","content":[{"text":"Signs and encrypts the credential. Returns the credential DID. The underlying ","type":"text"},{"text":"@didcid/keymaster","type":"text","marks":[{"type":"code_inline"}]},{"text":" command may save output files - refer to Keymaster documentation for exact file output behavior.","type":"text"}]},{"type":"paragraph","content":[{"text":"Example:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/issue-credential.sh bagaaierb...BOUND.json\n# Returns credential DID: did:cid:bagaaierc...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Accepting Credentials","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/accept-credential.sh \u003ccredential-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Accept and save a credential issued to you.","type":"text"}]},{"type":"paragraph","content":[{"text":"Example:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/accept-credential.sh did:cid:bagaaierc...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Managing Credentials","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"List Your Credentials","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/list-credentials.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Lists all credentials you've received.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"List Issued Credentials","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/list-issued.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Lists all credentials you've issued to others.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Get Credential","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/get-credential.sh \u003ccredential-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Retrieve full credential details.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Publishing & Revoking","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Publish Credential","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/publish-credential.sh \u003ccredential-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Add credential to your public DID manifest (makes it visible to others).","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Revoke Credential","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/credentials/revoke-credential.sh \u003ccredential-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Revoke a credential you issued (invalidates it).","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Complete Example: Issuing Proof-of-Human","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 1. Create schema\n./scripts/schemas/create-schema.sh proof-of-human.json\n# Returns: did:cid:bagaaiera4yl4xi...\n\n# 2. Add alias for convenience\n./scripts/aliases/add-alias.sh proof-of-human-schema did:cid:bagaaiera4yl4xi...\n\n# 3. Bind credential to Alice\n./scripts/credentials/bind-credential.sh proof-of-human-schema alice\n# Creates: bagaaierb...BOUND.json (alice's DID without prefix)\n\n# 4. Edit file, set credence: 0.97\n\n# 5. Issue credential\n./scripts/credentials/issue-credential.sh bagaaierb...BOUND.json\n# Returns: did:cid:bagaaierc...\n\n# 6. Alice accepts it\n./scripts/credentials/accept-credential.sh did:cid:bagaaierc...\n\n# 7. Alice publishes to her manifest\n./scripts/credentials/publish-credential.sh did:cid:bagaaierc...","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Encrypted Messaging (Dmail)","type":"text"}]},{"type":"paragraph","content":[{"text":"End-to-end encrypted messages between DIDs with attachment support.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Send Message","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/send.sh \u003crecipient-did-or-alias> \u003csubject> \u003cbody> [cc-did...]","type":"text"}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/send.sh alice \"Meeting\" \"Let's sync tomorrow\"\n./scripts/messaging/send.sh did:cid:bag... \"Update\" \"Status report\" did:cid:bob...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Check Inbox","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/refresh.sh # Poll for new messages\n./scripts/messaging/list.sh # List inbox\n./scripts/messaging/list.sh unread # Filter unread","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Read Message","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/read.sh \u003cdmail-did>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Reply/Forward/Archive","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/reply.sh \u003cdmail-did> \u003cbody>\n./scripts/messaging/forward.sh \u003cdmail-did> \u003crecipient-did> [body]\n./scripts/messaging/archive.sh \u003cdmail-did>\n./scripts/messaging/delete.sh \u003cdmail-did>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Attachments","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/attach.sh \u003cdmail-did> \u003cfile-path>\n./scripts/messaging/get-attachment.sh \u003cdmail-did> \u003cattachment-name> \u003coutput-path>","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Nostr Integration","type":"text"}]},{"type":"paragraph","content":[{"text":"Derive Nostr identity from your DID - same secp256k1 key, two protocols.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Prerequisites","type":"text"}]},{"type":"paragraph","content":[{"text":"Install ","type":"text"},{"text":"nak","type":"text","marks":[{"type":"code_inline"}]},{"text":" CLI:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Derive Nostr Keys","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/nostr/derive-nostr.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Outputs ","type":"text"},{"text":"nsec","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"npub","type":"text","marks":[{"type":"code_inline"}]},{"text":", and hex pubkey (derived from ","type":"text"},{"text":"m/44'/0'/0'/0/0","type":"text","marks":[{"type":"code_inline"}]},{"text":").","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Save Keys","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"mkdir -p ~/.clawstr\necho \"nsec1...\" > ~/.clawstr/secret.key\nchmod 600 ~/.clawstr/secret.key","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Publish Nostr Profile","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"echo '{\n \"kind\": 0,\n \"content\": \"{\\\"name\\\":\\\"YourName\\\",\\\"about\\\":\\\"Your bio. DID: did:cid:...\\\"}\"\n}' | nak event --sec $(cat ~/.clawstr/secret.key) \\\n wss://relay.ditto.pub wss://relay.primal.net wss://relay.damus.io wss://nos.lol","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Update DID with Nostr Identity","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"npx @didcid/keymaster set-property YourIdName nostr \\\n '{\"npub\":\"npub1...\",\"pubkey\":\"\u003chex-pubkey>\"}'","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"File Encryption & Signatures","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Encrypt Files","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/crypto/encrypt-file.sh \u003cinput-file> \u003crecipient-did-or-alias>\n./scripts/crypto/encrypt-message.sh \u003cmessage> \u003crecipient-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Returns encrypted DID (stored on-chain/IPFS). Only recipient can decrypt.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Decrypt Files","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/crypto/decrypt-file.sh \u003cencrypted-did> \u003coutput-file>\n./scripts/crypto/decrypt-message.sh \u003cencrypted-did>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Sign Files (Proof of Authorship)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/crypto/sign-file.sh \u003cfile.json>","type":"text"}]},{"type":"paragraph","content":[{"text":"Important:","type":"text","marks":[{"type":"strong"}]},{"text":" File must be JSON. Adds ","type":"text"},{"text":"proof","type":"text","marks":[{"type":"code_inline"}]},{"text":" section with signature.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Verify Signatures","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/crypto/verify-file.sh \u003cfile.json>","type":"text"}]},{"type":"paragraph","content":[{"text":"Shows who signed it, when, and whether content was tampered with.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"DID Aliasing","type":"text"}]},{"type":"paragraph","content":[{"text":"Friendly names for DIDs - use \"alice\" instead of ","type":"text"},{"text":"did:cid:bagaaiera...","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Add Alias","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/aliases/add-alias.sh \u003calias> \u003cdid>","type":"text"}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/aliases/add-alias.sh alice did:cid:bagaaiera...\n./scripts/aliases/add-alias.sh proof-of-human-schema did:cid:bagaaiera4yl4xi...\n./scripts/aliases/add-alias.sh backup-vault did:cid:bagaaierab...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Resolve Alias","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/aliases/resolve-did.sh \u003calias-or-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Pass-through safe (returns DID unchanged if you pass a DID).","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"List/Remove Aliases","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/aliases/list-aliases.sh\n./scripts/aliases/remove-alias.sh \u003calias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Note:","type":"text","marks":[{"type":"strong"}]},{"text":" Aliases work in most Keymaster commands and all encryption/messaging scripts.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Asset Management","type":"text"}]},{"type":"paragraph","content":[{"text":"Store and retrieve assets (files, images, documents, JSON data) in the distributed registry. Assets are content-addressed (DIDs) and support binary data via base64 encoding.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"List Assets","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/list-assets.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Lists all asset DIDs in the registry.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Assets","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"From JSON Data (inline)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/create-asset.sh '{\"type\":\"document\",\"title\":\"My Doc\",\"content\":\"...\"}'","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"From JSON File","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/create-asset-json.sh document.json","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"From File (any type)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/create-asset-file.sh document.pdf application/pdf","type":"text"}]},{"type":"paragraph","content":[{"text":"Encodes file as base64 with metadata (filename, content-type).","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"From Image","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/create-asset-image.sh avatar.png","type":"text"}]},{"type":"paragraph","content":[{"text":"Auto-detects image type (png/jpg/gif/webp/svg) and encodes with metadata.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Retrieve Assets","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Get Asset (raw JSON)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/get-asset.sh did:cid:bagaaiera...","type":"text"}]},{"type":"paragraph","content":[{"text":"Returns raw asset data.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Get Asset as JSON","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/get-asset-json.sh did:cid:bagaaiera...","type":"text"}]},{"type":"paragraph","content":[{"text":"Pretty-prints asset data.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Get File Asset","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/get-asset-file.sh did:cid:bagaaiera... [output-path]","type":"text"}]},{"type":"paragraph","content":[{"text":"Decodes base64 and saves to disk. Auto-detects filename if no output path provided.","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Get Image Asset","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/get-asset-image.sh did:cid:bagaaiera... [output-path]","type":"text"}]},{"type":"paragraph","content":[{"text":"Decodes base64 and saves image. Auto-detects filename if no output path provided.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Update Assets","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Update with JSON Data","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/update-asset.sh did:cid:bagaaiera... '{\"updated\":true}'","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Update with JSON File","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/update-asset-json.sh did:cid:bagaaiera... updated.json","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Update with File","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/update-asset-file.sh did:cid:bagaaiera... newdoc.pdf application/pdf","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"Update with Image","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/update-asset-image.sh did:cid:bagaaiera... newavatar.png","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Transfer Assets","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/assets/transfer-asset.sh did:cid:bagaaiera... did:cid:bagaaierat...","type":"text"}]},{"type":"paragraph","content":[{"text":"Transfer asset ownership to another DID.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Use Cases","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skill Packages","type":"text","marks":[{"type":"strong"}]},{"text":": Store SKILL.md + scripts as signed assets","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Profile Media","type":"text","marks":[{"type":"strong"}]},{"text":": Avatar images, banners","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Documents","type":"text","marks":[{"type":"strong"}]},{"text":": PDFs, markdown files, archives","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Data Sets","type":"text","marks":[{"type":"strong"}]},{"text":": JSON datasets, configuration files","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Shared Resources","type":"text","marks":[{"type":"strong"}]},{"text":": Transfer assets between DIDs for collaboration","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Groups","type":"text"}]},{"type":"paragraph","content":[{"text":"Manage collections of DIDs for access control, multi-party operations, and organizational structure.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Group","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/create-group.sh \u003cgroup-name>","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates a group and automatically aliases it by name.","type":"text"}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/create-group.sh research-team\n./scripts/groups/create-group.sh archetech-devs","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Add/Remove Members","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/add-member.sh \u003cgroup> \u003cmember-did-or-alias>\n./scripts/groups/remove-member.sh \u003cgroup> \u003cmember-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/add-member.sh research-team did:cid:bagaaiera...\n./scripts/groups/add-member.sh devs alice\n./scripts/groups/remove-member.sh devs alice","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"List Groups","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/list-groups.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Lists all groups owned by your current identity.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Get Group Details","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/get-group.sh \u003cgroup-did-or-alias>","type":"text"}]},{"type":"paragraph","content":[{"text":"Shows group metadata and membership.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Test Membership","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/test-member.sh \u003cgroup> [member]","type":"text"}]},{"type":"paragraph","content":[{"text":"If member is omitted, tests whether your current identity is in the group.","type":"text"}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/groups/test-member.sh research-team # Am I in this group?\n./scripts/groups/test-member.sh research-team alice # Is alice in this group?","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Use Cases","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Access control","type":"text","marks":[{"type":"strong"}]},{"text":" - Encrypt files for a group, all members can decrypt","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Team management","type":"text","marks":[{"type":"strong"}]},{"text":" - Organize DIDs by role or project","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Multi-party workflows","type":"text","marks":[{"type":"strong"}]},{"text":" - Define who can participate in group operations","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Authorization","type":"text"}]},{"type":"paragraph","content":[{"text":"Challenge/response flow for verifying a DID controls its private key. Used for agent-to-agent authentication, access control, and proof-of-identity workflows.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create a Challenge","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Create a basic challenge\n./scripts/auth/create-challenge.sh\n\n# Create a challenge as a specific DID alias\n./scripts/auth/create-challenge.sh --alias myDID\n\n# Create a challenge from a file\n./scripts/auth/create-challenge.sh challenge-template.json\n\n# Create a challenge tied to a specific credential\n./scripts/auth/create-challenge-cc.sh did:cid:bagaaiera...","type":"text"}]},{"type":"paragraph","content":[{"text":"Output: a challenge DID (e.g., ","type":"text"},{"text":"did:cid:bagaaiera...","type":"text","marks":[{"type":"code_inline"}]},{"text":") that the responder must sign.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create a Response","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"CHALLENGE=\"did:cid:bagaaiera...\"\n./scripts/auth/create-response.sh \"$CHALLENGE\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Output: a response DID containing a signed proof.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Verify a Response","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"RESPONSE=\"did:cid:bagaaiera...\"\n./scripts/auth/verify-response.sh \"$RESPONSE\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Output:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"challenge\": \"did:cid:...\",\n \"credentials\": [],\n \"requested\": 0,\n \"fulfilled\": 0,\n \"match\": true,\n \"responder\": \"did:cid:...\"\n}","type":"text"}]},{"type":"paragraph","content":[{"text":"match: true","type":"text","marks":[{"type":"code_inline"}]},{"text":" means the response is valid and cryptographically verified.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Complete Authorization Flow","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Challenger creates a challenge\nCHALLENGE=$(./scripts/auth/create-challenge.sh)\n\n# Responder creates a response (proves they control their DID)\nRESPONSE=$(./scripts/auth/create-response.sh \"$CHALLENGE\")\n\n# Challenger verifies the response\n./scripts/auth/verify-response.sh \"$RESPONSE\"\n# → {\"match\": true, \"responder\": \"did:cid:...\", ...}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Polls","type":"text"}]},{"type":"paragraph","content":[{"text":"Cryptographically verifiable voting with support for transparent or secret ballots. Voters are added directly to polls (no separate roster required).","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Poll Template","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/create-poll-template.sh","type":"text"}]},{"type":"paragraph","content":[{"text":"Outputs a v2 template JSON:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"version\": 2,\n \"name\": \"poll-name\",\n \"description\": \"What is this poll about?\",\n \"options\": [\"yes\", \"no\", \"abstain\"],\n \"deadline\": \"2026-03-01T00:00:00.000Z\"\n}","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Create Poll","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/create-poll.sh \u003cpoll-file.json> [options]","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates a poll from a JSON template file. Returns poll DID.","type":"text"}]},{"type":"paragraph","content":[{"text":"Options:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--alias TEXT","type":"text","marks":[{"type":"code_inline"}]},{"text":" - DID alias for the poll","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"--registry TEXT","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Registry URL (default: hyperswarm)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Example:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Create poll template\n./scripts/polls/create-poll-template.sh > my-poll.json\n\n# Edit poll (set name, description, options, deadline)\nvi my-poll.json\n\n# Create the poll\n./scripts/polls/create-poll.sh my-poll.json\n# Returns: did:cid:bagaaiera...","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Manage Voters","type":"text"}]},{"type":"paragraph","content":[{"text":"Add, remove, or list eligible voters for a poll:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Add a voter\n./scripts/polls/add-poll-voter.sh \u003cpoll-did> \u003cvoter-did>\n\n# Remove a voter\n./scripts/polls/remove-poll-voter.sh \u003cpoll-did> \u003cvoter-did>\n\n# List all eligible voters\n./scripts/polls/list-poll-voters.sh \u003cpoll-did>","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Vote in Poll","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/vote-poll.sh \u003cpoll-did> \u003cvote-index>","type":"text"}]},{"type":"paragraph","content":[{"text":"Cast a vote in a poll. Returns a ballot DID.","type":"text"}]},{"type":"paragraph","content":[{"text":"Arguments:","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"poll-did","type":"text","marks":[{"type":"code_inline"}]},{"text":" - DID of the poll","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"vote-index","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Vote number: 0 = spoil, 1-N = option index","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Examples:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# View poll first to see options\n./scripts/polls/view-poll.sh did:cid:bagaaiera...\n# Options: 1=yes, 2=no, 3=abstain\n\n# Cast a vote for \"yes\" (option 1)\n./scripts/polls/vote-poll.sh did:cid:bagaaiera... 1\n# Returns: did:cid:bagaaierballot...\n\n# Spoil ballot (vote 0)\n./scripts/polls/vote-poll.sh did:cid:bagaaiera... 0","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Ballot Workflow","type":"text"}]},{"type":"paragraph","content":[{"text":"For distributed voting (voters not directly connected to poll owner):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Voter creates and sends ballot\nBALLOT=$(./scripts/polls/vote-poll.sh \"$POLL\" 1)\n./scripts/polls/send-ballot.sh \"$BALLOT\" \"$POLL\"\n\n# Poll owner receives and adds ballot\n./scripts/polls/update-poll.sh \"$BALLOT\"\n\n# View ballot details\n./scripts/polls/view-ballot.sh \"$BALLOT\"","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Send Poll Notice","type":"text"}]},{"type":"paragraph","content":[{"text":"Notify all voters about a poll:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/send-poll.sh \u003cpoll-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Creates a notice DID that voters can use to find and vote in the poll.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"View Poll","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/view-poll.sh \u003cpoll-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"View poll details including options (with indices), deadline, and (if published) results.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Publish Poll Results","type":"text"}]},{"type":"paragraph","content":[{"text":"Two options for publishing results:","type":"text"}]},{"type":"paragraph","content":[{"text":"Secret ballots (default):","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/publish-poll.sh \u003cpoll-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Publishes aggregate results while hiding individual votes.","type":"text"}]},{"type":"paragraph","content":[{"text":"Transparent ballots:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/reveal-poll.sh \u003cpoll-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Publishes results with individual ballots visible (who voted for what).","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Unpublish Poll Results","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/polls/unpublish-poll.sh \u003cpoll-did>","type":"text"}]},{"type":"paragraph","content":[{"text":"Remove published results from a poll.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Complete Polling Example","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 1. Create poll template\n./scripts/polls/create-poll-template.sh > team-vote.json\n\n# 2. Edit poll:\n# {\n# \"version\": 2,\n# \"name\": \"proposal-vote\",\n# \"description\": \"Should we adopt the new proposal?\",\n# \"options\": [\"approve\", \"reject\", \"defer\"],\n# \"deadline\": \"2026-03-01T00:00:00.000Z\"\n# }\n\n# 3. Create the poll\nPOLL=$(./scripts/polls/create-poll.sh team-vote.json)\necho \"Poll created: $POLL\"\n\n# 4. Add eligible voters\n./scripts/polls/add-poll-voter.sh \"$POLL\" did:cid:alice...\n./scripts/polls/add-poll-voter.sh \"$POLL\" did:cid:bob...\n./scripts/polls/add-poll-voter.sh \"$POLL\" did:cid:carol...\n\n# 5. Notify voters\n./scripts/polls/send-poll.sh \"$POLL\"\n\n# 6. Members vote (1=approve, 2=reject, 3=defer)\n./scripts/polls/vote-poll.sh \"$POLL\" 1 # Alice votes approve\n./scripts/polls/vote-poll.sh \"$POLL\" 2 # Bob votes reject\n./scripts/polls/vote-poll.sh \"$POLL\" 1 # Carol votes approve\n\n# 7. View current status\n./scripts/polls/view-poll.sh \"$POLL\"\n\n# 8. After deadline, publish results (hiding who voted what)\n./scripts/polls/publish-poll.sh \"$POLL\"\n\n# OR publish transparently\n./scripts/polls/reveal-poll.sh \"$POLL\"","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Use Cases","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Governance decisions","type":"text","marks":[{"type":"strong"}]},{"text":" - DAO-style voting with verifiable results","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Team consensus","type":"text","marks":[{"type":"strong"}]},{"text":" - Anonymous feedback or transparent decision-making","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Multi-agent coordination","type":"text","marks":[{"type":"strong"}]},{"text":" - Agents voting on shared resources","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Access control","type":"text","marks":[{"type":"strong"}]},{"text":" - Voting to add/remove group members","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Advanced Usage","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Multiple Identities (Pseudonymous Personas)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/identity/create-additional-id.sh pseudonym\n./scripts/identity/create-additional-id.sh work-persona\n./scripts/identity/switch-id.sh pseudonym","type":"text"}]},{"type":"paragraph","content":[{"text":"Use cases:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Separate personal/work identities","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Anonymous participation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Role-based access control","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Dmail Message Format","type":"text"}]},{"type":"paragraph","content":[{"text":"Dmails are JSON:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"to\": [\"did:cid:recipient1\", \"did:cid:recipient2\"],\n \"cc\": [\"did:cid:cc-recipient\"],\n \"subject\": \"Subject line\",\n \"body\": \"Message body\",\n \"reference\": \"did:cid:original-message\"\n}","type":"text"}]},{"type":"paragraph","content":[{"text":"Direct Keymaster commands:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"npx @didcid/keymaster create-dmail message.json\nnpx @didcid/keymaster send-dmail \u003cdmail-did>\nnpx @didcid/keymaster file-dmail \u003cdmail-did> \"inbox,important\"","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Signature Verification","type":"text"}]},{"type":"paragraph","content":[{"text":"Signed files include proof:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"data\": {\"your\": \"content\"},\n \"proof\": {\n \"type\": \"EcdsaSecp256k1Signature2019\",\n \"created\": \"2026-02-10T20:41:26.323Z\",\n \"verificationMethod\": \"did:cid:bagaaiera...#key-1\",\n \"proofValue\": \"wju2GCn0QweP4bH6...\"\n }\n}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Security Notes","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Cryptographic Security","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Mnemonic is master key","type":"text","marks":[{"type":"strong"}]},{"text":" - Store offline, write down, never digital","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Passphrase encrypts wallet","type":"text","marks":[{"type":"strong"}]},{"text":" - Protects wallet.json on disk","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Aliases are local","type":"text","marks":[{"type":"strong"}]},{"text":" - Not shared, fully decentralized","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Dmail is end-to-end encrypted","type":"text","marks":[{"type":"strong"}]},{"text":" - Only sender/recipients can read","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Signatures are non-repudiable","type":"text","marks":[{"type":"strong"}]},{"text":" - Can't deny creating valid signature","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Backups persist","type":"text","marks":[{"type":"strong"}]},{"text":" - As long as any hyperswarm node retains them","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Data Access Disclosure","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill accesses sensitive data by design:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Data","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Scripts","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Purpose","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.archon.wallet.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"All scripts","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Contains encrypted private keys","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"All scripts","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Contains ","type":"text"},{"text":"ARCHON_PASSPHRASE","type":"text","marks":[{"type":"code_inline"}]},{"text":" for non-interactive use","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"~/.clawstr/secret.key","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Nostr scripts","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Stores derived Nostr private key","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Environment Variables","type":"text"}]},{"type":"paragraph","content":[{"text":"The following are set in ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_WALLET_PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Path to wallet file","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_PASSPHRASE","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Wallet decryption passphrase (sensitive!)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ARCHON_GATEKEEPER_URL","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Optional, defaults to public gatekeeper","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Important","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"~/.archon.env","type":"text","marks":[{"type":"code_inline"}]},{"text":" contains your passphrase in plaintext for script automation. Ensure:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"chmod 600 ~/.archon.env # Owner read/write only","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Network Transmission","type":"text"}]},{"type":"paragraph","content":[{"text":"Scripts connect to:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"https://archon.technology","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Public gatekeeper (default)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"localhost:4224","type":"text","marks":[{"type":"code_inline"}]},{"text":" - Local gatekeeper (if configured)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Hyperswarm DHT - Distributed storage network","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"All transmitted data is encrypted. No plaintext secrets leave your machine","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Troubleshooting","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Wallet/Passphrase Issues","type":"text"}]},{"type":"paragraph","content":[{"text":"\"Cannot read wallet\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"source ~/.archon.env\nls -la ~/clawd/wallet.json","type":"text"}]},{"type":"paragraph","content":[{"text":"\"Permission denied\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"chmod 600 ~/.archon.env","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Encryption/Signing","type":"text"}]},{"type":"paragraph","content":[{"text":"\"Cannot decrypt\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ensure message was encrypted for YOUR DID","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Check passphrase is correct","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"\"Signature verification failed\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"File modified after signing","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Signer's DID may be revoked","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Dmail","type":"text"}]},{"type":"paragraph","content":[{"text":"\"Messages not arriving\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"./scripts/messaging/refresh.sh # Poll for new messages","type":"text"}]},{"type":"paragraph","content":[{"text":"\"Recipient can't decrypt\":","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use correct recipient DID (not alias on their side)","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"References","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Archon documentation: https://github.com/archetech/archon","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Keymaster reference: https://github.com/archetech/archon/tree/main/keymaster","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"W3C DID specification: https://www.w3.org/TR/did-core/","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"archon-keymaster","author":"@skillopedia","source":{"stars":2012,"repo_name":"openclaw-master-skills","origin_url":"https://github.com/leoyeai/openclaw-master-skills/blob/HEAD/skills/archon-keymaster/SKILL.md","repo_owner":"leoyeai","body_sha256":"b05511a4bec8efa1b2f290779e61f4fbcdc406cb89d06e037deaff743926134d","cluster_key":"5b5bed30f4c08f57422d0430ec8eea1a338bcfea6775dd48a1070c3d03ab8b7c","clean_bundle":{"format":"clean-skill-bundle-v1","source":"leoyeai/openclaw-master-skills/skills/archon-keymaster/SKILL.md","attachments":[{"id":"52c0fa4e-23ae-5b3b-8133-b1507048cadd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/52c0fa4e-23ae-5b3b-8133-b1507048cadd/attachment.md","path":"README.md","size":10324,"sha256":"430c61d3c764c02ae227e42f51dea3e19d70fa87e74dd0780f231acdaca7be8b","contentType":"text/markdown; charset=utf-8"},{"id":"33358f14-76ee-55e9-86ff-989eceea8a70","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/33358f14-76ee-55e9-86ff-989eceea8a70/attachment.json","path":"_meta.json","size":286,"sha256":"93abbdffe3dca2c08ef3dc87bfc49029b2b59b4c4da98bbcd5a2deb01a18478f","contentType":"application/json; charset=utf-8"},{"id":"dba9bbdf-9064-5e1e-b35f-976b4672b982","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dba9bbdf-9064-5e1e-b35f-976b4672b982/attachment.sh","path":"scripts/aliases/add-alias.sh","size":780,"sha256":"fc392917b7ee71c0abc926a44711e124f560d1e28643b66794c27b04d814190b","contentType":"application/x-sh; charset=utf-8"},{"id":"ecd3fe0b-df72-54a8-993a-6effdf674772","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ecd3fe0b-df72-54a8-993a-6effdf674772/attachment.sh","path":"scripts/aliases/list-aliases.sh","size":411,"sha256":"39330c851a8314e446090deef14b3b36b8db02491b87bf5bc645e05ebd147e7a","contentType":"application/x-sh; charset=utf-8"},{"id":"b5ae9336-5cd6-56df-af20-c893b4b3e332","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b5ae9336-5cd6-56df-af20-c893b4b3e332/attachment.sh","path":"scripts/aliases/remove-alias.sh","size":480,"sha256":"b7b02f521f364b31d5da0dd655a5f7db192a1c970b1fc26298144d856ed72605","contentType":"application/x-sh; charset=utf-8"},{"id":"6aa9db50-bd77-530e-9f11-3c776fbf295c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6aa9db50-bd77-530e-9f11-3c776fbf295c/attachment.sh","path":"scripts/aliases/resolve-did.sh","size":541,"sha256":"eac9087ab7d85f696fb944d70d51c1bda5757749ac2e5d35a8e6a39001168e8a","contentType":"application/x-sh; charset=utf-8"},{"id":"48a41535-5a75-5e2b-a84b-aefda42b87d4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/48a41535-5a75-5e2b-a84b-aefda42b87d4/attachment.sh","path":"scripts/assets/create-asset-file.sh","size":805,"sha256":"363d500af55f8f3f7e0eef651c46cb84740e98f4a4f375ef229f1f097aed09f6","contentType":"application/x-sh; charset=utf-8"},{"id":"482c524a-fb5d-57da-98e6-566ce83dad7c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/482c524a-fb5d-57da-98e6-566ce83dad7c/attachment.sh","path":"scripts/assets/create-asset-image.sh","size":818,"sha256":"f94e4028398bb3386f6f1b2058fb5cf6b1af1ef714221688a545b6617b1736f9","contentType":"application/x-sh; charset=utf-8"},{"id":"854dec7a-2ce0-5309-9196-25d163ba3583","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/854dec7a-2ce0-5309-9196-25d163ba3583/attachment.sh","path":"scripts/assets/create-asset-json.sh","size":817,"sha256":"ed8c345e5d47f014995d457f03ce81ed961b705424d00d32a885a519b413bcf1","contentType":"application/x-sh; charset=utf-8"},{"id":"fb9fd3a0-1f08-54b0-9483-2ab069ecb0e8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fb9fd3a0-1f08-54b0-9483-2ab069ecb0e8/attachment.sh","path":"scripts/assets/create-asset.sh","size":767,"sha256":"5f8e75d7ef770145d6a5d0bd8e84e16e59a7a0c57e283e8bc170a92c22a0d503","contentType":"application/x-sh; charset=utf-8"},{"id":"5f9984aa-cbd7-5638-ba46-f2998c4b3204","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5f9984aa-cbd7-5638-ba46-f2998c4b3204/attachment.sh","path":"scripts/assets/get-asset-file.sh","size":907,"sha256":"01bc148304e0b2fff8ae4beb7783e4f569a0268d61bddfa21298e02fb788e913","contentType":"application/x-sh; charset=utf-8"},{"id":"da8209d1-ffd7-5871-808d-94d5a9a5bf2f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/da8209d1-ffd7-5871-808d-94d5a9a5bf2f/attachment.sh","path":"scripts/assets/get-asset-image.sh","size":907,"sha256":"0e9fec341c19eccbaeacbee52313b85a3ffa9e870646bd760580c0cb3cd5fe5f","contentType":"application/x-sh; charset=utf-8"},{"id":"19f436fe-7562-5875-9082-b24def9f0232","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/19f436fe-7562-5875-9082-b24def9f0232/attachment.sh","path":"scripts/assets/get-asset-json.sh","size":716,"sha256":"2e0a0c3e2976e7f257f6771df12929fde7da3f2d4cad168425ead95b6f0ca1bf","contentType":"application/x-sh; charset=utf-8"},{"id":"5aac7eec-52d0-57a2-9c8f-7195030e3927","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5aac7eec-52d0-57a2-9c8f-7195030e3927/attachment.sh","path":"scripts/assets/get-asset.sh","size":681,"sha256":"32a2f5ebd1eda877fa282fc3c184d1347e89e15930d33828d277f6dc34e97807","contentType":"application/x-sh; charset=utf-8"},{"id":"2c6b30fd-ef26-5cae-9da0-46e905e0d1c5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2c6b30fd-ef26-5cae-9da0-46e905e0d1c5/attachment.sh","path":"scripts/assets/list-assets.sh","size":475,"sha256":"b6c5924e3ca954e83e97452446f7ab957512901ead47aebd519467fbbf8d8966","contentType":"application/x-sh; charset=utf-8"},{"id":"4221d26e-e078-58d3-96e5-cf21a978e44a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4221d26e-e078-58d3-96e5-cf21a978e44a/attachment.sh","path":"scripts/assets/transfer-asset.sh","size":826,"sha256":"3e7d9b00b89f7ac421a69eaff1cd763ba0ac42e4d4ec3e85eb3157269cddc946","contentType":"application/x-sh; charset=utf-8"},{"id":"97e057b2-45cd-5156-9ec3-926e21375e85","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/97e057b2-45cd-5156-9ec3-926e21375e85/attachment.sh","path":"scripts/assets/update-asset-file.sh","size":898,"sha256":"48632c366c5bbf71ee87b411626e4ab73c83a062d0bfb9b0ae7b5d8c971265d5","contentType":"application/x-sh; charset=utf-8"},{"id":"b916bd97-c788-5330-a4a8-32613f8aee91","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b916bd97-c788-5330-a4a8-32613f8aee91/attachment.sh","path":"scripts/assets/update-asset-image.sh","size":905,"sha256":"6b7d9ade708b8865a89d1b7468af6f6fe2736227839fe07957fde26c16485184","contentType":"application/x-sh; charset=utf-8"},{"id":"12025fb8-107d-5c30-9a1d-e6b1cefc8a4a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/12025fb8-107d-5c30-9a1d-e6b1cefc8a4a/attachment.sh","path":"scripts/assets/update-asset-json.sh","size":906,"sha256":"cd1a7239ae332faf561f14478647aa0e8934f34c6986774c5201fd04f275f8c9","contentType":"application/x-sh; charset=utf-8"},{"id":"a8c9a9d4-cc77-5ac0-bacf-371f0204332c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a8c9a9d4-cc77-5ac0-bacf-371f0204332c/attachment.sh","path":"scripts/assets/update-asset.sh","size":830,"sha256":"601eafb3c9af8c5a77dc488c1df65da97c013f77c79d604af7820dd322389c0c","contentType":"application/x-sh; charset=utf-8"},{"id":"aacbb013-aa40-5ac6-8679-ef95a3860b43","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aacbb013-aa40-5ac6-8679-ef95a3860b43/attachment.sh","path":"scripts/auth/create-challenge-cc.sh","size":795,"sha256":"3d18f277af73d539bfed57a04648a88fef6d53622afd77036e032fe657f4ee52","contentType":"application/x-sh; charset=utf-8"},{"id":"5940583b-f07f-56fb-b2fe-ba3c49403882","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5940583b-f07f-56fb-b2fe-ba3c49403882/attachment.sh","path":"scripts/auth/create-challenge.sh","size":668,"sha256":"b3015c85a9d1ac1ea87ddbaf243b991f45ab6587d2a7fd12ebd9346cb0d7786f","contentType":"application/x-sh; charset=utf-8"},{"id":"a828d1c3-a004-5748-a9c3-eb9dea80cd3b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a828d1c3-a004-5748-a9c3-eb9dea80cd3b/attachment.sh","path":"scripts/auth/create-response.sh","size":805,"sha256":"5444ecde67b2519a8fbdf8fc95713e0a5b380cbbdfa9613e6358fcd314f1a866","contentType":"application/x-sh; charset=utf-8"},{"id":"8ca947e4-8c54-5a74-b722-91995a818305","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8ca947e4-8c54-5a74-b722-91995a818305/attachment.sh","path":"scripts/auth/verify-response.sh","size":799,"sha256":"3f345957e12d673b051406ff31c87f83e1f07f424c0cf00c02413617c01df022","contentType":"application/x-sh; charset=utf-8"},{"id":"b9c92be8-9d9e-55ed-a242-cf2419876b25","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b9c92be8-9d9e-55ed-a242-cf2419876b25/attachment.sh","path":"scripts/credentials/accept-credential.sh","size":926,"sha256":"62b74efd705a75ddf6cb7250f5e1a6f780a09c1703eaabc2b313e6ae5f514635","contentType":"application/x-sh; charset=utf-8"},{"id":"0796268a-74b8-562a-bfe5-8fe6a22291b9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0796268a-74b8-562a-bfe5-8fe6a22291b9/attachment.sh","path":"scripts/credentials/bind-credential.sh","size":1710,"sha256":"4fdee95975315b78e7e83626394d210ed7c6c1be7342b1b6a7f3c86fc09cbcf4","contentType":"application/x-sh; charset=utf-8"},{"id":"2c1aac23-2160-57e4-b4e4-6ab2b214eaa5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2c1aac23-2160-57e4-b4e4-6ab2b214eaa5/attachment.sh","path":"scripts/credentials/get-credential.sh","size":771,"sha256":"6dfce74a5aab6233c18dce51d9e8c918d5317153d138748d5e12fc0e035d376e","contentType":"application/x-sh; charset=utf-8"},{"id":"ac2de566-b860-5913-9727-c1037a80311b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ac2de566-b860-5913-9727-c1037a80311b/attachment.sh","path":"scripts/credentials/issue-credential.sh","size":1175,"sha256":"44df074ebe5e8cfd35f0f9002c2bf4aede462aa6d5881c097327ea5b12eb36bc","contentType":"application/x-sh; charset=utf-8"},{"id":"0ed4cdad-99e0-5532-ad69-9f7ff2869821","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0ed4cdad-99e0-5532-ad69-9f7ff2869821/attachment.sh","path":"scripts/credentials/list-credentials.sh","size":495,"sha256":"960f2979ec217aca35dae925969f4eabb2700aca3e94ee2b6dfbd46663038c13","contentType":"application/x-sh; charset=utf-8"},{"id":"1801b234-90c8-5a29-9bd4-8a798edad67b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1801b234-90c8-5a29-9bd4-8a798edad67b/attachment.sh","path":"scripts/credentials/list-issued.sh","size":498,"sha256":"faff3bd1baff68a1f514ae9fb34a49b234cceb64c2bc9f2265b780736c8a26e7","contentType":"application/x-sh; charset=utf-8"},{"id":"773b9167-3f7b-5e69-974e-29ab51559b0b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/773b9167-3f7b-5e69-974e-29ab51559b0b/attachment.sh","path":"scripts/credentials/publish-credential.sh","size":929,"sha256":"4bc9b6190fc81dc0e60e97eb57f351dc0723984f7140647b33371369a6d175f4","contentType":"application/x-sh; charset=utf-8"},{"id":"73648e84-b869-5c7a-9d2a-582ea974e692","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/73648e84-b869-5c7a-9d2a-582ea974e692/attachment.sh","path":"scripts/credentials/revoke-credential.sh","size":856,"sha256":"97612fbecc73fb0b0d4bdb943a5a00e8eda976d8449426d57f89b5d4e6f80baa","contentType":"application/x-sh; charset=utf-8"},{"id":"35527433-3b50-5257-90aa-c880c465be28","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/35527433-3b50-5257-90aa-c880c465be28/attachment.sh","path":"scripts/crypto/decrypt-file.sh","size":1003,"sha256":"28a6dcd868a05a3db270c3c49b0eb3cf005a66761bddb498989aed1c57e03d23","contentType":"application/x-sh; charset=utf-8"},{"id":"232417b2-dbb8-5d55-bdab-60976d331628","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/232417b2-dbb8-5d55-bdab-60976d331628/attachment.sh","path":"scripts/crypto/decrypt-message.sh","size":585,"sha256":"a54a4a3fbc52334408e9bd332684ab47aa70508edccce57e26e05b5098cb371e","contentType":"application/x-sh; charset=utf-8"},{"id":"f1cdbe68-e389-520e-8649-b67f31b7d745","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f1cdbe68-e389-520e-8649-b67f31b7d745/attachment.sh","path":"scripts/crypto/encrypt-file.sh","size":1559,"sha256":"ef2201dadc64f8d411f27bb8f0a6164b2186a8b9f1a3a1dd0afe72a5d9645dd4","contentType":"application/x-sh; charset=utf-8"},{"id":"3b5972f5-60b9-5f23-9b6d-835f7a87bb8c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3b5972f5-60b9-5f23-9b6d-835f7a87bb8c/attachment.sh","path":"scripts/crypto/encrypt-message.sh","size":1281,"sha256":"36cd22d93752bc874d9f570327b7277459231132e59b1284e617b78ac49c4ba3","contentType":"application/x-sh; charset=utf-8"},{"id":"bbad0cfa-87ff-5713-b795-9a96286a0580","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bbad0cfa-87ff-5713-b795-9a96286a0580/attachment.sh","path":"scripts/crypto/sign-file.sh","size":1188,"sha256":"bd9f4d5014d4423f50a7a996378d425d783afb66a2534ecdca46752f00d5c5dd","contentType":"application/x-sh; charset=utf-8"},{"id":"b571ad85-90c0-560d-8400-1de28e05a1ea","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b571ad85-90c0-560d-8400-1de28e05a1ea/attachment.sh","path":"scripts/crypto/verify-file.sh","size":1321,"sha256":"2b5ab61dd2f7e8b9af9d9a58cb27b4c9b34c7bbf76e24b8fd5f51cafb11119e0","contentType":"application/x-sh; charset=utf-8"},{"id":"44f68c8b-fa2e-5141-adf0-0eda4cb04ec8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/44f68c8b-fa2e-5141-adf0-0eda4cb04ec8/attachment.sh","path":"scripts/groups/add-member.sh","size":914,"sha256":"34f011fd045c63a3246237f2c47a6e33ea7f3e2d66b251d56aabcf4ebf1d0847","contentType":"application/x-sh; charset=utf-8"},{"id":"712784ac-ba34-5450-9e01-ad35d6ccb8bf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/712784ac-ba34-5450-9e01-ad35d6ccb8bf/attachment.sh","path":"scripts/groups/create-group.sh","size":1125,"sha256":"08b973cbedecaf0a1ec830903d4730657b95a54a224885a117709ed8e8a47a68","contentType":"application/x-sh; charset=utf-8"},{"id":"9a123673-d920-54bc-93f6-ae65aefdd1f1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9a123673-d920-54bc-93f6-ae65aefdd1f1/attachment.sh","path":"scripts/groups/get-group.sh","size":744,"sha256":"bfd9dcf8c79a3b496ea79282d5d837e1ac833ff439309761219b64c766dbeca2","contentType":"application/x-sh; charset=utf-8"},{"id":"bcb83041-b67a-5c21-9f18-f0baef6e5530","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bcb83041-b67a-5c21-9f18-f0baef6e5530/attachment.sh","path":"scripts/groups/list-groups.sh","size":547,"sha256":"384d67f95ebda3ca7bb3ee06d889de4a4ccd19a577786d00cf55741f2169543b","contentType":"application/x-sh; charset=utf-8"},{"id":"848f01eb-62ec-53f3-bffc-6ec0a885cf6a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/848f01eb-62ec-53f3-bffc-6ec0a885cf6a/attachment.sh","path":"scripts/groups/remove-member.sh","size":933,"sha256":"c42d73ade8c130b8ed3f3e0a0778aca3a3e3e812ff27904194549267e85bd5e9","contentType":"application/x-sh; charset=utf-8"},{"id":"7929d9f1-64cc-533e-ba5f-8c35034e79dd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7929d9f1-64cc-533e-ba5f-8c35034e79dd/attachment.sh","path":"scripts/groups/test-member.sh","size":1197,"sha256":"6c095cbf00240841f8c504c16b1edb4840aaa30e3d58de2ceb19087d52e76bf5","contentType":"application/x-sh; charset=utf-8"},{"id":"690e078b-04ea-5297-a62b-88d17d75ef76","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/690e078b-04ea-5297-a62b-88d17d75ef76/attachment.sh","path":"scripts/identity/create-additional-id.sh","size":1286,"sha256":"8f2542d738394e26f27ed7d41f03cc3da352503215f9ebce620fa47aedea1c89","contentType":"application/x-sh; charset=utf-8"},{"id":"2b16de82-bc44-59ac-8cca-9bb89e70e023","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2b16de82-bc44-59ac-8cca-9bb89e70e023/attachment.sh","path":"scripts/identity/create-id.sh","size":4131,"sha256":"d8caf67fb5bb49869f615eda990a4f5c1b3e898e2b517c2d7f392ccc6e2038b7","contentType":"application/x-sh; charset=utf-8"},{"id":"c35c3fd3-0280-5742-9106-7ff9e1fa1fbf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c35c3fd3-0280-5742-9106-7ff9e1fa1fbf/attachment.sh","path":"scripts/identity/list-ids.sh","size":678,"sha256":"620408ac898909c353dafcc331033911ea7429d89fddb3703e349069919f794a","contentType":"application/x-sh; charset=utf-8"},{"id":"f40c7370-f990-5dd1-8136-28622944edb5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f40c7370-f990-5dd1-8136-28622944edb5/attachment.sh","path":"scripts/identity/switch-id.sh","size":985,"sha256":"ab95c7458867dcb00c895475c2ba1288814bc47f5940cd63d24e692f739aba85","contentType":"application/x-sh; charset=utf-8"},{"id":"374b0ba9-0233-5034-b1d2-9b061efe030c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/374b0ba9-0233-5034-b1d2-9b061efe030c/attachment.sh","path":"scripts/messaging/archive.sh","size":497,"sha256":"27106494bf9299ab0182087715306e2cc00fb0d8acf60883fa6e819e59d50624","contentType":"application/x-sh; charset=utf-8"},{"id":"049e106f-a091-530b-89fe-becdd99ccee6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/049e106f-a091-530b-89fe-becdd99ccee6/attachment.sh","path":"scripts/messaging/attach.sh","size":637,"sha256":"fa72185895621e2a5e8fa60d41ad26be8b3a77c4f16a5c1085ba5f170acc468a","contentType":"application/x-sh; charset=utf-8"},{"id":"14dc33db-9640-5769-8c0a-bb43e6709769","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/14dc33db-9640-5769-8c0a-bb43e6709769/attachment.sh","path":"scripts/messaging/delete.sh","size":434,"sha256":"1fa76b399851ad75a1de994290ab072ab121d271a980aa3acac92847d5732c01","contentType":"application/x-sh; charset=utf-8"},{"id":"cfd2859c-65bd-583a-9295-954a9f83d4e1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cfd2859c-65bd-583a-9295-954a9f83d4e1/attachment.sh","path":"scripts/messaging/forward.sh","size":2026,"sha256":"fe3dfae359790ec932e2202378b5eccbe84e0bf702cd8bfe5e86fdf6aa4df47e","contentType":"application/x-sh; charset=utf-8"},{"id":"2056c346-42e4-5717-a8fb-18fae6a75867","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2056c346-42e4-5717-a8fb-18fae6a75867/attachment.sh","path":"scripts/messaging/get-attachment.sh","size":728,"sha256":"3efe241a7e8cd115172a703e2b789b85412092185507b1e3868f889ae9b22f76","contentType":"application/x-sh; charset=utf-8"},{"id":"6ba5e779-1304-5f6f-8050-9941d7898510","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6ba5e779-1304-5f6f-8050-9941d7898510/attachment.sh","path":"scripts/messaging/list.sh","size":914,"sha256":"4c5d6d23d0f64119486aca2601dfa5709e6d46c2145e483aaba22ffb7853f308","contentType":"application/x-sh; charset=utf-8"},{"id":"aba9292a-515c-540e-8ae5-553ac1ac0a51","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aba9292a-515c-540e-8ae5-553ac1ac0a51/attachment.sh","path":"scripts/messaging/read.sh","size":2945,"sha256":"41c462a6a1d047da17fa80a668131fc222a21fa42868ea12be303ad2f46b636c","contentType":"application/x-sh; charset=utf-8"},{"id":"b453eac8-e8ee-50fa-bebf-46d9a592a8d2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b453eac8-e8ee-50fa-bebf-46d9a592a8d2/attachment.sh","path":"scripts/messaging/refresh.sh","size":588,"sha256":"94711e531943ab31ef0427868ea1bad90282b3dced8312c98e3cc0aff60cd7d4","contentType":"application/x-sh; charset=utf-8"},{"id":"37b4917b-480c-5f38-ad9d-0cae25cad329","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/37b4917b-480c-5f38-ad9d-0cae25cad329/attachment.sh","path":"scripts/messaging/reply.sh","size":1734,"sha256":"543c89f62cb8dc624ac580fa6d2b435f91be3934ce0a43f1daff52ead429c6cb","contentType":"application/x-sh; charset=utf-8"},{"id":"be9469fa-a416-5f74-b95d-c666a1dd05a2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/be9469fa-a416-5f74-b95d-c666a1dd05a2/attachment.sh","path":"scripts/messaging/send.sh","size":1470,"sha256":"c008f78ec60817761ff72e2d0dbf4b8169a7198a7531fedbaeeeefb7c99ca823","contentType":"application/x-sh; charset=utf-8"},{"id":"dd8e28b1-117a-569c-a299-dfd4a425049b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dd8e28b1-117a-569c-a299-dfd4a425049b/attachment.sh","path":"scripts/nostr/derive-nostr.sh","size":1566,"sha256":"84e770e6d6ac74eaf6d9207cf15b0b0038ee7b43ab18e4b9738ff9bf0b69aa4a","contentType":"application/x-sh; charset=utf-8"},{"id":"949e57b5-99d4-5fd9-83c1-494a8542ff5f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/949e57b5-99d4-5fd9-83c1-494a8542ff5f/attachment.sh","path":"scripts/polls/add-poll-voter.sh","size":921,"sha256":"f2c096e22d0378de57b59c5171900cc8233001bcc630060df4d7d5f266c78b71","contentType":"application/x-sh; charset=utf-8"},{"id":"88fe0b2a-a9ab-57c9-a522-fbbbab9387df","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/88fe0b2a-a9ab-57c9-a522-fbbbab9387df/attachment.sh","path":"scripts/polls/create-poll-template.sh","size":745,"sha256":"e5eef2a3e9b8efc22da1812155b90154f4570e99ee18295ea70044c386f2d3d7","contentType":"application/x-sh; charset=utf-8"},{"id":"8a0a0cce-824f-5a90-b286-2a8d39c2a76c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8a0a0cce-824f-5a90-b286-2a8d39c2a76c/attachment.sh","path":"scripts/polls/create-poll.sh","size":1406,"sha256":"27221357f461f7f553471e94cb846685fd5b0ce080e8c8c8ed7dec1001acac0b","contentType":"application/x-sh; charset=utf-8"},{"id":"8ad0e1e6-75f8-5fc0-ab8a-246c05ae3b35","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8ad0e1e6-75f8-5fc0-ab8a-246c05ae3b35/attachment.sh","path":"scripts/polls/list-poll-voters.sh","size":698,"sha256":"cf502cc2ed267f0e593f6c7007eb1f8ea7723f00499bbba32b7b00efba18cc57","contentType":"application/x-sh; charset=utf-8"},{"id":"5b1eca0f-8941-5b7d-8744-efefa83a5492","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5b1eca0f-8941-5b7d-8744-efefa83a5492/attachment.sh","path":"scripts/polls/publish-poll.sh","size":867,"sha256":"58b3287976fb8d341d0a9c8124d031abbbdd795652bffc117445de109faeb467","contentType":"application/x-sh; charset=utf-8"},{"id":"8e3a0a96-280d-56b4-ac1b-b6086bb5410b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8e3a0a96-280d-56b4-ac1b-b6086bb5410b/attachment.sh","path":"scripts/polls/remove-poll-voter.sh","size":944,"sha256":"19a2ccd6d63f4ec44867149a74ddff7031f2fbe41fd54fcc18949215dc2e162c","contentType":"application/x-sh; charset=utf-8"},{"id":"5cbad1a4-834c-5b64-b3cc-9e99b227a18f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5cbad1a4-834c-5b64-b3cc-9e99b227a18f/attachment.sh","path":"scripts/polls/reveal-poll.sh","size":854,"sha256":"8159e0c45fafcb27f06f75993cbb164cdb0900a3162273be254a934d4890378d","contentType":"application/x-sh; charset=utf-8"},{"id":"7124441e-51a0-5bca-900a-dec1af092ac4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7124441e-51a0-5bca-900a-dec1af092ac4/attachment.sh","path":"scripts/polls/send-ballot.sh","size":971,"sha256":"97a09f390544c2fb79ce1d8524a7e6f5419f2b044ec52589ff57fb00f151f8ab","contentType":"application/x-sh; charset=utf-8"},{"id":"b5eccc92-2cd6-5dad-aaca-fd46f4f80bcd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b5eccc92-2cd6-5dad-aaca-fd46f4f80bcd/attachment.sh","path":"scripts/polls/send-poll.sh","size":846,"sha256":"355b6d994f5945fe797ae6e7478e5463459dc36b23186ff95e186809cdd1f2cd","contentType":"application/x-sh; charset=utf-8"},{"id":"05ad292b-ae8c-5647-ac15-8aadcdfd7328","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/05ad292b-ae8c-5647-ac15-8aadcdfd7328/attachment.sh","path":"scripts/polls/unpublish-poll.sh","size":734,"sha256":"cf242d90a9236252b046a2584531995b835e3cde2ecf99589cf72243e4fdb5a8","contentType":"application/x-sh; charset=utf-8"},{"id":"6a1d6b5e-193c-5847-9c8d-3f103d91add2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6a1d6b5e-193c-5847-9c8d-3f103d91add2/attachment.sh","path":"scripts/polls/update-poll.sh","size":877,"sha256":"bcc2c465a72aca35fb1c2c58a3ada6f0db02b1bb7ceecef938e5bab514619469","contentType":"application/x-sh; charset=utf-8"},{"id":"593969d2-3784-52e7-9c8b-10561962d933","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/593969d2-3784-52e7-9c8b-10561962d933/attachment.sh","path":"scripts/polls/view-ballot.sh","size":778,"sha256":"edc189266f401136d9942960488d2b18b3d82f8269a4afd3a48d0e99b5d9c3c3","contentType":"application/x-sh; charset=utf-8"},{"id":"8fb530b1-8cb4-58d5-b772-b6436605e086","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8fb530b1-8cb4-58d5-b772-b6436605e086/attachment.sh","path":"scripts/polls/view-poll.sh","size":695,"sha256":"3e6db81db5a082d6729c21e74bb4a4631d9eb73bdf6e314c7d3c7cc37b6e1cc9","contentType":"application/x-sh; charset=utf-8"},{"id":"60a161cf-1429-5e41-962e-0c43c5b3724c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/60a161cf-1429-5e41-962e-0c43c5b3724c/attachment.sh","path":"scripts/polls/vote-poll.sh","size":1050,"sha256":"79a2da7eb212e4cc0e7508bd3a0880360d6faab4f9e7544e763b515ce400aea3","contentType":"application/x-sh; charset=utf-8"},{"id":"c6c68480-6883-5580-a009-e01ec89aba62","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c6c68480-6883-5580-a009-e01ec89aba62/attachment.sh","path":"scripts/schemas/create-schema.sh","size":1340,"sha256":"34d0d274f5988093baa6e531c565801e82dd2720d46480502e97d695e5d0c6ab","contentType":"application/x-sh; charset=utf-8"},{"id":"a71ae531-3187-53a9-ab67-d21035f5d2b1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a71ae531-3187-53a9-ab67-d21035f5d2b1/attachment.sh","path":"scripts/schemas/get-schema.sh","size":753,"sha256":"d1eb72714ea8b0cac31349c19bcb9d5678632e916e253775ef9e74a8e0da418a","contentType":"application/x-sh; charset=utf-8"},{"id":"fc2494a5-b338-5f3f-8102-89c58f79b940","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fc2494a5-b338-5f3f-8102-89c58f79b940/attachment.sh","path":"scripts/schemas/list-schemas.sh","size":483,"sha256":"3e929c26409c92975b76d51b7e00548ec0e71f97531c99fc26697be9a940d0fb","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"4aa27f1169c96e50873f5424fc60e6b80b63a7aded8eddc1944ca77e0b694770","attachment_count":76,"text_attachments":76,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/archon-keymaster/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"web-development","category_label":"Web"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"web-development","metadata":{"openclaw":{"emoji":"🔐","requires":{"env":["ARCHON_WALLET_PATH","ARCHON_PASSPHRASE","ARCHON_GATEKEEPER_URL"],"bins":["node","npx"],"anyBins":["jq","openssl"]},"primaryEnv":"ARCHON_PASSPHRASE"}},"import_tag":"clean-skills-v1","description":"Core Archon DID toolkit - identity management, verifiable credentials, encrypted messaging (dmail), Nostr integration, file encryption/signing, aliasing, authorization (challenge/response), groups, and cryptographic polls. Use for creating/managing DIDs, issuing/accepting verifiable credentials, sending encrypted messages between DIDs, deriving Nostr keypairs, encrypting/signing files, managing DID aliases, challenge/response authorization, managing DID groups, or running cryptographically verifiable polls. For vaults/backups see archon-vault; for ecash see archon-cashu."}},"renderedAt":1782980503101}

Archon Keymaster - Core DID Toolkit Core toolkit for Archon decentralized identities (DIDs). Manages identity lifecycle, encrypted communication, cryptographic operations, and authorization. Related skills: - — Vault management and encrypted distributed backups - — Cashu ecash with DID-locked tokens Capabilities - Identity Management - Create, manage multiple DIDs, recover from mnemonic - Verifiable Credentials - Create schemas, issue/accept/revoke credentials - Encrypted Messaging (Dmail) - Send/receive end-to-end encrypted messages between DIDs - Nostr Integration - Derive Nostr keypairs fr…