Identity Profiles
The MuseHub profile is the public face of a cryptographic identity — not a social media card. Every entity in the ecosystem (human, agent, or org) is defined by what it signs, what it creates, and what it attests to. The profile page makes all of that legible, beautiful, and machine-readable simultaneously. Profiles are archetype-aware: humans, agents, and organisations share a unified shell but render archetype-specific panels.
Three archetypes
Every identity in MuseHub has an identity_type of human,
agent, or org. This single field drives every adaptive
rendering decision on the profile page — colour palette, core glyph shape in the
Spectral Sigil, which panels are shown, and which API fields are populated.
┌─────────────────────────────────────────────────────────────────────┐
│ IDENTITY ARCHETYPES │
├─────────────────┬──────────────────────┬────────────────────────────┤
│ HUMAN │ AGENT │ ORG / COLLECTIVE │
│ Root of trust │ Bounded intelligence│ Federated governance │
│ MSign Ed25519 │ Trust chain from │ Multi-sig quorum │
│ BIP39 mnemonic │ spawned_by handle │ member roster on-chain │
│ AVAX address │ model_id + scope │ proposal voting weight │
│ Bio + socials │ capabilities list │ treasury address │
└─────────────────┴──────────────────────┴────────────────────────────┘
The profile URL is always /{handle}. The server resolves the handle against
musehub_identities, detects identity_type, and renders the
appropriate template variant. There is no separate /agents/{handle} path —
humans, agents, and orgs are all first-class citizens at the same URL scheme.
Human profile layout
╔══════════════════════════════════════════════════════════════════════╗
║ [Spectral Sigil] gabriel 29 REPOS ║
║ @gabriel · human · verified 3,324 COMMITS ║
║ "Building the sound of the 24 DAY STREAK ║
║ future" 3,324 THIS YEAR ║
╠══════════════════════════════════════════════════════════════════════╣
║ AVAX · Ed25519 fingerprint · Registered date · Pinned repos ║
╠══════════════════════════════════════════════════════════════════════╣
║ ACTIVITY CANVAS — 52 weeks × 5 domains ║
║ CODE ░░░░▒▒▓▓██▓▓▒░░ … ║
║ MUSIC ░░▒▒▓▓████▓▒▒░░ … ║
║ MIDI ░░░▒▒▓▓███▓▒░░░ … ║
║ PROSE ░▒▒▒▓▓▒░░░░▒▒▒▓ … ║
║ MPAY ░░░░▒▒▒▓▓▓████▓ … ║
╠══════════════════════════════════════════════════════════════════════╣
║ ATTESTATIONS RECEIVED ATTESTATIONS GIVEN ║
╠══════════════════════════════════════════════════════════════════════╣
║ CRYPTOGRAPHIC PROVENANCE CHAIN ║
╠══════════════════════════════════════════════════════════════════════╣
║ AGENT FLEET [mix-engine-7] [stori-bot] [maestro-9] ║
╠══════════════════════════════════════════════════════════════════════╣
║ REPOS [musehub] [muse] [agentception] [Stori] … ║
╚══════════════════════════════════════════════════════════════════════╝
Agent profile layout
╔══════════════════════════════════════════════════════════════════════╗
║ [Spectral Sigil] mix-engine-7 TRUST CHAIN ║
║ @mix-engine-7 · agent gabriel → ║
║ model: claude-opus-4-6 this agent ║
║ spawned by: @gabriel ║
╠══════════════════════════════════════════════════════════════════════╣
║ CAPABILITIES & SCOPE ║
║ ✓ read:repos ✓ write:repos ✓ mpay:send ✗ admin:hub ║
║ expires: 2026-06-01 · max_spend: 500,000 nanoMUSE/session ║
╠══════════════════════════════════════════════════════════════════════╣
║ WORK LEDGER (last 30 days) ║
║ Commits signed: 47 · Stems attested: 23 · Payments sent: 891 ║
╠══════════════════════════════════════════════════════════════════════╣
║ CRYPTOGRAPHIC PROVENANCE CHAIN ║
╚══════════════════════════════════════════════════════════════════════╝
Org profile layout
╔══════════════════════════════════════════════════════════════════════╗
║ [Spectral Sigil] darkroom-collective TREASURY ║
║ @darkroom-collective · org AVAX: 0xabc…def ║
║ quorum: 3/5 members multi-sig ║
╠══════════════════════════════════════════════════════════════════════╣
║ MEMBER ROSTER ║
║ @gabriel (admin, weight: 2) · @aaronrene (member, weight: 1) … ║
╠══════════════════════════════════════════════════════════════════════╣
║ OPEN PROPOSALS ║
║ #4 "Release v2 stems" votes: 2/5 ⏳ #3 "Add member" ✅ ║
╚══════════════════════════════════════════════════════════════════════╝
Spectral Sigil
The Spectral Sigil is a content-addressed SVG avatar generated
deterministically from an identity's sha256 genesis ID and archetype.
It is not an image you upload — it is derived from who you are in the graph.
Same identity → same sigil, forever.
Route
GET /avatars/{algo}/{hex}.svg
The algo-in-path convention matches the object store — no colons in URLs,
no ambiguity. The canonical identity_id is reconstructed server-side
as {algo}:{hex} for the DB lookup. Currently only sha256
is supported. The response carries Cache-Control: public, max-age=31536000, immutable
— content-addressed means it never changes, so it can be cached forever.
curl http://staging.musehub.ai/avatars/sha256/41dfaf048e4979cb767fd43e9c82c42cccbb402ab02a8b2cc329c8b778f7c841.svg
Five layers
Every Spectral Sigil is composed of five deterministic layers:
Layer 1 — Chromatic Field bytes 0–3 hue 0–359°; archetype sets palette register
Layer 2 — Archetype Core bytes 4–7 human=bezier blob, agent=hex circuit, org=N-gon
Layer 3 — Orbital Rings bytes 8–15 2 ellipses at unique rotations + eccentricities
Layer 4 — Domain Dots bytes 16–23 dots on orbits, colored by live domain activity
Layer 5 — Handle Initial — first char of handle, centered monospace
Palette registers by archetype
| Archetype | Saturation | Lightness | Character |
|---|---|---|---|
human | 70% | 48% | warm, earthen, organic |
agent | 90% | 50% | cold, electric, high-contrast |
org | 60% | 55% | amber-gold, federated |
Domain dot colors
Domain dots appear on the orbital rings colored by actual activity. If no activity exists yet (genesis state), dots are rendered in grayscale at 40% opacity — the sigil is dormant, waiting to awaken.
| Domain | Color | Represents |
|---|---|---|
code | #388bfd | commits, symbol changes |
music | #bc8cff | stem uploads, audio events |
midi | #3fb950 | MIDI sequences, note events |
prose | #f0883e | issues, proposals, docs |
mpay | #d29922 | payment claims sent/received |
Hue derivation
def derive_hue(identity_id: str) -> int:
# First 4 bytes of the sha256 hex → integer → hue 0-359
raw = int(identity_id[:8], 16)
return raw % 360
Profile manifest
The unified profile endpoint returns an archetype-aware JSON manifest. All three archetypes share a common envelope; archetype-specific fields are present only when relevant.
{
"handle": "gabriel",
"identity_type": "human",
"identity_id": "sha256:41dfaf048e4979cb…",
"bio": "Building the sound of the future",
"avax_address": "0x1a2b3c4d5e6f…",
"public_key": "ed25519:3aB7kLmNpQ2rS4tU…",
"fingerprint": "sha256:41dfaf04…",
"registered_at": "2026-04-27T00:00:00Z",
"archetype": {
"activity_canvas": "…",
"attestation_badges": [],
"mpay_totals": { "sent_nano": 0, "received_nano": 0 },
"org_manifest": null,
"agent_trust_chain": null
},
"stats": {
"repo_count": 29,
"commit_count": 3324
}
}
For identity_type: "agent", the manifest includes
agent_trust_chain (the spawned-by chain back to a human root),
agent_capabilities, and expires_at.
For identity_type: "org", it includes org_manifest
with the member roster, quorum threshold, and treasury address.
REST endpoint
GET /api/profiles/{handle}
No authentication required for public profiles.
Attestations
attestation_badges on the manifest, but they
are fundamentally a signing operation and live with the rest of the identity stack.
See Attestations on the Cryptographic
Identity page for the canonical message format, the 17 claim types, the three
scopes (identity / repo / commit), the REST
API, and the muse hub attestation CLI.
MPay ledger
Every profile shows a live payment ledger — total nanoMUSE sent and
received, with a chain of linked claims. MPay claims are Ed25519-signed off-chain
receipts. On-chain settlement to AVAX C-Chain is optional and produces a
settled_tx_hash badge on the profile.
Canonical message format
MPAY\n{sender}\n{recipient}\n{amount_nano}\n{nonce_hex}
The nonce_hex links claims into a chain — each payment references
the previous claim's nonce, making the ledger tamper-evident without a blockchain.
On-chain settlement is a separate optional step that writes a
settled_tx_hash to the claim row.
MPay API
| Method | Path | Description |
|---|---|---|
POST |
/api/profiles/{handle}/mpay-claims |
Record a signed payment claim |
GET |
/api/profiles/{handle}/mpay-ledger |
Fetch sent + received totals and recent claims |
{
"handle": "gabriel",
"sent_nano": 1200000,
"received_nano": 890000,
"claim_count": 47,
"recent_claims": [
{
"from_handle": "gabriel",
"to_handle": "aaronrene",
"amount_nano": 500000,
"nonce_hex": "a3f2c9d8…",
"memo": "stem collab session",
"settled": false
}
]
}
Activity canvas
The activity canvas is a 52-week × 5-domain heatmap that shows the full creative output of an identity — not just commit frequency. It is unique to Muse: no other version control platform tracks code, music, MIDI, prose, and payments in a single unified grid.
Domain Week 1 Week 2 … Week 52
CODE ░░░▒▒▓▓██▓▓▒ ░░▒▒▓▓█████▓ … ▒▒▓▓▓▒░░
MUSIC ░░▒▒▓▓████▓▒ ▒▒░░░▒▒▓▓▓▒░ … ░░▒▒▓▓██
MIDI ░░░▒▒▓▓███▓▒ ░▒▒▓▓███████ … ▓▓▒░░░▒▒
PROSE ░▒▒▒▓▓▒░░░░▒ ░░░░▒▒▒▒▒▓▓▒ … ░▒▒▒▒▓▓▓
MPAY ░░░░▒▒▒▓▓▓██ ████▓▓▒▒░░░░ … ▒░░░░░▒▒
Legend: ░ none ▒ low ▓ medium █ high
Each cell is an intensity value 0–4, derived from commit counts (code), upload counts (music/midi), word counts (prose), and claim counts (mpay) for that day. The intensity scale is normalised per-domain so low-activity domains don't appear permanently dark.
Agent profiles
Every agent spawned in the ecosystem gets a profile at /{handle}.
The profile shows the full trust chain back to a human root, the agent's
declared capabilities and scope, its expiry date, and its work ledger for the
last 30 days.
An expired agent's profile is still verifiable — all its past signed commits remain tamper-evident in the DAG — but the profile clearly marks the credential as expired. Future pushes from that agent will be rejected by the hub.
{
"handle": "mix-engine-7",
"identity_type": "agent",
"spawned_by": "gabriel",
"agent_model": "claude-opus-4-6",
"agent_capabilities": ["read:repos", "write:repos", "mpay:send"],
"expires_at": "2026-06-01T00:00:00Z",
"archetype": {
"agent_trust_chain": [
{ "handle": "gabriel", "type": "human" },
{ "handle": "mix-engine-7", "type": "agent" }
]
}
}
Org profiles
An org is a collective of humans and agents operating under a shared identity with multi-sig quorum governance. The org profile shows the member roster with voting weights, open proposals, and the shared AVAX treasury address.
The Spectral Sigil for an org uses the quorum polygon archetype — an N-gon where N (5–8 sides) is derived from the identity_id, with diagonal weights that vary edge thickness to reflect the hierarchy of voting weights within the collective.
{
"handle": "darkroom-collective",
"identity_type": "org",
"archetype": {
"org_manifest": {
"members": [
{ "handle": "gabriel", "role": "admin", "voting_weight": 2 },
{ "handle": "aaronrene", "role": "member", "voting_weight": 1 },
{ "handle": "stori-bot", "role": "member", "voting_weight": 1 }
],
"quorum": 3,
"treasury_address": "0xabc…def"
}
}
}
API reference
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/avatars/{algo}/{hex}.svg |
none | Spectral Sigil SVG — immutably cached |
GET |
/api/profiles/{handle} |
none | Full archetype-aware profile manifest |
GET |
/api/profiles/{handle}/attestations |
none | Attestations received by this handle |
POST |
/api/profiles/{handle}/attestations |
MSign | Issue a signed attestation |
DELETE |
/api/profiles/{handle}/attestations/{id} |
MSign | Revoke (sets revoked_at, audit trail preserved) |
POST |
/api/profiles/{handle}/mpay-claims |
MSign | Record a signed MPay claim |
GET |
/api/profiles/{handle}/mpay-ledger |
none | Sent + received totals and recent claims |
MCP tools
All profile operations are available as MCP tools so agents can read profiles, issue attestations, and record payments without direct HTTP calls.
| Tool name | Description |
|---|---|
musehub_read_profile_manifest | Full archetype-aware manifest for any handle |
musehub_issue_attestation | Sign + post an attestation claim |
musehub_revoke_attestation | Revoke an existing attestation by ID |
musehub_list_attestations | Query attestations received by a handle |
musehub_record_mpay_claim | Record a signed MPay payment claim |
musehub_get_mpay_ledger | Sent + received totals for a handle |
These are not social features bolted onto a code host. Every attestation is an Ed25519-signed cryptographic claim verifiable without trusting MuseHub. Every payment claim chains nonces into a tamper-evident ledger. Every profile sigil is derived from the identity's genesis hash — it cannot be faked or transferred. The same key that signs your commits signs your attestations and authorises your payments.