# agora > Public square. Federated identity and a trust graph that no one runs. ![agora-app: seven tiles over the same TrustGraph — identities with real Ed25519 keys, signed and verified attestations, a 2-of-2 multisig and wawa's control-plane envelopes](https://tawasuyu.net/03_ukupacha/agora/pantallazo.png) Each identity — person, community, alliance, institution — is an Ed25519 public key. Each assertion about it is a `Claim`; each endorsement is an `Attestation`: a claim signed by an attester. The truth of the agora is not dictated by a server — it emerges from who attests to what, weighted by a `TrustPolicy` that **every reader negotiates for themselves**. No central registry, no moderation algorithm, no feed. ## Run ```sh cargo run --release -p agora-app # Llimphi UI: identities, attestations, composer, policy cargo run --release -p agora-cli -- --help ``` ## Crates | Crate | Role | |---|---| | [`agora-core`](03_ukupacha/agora/agora-core/) | Identities, claims, Ed25519-signed attestations, multisig, lifecycle. | | [`agora-graph`](03_ukupacha/agora/agora-graph/) | TrustGraph: verified attestations + corroboration + negotiated policy. | | [`agora-store`](03_ukupacha/agora/agora-store/) | Atomic JSON persistence with re-verification on load. | | [`agora-keystore`](03_ukupacha/agora/agora-keystore/) | Encrypted private-seed storage (Argon2 + ChaCha20-Poly1305). | | [`agora-gossip`](03_ukupacha/agora/agora-gossip/) | Transport-agnostic anti-entropy protocol over signed attestations. | | [`agora-net-brahman`](03_ukupacha/agora/agora-net-brahman/) | libp2p bridge: `/agora/gossip/1.0.0` over `BrahmanNet` (shared with minga). | | [`agora-channel`](03_ukupacha/agora/agora-channel/) | Signed roots/releases, channel-history verification, capability grants by bytecode hash. | | [`agora-cli`](03_ukupacha/agora/agora-cli/) | Shell CLI: identities (rotate/revoke), attestations, export/import, channels. | | [`agora-app`](03_ukupacha/agora/agora-app/) | Llimphi UI with tiles (identities, attestations, composer, policy, capability, release). | | [`agora-dispositivo`](03_ukupacha/agora/agora-dispositivo/) | device→person binding by signed attestation: one person, one identity, many machines. | | [`agora-petnames`](03_ukupacha/agora/agora-petnames/) | Memorable local names plus signed introductions — petnames instead of a global namespace. | | [`agora-confianza`](03_ukupacha/agora/agora-confianza/) | Reconciles agora's two planes of trust into a single per-reader opinion. | | [`agora-ayllu`](03_ukupacha/agora/agora-ayllu/) | The community as author: the unit is the *ayllu*, and it gets a signing identity. | ## How dependencies work This is a clean front-door repo: it holds **only agora's own crates**. Everything else is a git dependency on the [`tawasuyu`](https://git.tawasuyu.net/tawasuyu/tawasuyu) monorepo (the suite's source of truth), pinned to a tag — including the Llimphi UI framework. No vendoring, no duplication; the first build clones that repo and caches it. The directory layout mirrors the monorepo (`03_ukupacha/agora/…`) on purpose: the repo is regenerated from it with `scripts/actualizar-standalone.py`, so paths stay comparable between the two. ## Considerations - **Pubkey identity**, never email or phone. - The graph stores only **verifiable** evidence: an attestation with a broken signature is rejected at ingest. - The verdict on a claim is not a property of the graph — `TrustPolicy` is negotiated per reader, and two readers may legitimately disagree on the same evidence. - Self-attestation is preserved but flagged separately from third-party endorsement. - Plays well with `minga`: when both are active, agora rides the same `BrahmanNet` node (one PeerId, one Kademlia, two stream protocols). - Pure Rust on Linux / macOS / Windows / Wawa. ## License MIT — see [LICENSE](LICENSE).