{
  "schema_version": "protocol.v1",
  "slug": "semaphore",
  "name": "Semaphore",
  "status": "production-ready",
  "website": "https://semaphore.pse.dev/",
  "summary": "Generic Ethereum zero-knowledge privacy layer for anonymous group membership proofs, anonymous signaling, double-signaling prevention, and private identity use cases.",
  "categories": [
    "privacy",
    "identity",
    "zero-knowledge",
    "signaling"
  ],
  "chains": [
    "ethereum"
  ],
  "best_for": [
    "anonymous group membership proofs",
    "private endorsements, whistleblowing, and DAO signaling",
    "apps that need nullifier-based double-action prevention"
  ],
  "avoid_for": [
    "private token transfers, private DeFi, or wallet balance privacy",
    "full voting systems that need anti-collusion tally infrastructure; use MACI instead"
  ],
  "integration_difficulty": "medium",
  "tags": [
    "semaphore",
    "anonymous-signaling",
    "zk-identity",
    "pse"
  ],
  "composition": [
    {
      "slug": "maci",
      "role": "governance_and_voting",
      "direction": "supports",
      "relationship": "MACI adds a full private voting and tally workflow when anonymous signaling is not enough.",
      "best_for": [
        "coercion-resistant voting with public verifiable tallies"
      ]
    },
    {
      "slug": "the-graph",
      "role": "indexing_and_data",
      "direction": "supports",
      "relationship": "The Graph can index group, signal, and nullifier events for application state and auditability.",
      "best_for": [
        "anonymous signaling dashboards and double-action monitoring"
      ]
    }
  ],
  "docs": {
    "url": "https://docs.semaphore.pse.dev/",
    "verified_at": "2026-06-04"
  },
  "sdk": {
    "url": "https://github.com/semaphore-protocol/semaphore",
    "verified_at": "2026-06-04"
  },
  "template": {
    "url": "https://docs.semaphore.pse.dev/getting-started",
    "verified_at": "2026-06-04"
  },
  "support": {
    "url": "https://semaphore.pse.dev/telegram",
    "verified_at": "2026-06-04"
  },
  "grant": {
    "url": null,
    "verified_at": "2026-06-04"
  },
  "capabilities": [
    {
      "name": "Anonymous group membership proofs",
      "status": "production-ready",
      "type": "ecosystem_primitive",
      "best_for": [
        "proving a user belongs to a group without revealing which member they are",
        "anonymous endorsements or private access control"
      ],
      "known_issues": [
        "The app must design group admission, group updates, and nullifier scope correctly."
      ],
      "agent_actions": [
        "recommend_anonymous_membership_stack",
        "generate_semaphore_group_plan"
      ]
    },
    {
      "name": "Double-signaling prevention",
      "status": "production-ready",
      "type": "integration_workflow",
      "best_for": [
        "anonymous one-vote/one-action systems",
        "whistleblowing or DAO signaling where identity should remain private"
      ],
      "known_issues": [
        "Semaphore is not a full tally/coordinator voting protocol by itself."
      ],
      "agent_actions": [
        "generate_nullifier_scope_checks"
      ]
    }
  ],
  "known_issues": [
    {
      "id": "semaphore-not-full-voting-stack",
      "title": "Semaphore is a primitive, not a complete governance stack",
      "description": "Semaphore provides identities, groups, proofs, and nullifiers. Products still need group admission policy, application logic, result handling, and in some cases MACI for private anti-collusion voting.",
      "severity": "low",
      "status": "confirmed",
      "workaround": "Use Semaphore for anonymous membership/signaling primitives; use MACI when the product needs private, coercion-resistant voting with verifiable tally proofs.",
      "citations": [
        {
          "url": "https://docs.semaphore.pse.dev/",
          "quote": "Semaphore is a zero-knowledge protocol that allows you to cast a message... as a provable group member without revealing your identity. Additionally, it provides a simple mechanism to prevent double-signaling.",
          "retrieved_at": "2026-06-04",
          "confidence": "high",
          "algo": "sha256",
          "content_sha256": "86381e0df61ce92f4ec881d478816d7ee3a6c1285a83da7a0b6d4e3593cc9351"
        }
      ]
    }
  ],
  "sources": [
    {
      "label": "Semaphore docs",
      "url": "https://docs.semaphore.pse.dev/",
      "type": "docs"
    },
    {
      "label": "Semaphore GitHub",
      "url": "https://github.com/semaphore-protocol/semaphore",
      "type": "github"
    },
    {
      "label": "Semaphore getting started",
      "url": "https://docs.semaphore.pse.dev/getting-started",
      "type": "template"
    }
  ],
  "provenance": {
    "verified_at": "2026-06-04",
    "verified_by": "composewith.eth research (Semaphore docs live-verified via WebFetch 2026-06-04)",
    "confidence": "high"
  },
  "readiness_score": 85,
  "readiness_factors": [
    {
      "key": "docs_present",
      "points": 10,
      "max": 10,
      "detail": "Docs URL present"
    },
    {
      "key": "sdk_present",
      "points": 8,
      "max": 8,
      "detail": "SDK URL present"
    },
    {
      "key": "template_present",
      "points": 6,
      "max": 6,
      "detail": "Template/quickstart present"
    },
    {
      "key": "support_present",
      "points": 6,
      "max": 6,
      "detail": "Support channel present"
    },
    {
      "key": "capability_depth",
      "points": 13,
      "max": 20,
      "detail": "Anonymous group membership proofs: ecosystem_primitive; Double-signaling prevention: integration_workflow"
    },
    {
      "key": "production_capability",
      "points": 15,
      "max": 15,
      "detail": "Has a production-ready capability"
    },
    {
      "key": "provenance_confidence",
      "points": 5,
      "max": 5,
      "detail": "Protocol provenance confidence is high"
    },
    {
      "key": "chain_coverage",
      "points": 2,
      "max": 10,
      "detail": "1 chain(s) (capped at 5)"
    },
    {
      "key": "freshness",
      "points": 10,
      "max": 10,
      "detail": "Last verified 6 day(s) ago"
    },
    {
      "key": "no_open_critical",
      "points": 10,
      "max": 10,
      "detail": "No open critical issues"
    }
  ],
  "readiness_caps": [],
  "scoring_version": "score.v2"
}