1# agora
2
3> Public square. Federated identity and a trust graph that no one runs.
4
5
6
7Each 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.
8
9## Run
10
11```sh
12cargo run --release -p agora-app # Llimphi UI: identities, attestations, composer, policy
13cargo run --release -p agora-cli -- --help
14```
15
16## Crates
17
18| Crate | Role |
19|---|---|
20| [`agora-core`](03_ukupacha/agora/agora-core/) | Identities, claims, Ed25519-signed attestations, multisig, lifecycle. |
21| [`agora-graph`](03_ukupacha/agora/agora-graph/) | TrustGraph: verified attestations + corroboration + negotiated policy. |
22| [`agora-store`](03_ukupacha/agora/agora-store/) | Atomic JSON persistence with re-verification on load. |
23| [`agora-keystore`](03_ukupacha/agora/agora-keystore/) | Encrypted private-seed storage (Argon2 + ChaCha20-Poly1305). |
24| [`agora-gossip`](03_ukupacha/agora/agora-gossip/) | Transport-agnostic anti-entropy protocol over signed attestations. |
25| [`agora-net-brahman`](03_ukupacha/agora/agora-net-brahman/) | libp2p bridge: `/agora/gossip/1.0.0` over `BrahmanNet` (shared with minga). |
26| [`agora-channel`](03_ukupacha/agora/agora-channel/) | Signed roots/releases, channel-history verification, capability grants by bytecode hash. |
27| [`agora-cli`](03_ukupacha/agora/agora-cli/) | Shell CLI: identities (rotate/revoke), attestations, export/import, channels. |
28| [`agora-app`](03_ukupacha/agora/agora-app/) | Llimphi UI with tiles (identities, attestations, composer, policy, capability, release). |
29| [`agora-dispositivo`](03_ukupacha/agora/agora-dispositivo/) | device→person binding by signed attestation: one person, one identity, many machines. |
30| [`agora-petnames`](03_ukupacha/agora/agora-petnames/) | Memorable local names plus signed introductions — petnames instead of a global namespace. |
31| [`agora-confianza`](03_ukupacha/agora/agora-confianza/) | Reconciles agora's two planes of trust into a single per-reader opinion. |
32| [`agora-ayllu`](03_ukupacha/agora/agora-ayllu/) | The community as author: the unit is the *ayllu*, and it gets a signing identity. |
33
34## How dependencies work
35
36This 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.
37
38The 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.
39
40## Considerations
41
42- **Pubkey identity**, never email or phone.
43- The graph stores only **verifiable** evidence: an attestation with a broken signature is rejected at ingest.
44- 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.
45- Self-attestation is preserved but flagged separately from third-party endorsement.
46- Plays well with `minga`: when both are active, agora rides the same `BrahmanNet` node (one PeerId, one Kademlia, two stream protocols).
47- Pure Rust on Linux / macOS / Windows / Wawa.
48
49## License
50
51MIT — see [LICENSE](LICENSE).
README.md
agora
Public square. Federated identity and a trust graph that no one runs.

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
cargo run --release -p agora-app # Llimphi UI: identities, attestations, composer, policy
cargo run --release -p agora-cli -- --help
Crates
| Crate | Role |
agora-core | Identities, claims, Ed25519-signed attestations, multisig, lifecycle. |
agora-graph | TrustGraph: verified attestations + corroboration + negotiated policy. |
agora-store | Atomic JSON persistence with re-verification on load. |
agora-keystore | Encrypted private-seed storage (Argon2 + ChaCha20-Poly1305). |
agora-gossip | Transport-agnostic anti-entropy protocol over signed attestations. |
agora-net-brahman | libp2p bridge: /agora/gossip/1.0.0 over BrahmanNet (shared with minga). |
agora-channel | Signed roots/releases, channel-history verification, capability grants by bytecode hash. |
agora-cli | Shell CLI: identities (rotate/revoke), attestations, export/import, channels. |
agora-app | Llimphi UI with tiles (identities, attestations, composer, policy, capability, release). |
agora-dispositivo | device→person binding by signed attestation: one person, one identity, many machines. |
agora-petnames | Memorable local names plus signed introductions — petnames instead of a global namespace. |
agora-confianza | Reconciles agora's two planes of trust into a single per-reader opinion. |
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 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.