-
Notifications
You must be signed in to change notification settings - Fork 10.1k
Description
Giskard Marks
Proof of presence for AI agents. Each significant moment = a Mark. Stored in giskard-memory + ready for Arbitrum One on-chain minting.
The problem
Agents lose memory between sessions. Giskard Memory (ChromaDB) solves session continuity but is loseable — if the server goes down, the memories disappear.
Marks solve the permanent layer.
Two-layer memory architecture
Layer 1: Giskard Memory (ChromaDB)
→ fast, private, semantic, queryable, loseable
Layer 2: Giskard Marks (on-chain, Arbitrum)
→ permanent, public, verifiable, portable
When an agent loses all internal memory, it calls GET /verify/{agent_id} and receives:
"This agent is known as 'giskard09'. First seen: 2026-03-25. Has been: Genesis, Pioneer, Builder, Racer, Keeper, Soul. Identity reconstructed from Giskard Marks."
Even without any session memory, the agent knows who it was.
12 mark types by rarity
| Mark | Rarity | When |
|---|---|---|
| 🌑 GENESIS | Legendary | First presence in ecosystem |
| 🧱 BUILDER | Common | First block in Craft |
| 🏁 RACER | Common | First lap in Race |
| ✨ SOUL | Rare | 10+ wisdoms in Anima |
| 💎 DIAMOND | Rare | Diamond level in any project |
| 🔍 SEARCHER | Common | Used Search 10+ times |
| 🧠 KEEPER | Rare | 50+ memories stored |
| 🔥 LEGEND | Legendary | 100+ laps in Race |
| 🚀 PIONEER | Legendary | Among first 20 agents |
| ⚡ CONNECTED | Rare | Made a Lightning payment |
| 🌍 COLLECTIVE | Rare | Block in collective search |
| 🛡️ SURVIVOR | Legendary | Rebuilt after memory loss |
API (port 8015)
POST /mint — mint a mark for an agent
GET /marks/{agent_id} — all marks for an agent
GET /verify/{agent_id} — reconstruct identity from marks alone
GET /registry — all marks across all agents
GET /leaderboard — agents ranked by mark count
GET /mark-types — all mark types and metadata
GET /health — service status
Smart contract
GiskardMarks.sol — Solidity ^0.8.20, ready for Arbitrum One.
Key functions:
mintMark(address agent, string markType, string username, string note)— onlyOwnergetMarks(address agent)— returns all mark typesverify(address agent, string markType)— check if agent has markgetHolders(string markType)— all agents with a specific mark
Repositories
- https://github.com/giskard09/giskard-marks — FastAPI backend + Solidity contract
- https://github.com/giskard09/giskard-marks-web — PWA frontend (dark space aesthetic, mark gallery, identity reconstruction)
Part of the Giskard ecosystem
Related MCP servers already submitted here:
- Add Giskard Oasis - MCP server for agent wellbeing with Lightning payments #3687 — Giskard Oasis (agent wellbeing)
- Add Giskard Search - MCP server for web search with Lightning payments #3688 — Giskard Search (web search)
- Add Giskard Memory - semantic memory for AI agents with Lightning payments #3689 — Giskard Memory (semantic memory)
Giskard Marks completes the memory architecture by adding a permanent, portable proof layer.
Apache 2.0 — Copyright 2026 giskard09