Skip to main content

GEIANT Protocol Specification

Geo-Identity Agent Navigation & Tasking

Version 0.2 | March 2026 | DRAFT

Authors: Camilo Ayerbe (ULISSY s.r.l. / GNS Foundation) Status: Internet-Draft — Intended for IETF submission alongside TrIP RFC Repository: https://github.com/GNS-Foundation/geiant Documentation: https://docs.geiant.com


Abstract

GEIANT defines a governance protocol for geospatial AI agents. A GEIANT-compliant runtime accepts task requests, enforces four sequential compliance gates (signature verification, jurisdiction resolution, delegation chain validation, geometry pre-flight), dispatches tasks to the highest-scoring eligible agent in the registry, and records every operation as a cryptographically signed Virtual Breadcrumb — an immutable, hash-chained audit trail.

The core design principle: the runtime is a compliance enforcement point, not a load balancer. Pre-flight enforcement, not post-hoc logging.

Changes from v0.1:

  • NEW §3.5–3.8: Production data structures (VirtualBreadcrumbBlock, AgentEpochSummary, ComplianceReport, Trust Score)
  • NEW §5.5–5.7: Epoch rollup, compliance report, and MCP SSE endpoints
  • NEW §7: Agent Audit Trail specification (Phase 5.1)
  • REVISED §10: Roadmap — Phases 0–5.1 complete
  • REVISED §11: Security — breadcrumb chain integrity, timestamp normalization
  • REVISED §13: References — docs.geiant.com, npm packages, EU AI Act

1. Motivation

Current AI orchestration frameworks (LangChain, CrewAI, AutoGen, Semantic Kernel) are location-blind. They route tasks by capability and cost. They have no mechanism to:

  • Verify that an agent has territorial binding to the task's origin cell
  • Enforce jurisdictional constraints before dispatch
  • Produce a cryptographic audit trail linking AI actions to human authorization
  • Detect and reject geometrically invalid payloads before they propagate
  • Generate compliance reports mapping to EU AI Act, NIST AI RMF, ISO 42001

2. Terminology

TermDefinition
AgentAn Ed25519-authenticated AI entity registered in the GEIANT agent registry
PrincipalThe human who authorizes an agent via a signed DelegationCertificate
H3 CellA hexagonal cell in the Uber H3 geospatial index (resolution 0–15)
FacetA capability scope (e.g., energy, transport, health)
TierTrust level based on operational history (Provisioned → Sovereign)
BreadcrumbA signed, hash-chained audit record of a single agent operation
EpochA Merkle rollup of N consecutive breadcrumbs into a compact summary
Delegation CertificateA signed authorization from a human principal to an agent
Compliance ReportA structured JSON output mapping agent activity to regulatory requirements
GEPGeoEpoch Protocol — geographic addressing fabric (Layer 1)
TrIPTrajectory-based Recognition of Identity Protocol (IETF draft)
MCPModel Context Protocol — tool invocation standard for AI agents

3. Data Structures

3.1 GeiantTask

interface GeiantTask {
id: string;
originCell: string; // H3 cell where the task originates
requiredFacet: string;
minTier: AgentTier;
callerPublicKey?: string; // Ed25519 public key (64 hex)
callerSignature?: string; // Ed25519 signature (128 hex)
delegationCert: DelegationCertificate;
geometries?: GeoJSON.Feature[];
payload?: Record<string, unknown>;
}

3.2 DelegationCertificate

interface DelegationCertificate {
version: 1;
agent_pk: string; // Agent Ed25519 public key (64 hex)
principal_pk: string; // Human principal Ed25519 public key (64 hex)
h3_cells: string[]; // Allowed jurisdictional H3 cells
facets: string[]; // Allowed capability scopes
not_before: string; // ISO 8601 validity start
not_after: string; // ISO 8601 validity end
max_depth: number; // Max sub-delegation depth (0 = none)
constraints?: {
max_ops_per_hour?: number;
allowed_tools?: string[];
denied_tools?: string[];
require_human_approval?: string[];
max_cost_per_op_xlm?: number;
};
principal_signature: string; // Ed25519 signature by principal (128 hex)
}

Certificate hash: SHA-256(canonical_json(cert_without_signature)).

3.3 RoutingDecision

interface RoutingDecision {
taskId: string;
success: boolean;
selectedAgent?: AgentManifest;
jurisdiction?: JurisdictionResult;
delegationValidation?: DelegationValidationResult;
geometryValidation?: GeometryValidationResult;
breadcrumb: VirtualBreadcrumbBlock;
routedAt: string;
handoff?: HandoffDecision;
geometryRepaired?: boolean;
rejectionReason?: RejectionCode;
rejectionDetails?: string;
}

3.4 AgentTier

enum AgentTier {
PROVISIONED = 'provisioned', // 0 ops, 0% trust
OBSERVED = 'observed', // 50+ ops, 25% trust
TRUSTED = 'trusted', // 500+ ops, 60% trust
CERTIFIED = 'certified', // 5,000+ ops, 85% trust
SOVEREIGN = 'sovereign', // 50,000+ ops, 99% trust
}

3.5 VirtualBreadcrumbBlock (NEW in v0.2)

interface VirtualBreadcrumbBlock {
index: number;
identity_public_key: string; // Agent Ed25519 PK (64 hex)
timestamp: string; // ISO 8601 UTC
location_cell: string; // H3 cell
location_resolution: number; // H3 resolution
context_digest: string; // SHA-256(SHA-256(input) + ":" + SHA-256(output))
previous_hash: string | null; // null for genesis block
meta_flags: {
tool_duration_ms: number;
input_hash: string;
output_hash: string;
tier: AgentTier;
model_id?: string;
runpod_endpoint?: string;
error?: string;
};
signature: string; // Ed25519 signature (128 hex)
block_hash: string; // SHA-256(data_to_sign + ":" + signature)
delegation_cert_hash: string;
tool_name: string;
facet: string;
}

Signing: data_to_sign = canonical_json({index, identity, timestamp, loc_cell, loc_res, context, prev_hash, meta, delegation_cert_hash, tool_name, facet})signature = Ed25519.sign(data_to_sign, sk)block_hash = SHA-256(data_to_sign + ":" + signature).

3.6 AgentEpochSummary (NEW in v0.2)

interface AgentEpochSummary {
epoch_index: number;
agent_pk: string;
start_time: string;
end_time: string;
start_block_index: number;
end_block_index: number;
block_count: number;
merkle_root: string; // Binary Merkle tree over block_hash values
previous_epoch_hash: string | null;
delegation_cert_hash: string;
tools_used: string[];
jurisdiction_cells: string[];
tier_at_close: AgentTier;
signature: string;
epoch_hash: string;
}

Merkle tree: binary. Leaves = block_hash values. Internal = SHA-256(left + ":" + right). Odd leaf duplicated.

3.7 ComplianceReport (NEW in v0.2)

interface ComplianceReport {
version: 1;
generated_at: string;
agent_pk: string;
agent_handle: string;
principal_pk: string;
reporting_period: { from: string; to: string };
total_operations: number;
operations_by_tool: Record<string, number>;
jurisdiction_cells: string[];
chain_verification: ChainVerificationResult;
epochs: AgentEpochSummary[];
delegation_certificate: DelegationCertificate;
delegation_chain_depth: number;
human_approvals_required: number;
human_approvals_received: number;
current_tier: AgentTier;
trust_score: number;
violations: ComplianceViolation[];
}

3.8 Trust Score (NEW in v0.2)

score = min(ops/5000, 0.4)×100 + min(cells/20, 0.3)×100 + min(days/365, 0.2)×100 + (chain_valid ? 10 : 0)

Clamped to [0, 100].


4. Routing Protocol

4.1 Four-Gate Enforcement

Task → Gate 1 (Signature) → Gate 2 (Jurisdiction) → Gate 3 (Delegation) → Gate 4 (Geometry) → Dispatch

Every gate failure returns a structured rejection with a VirtualBreadcrumbBlock.

4.2 L1 Cross-Jurisdictional Handoff

Scans up to 3 adjacent H3 rings. Requires max_depth > 0. GDPR-origin tasks only hand off to equivalent-protection jurisdictions.

4.3 L2 Geometry Self-Healing

GEOS-backed repair: buffer(0), ring normalization, precision reduction.


5. HTTP API

Base URL: https://packagesmcp-perception-production.up.railway.app

5.1 Health

GET /health → Service status, chain tip, audit state.

5.2 MCP SSE Transport

GET /sse → SSE stream. POST /message?sessionId=X → MCP JSON-RPC.

Note: express.json() MUST NOT be applied to /message — SSEServerTransport reads the raw body.

5.3 MCP Tools

ToolAuditDescription
perception_fetch_tileSentinel-2 L2A tile via STAC
perception_classifyPrithvi-EO-2.0 classification
perception_embedClay v1.5 embeddings
perception_weatherOpen-Meteo ERA5 weather

5.4 Weather Test

GET /test/weather → Quick diagnostic, drops a breadcrumb.

5.5 Epoch Rollup (NEW in v0.2)

POST /epoch/roll → Merkle-rolls all unrolled breadcrumbs into an AgentEpochSummary.

5.6 Compliance Report (NEW in v0.2)

GET /compliance or GET /compliance/:agent_pk → ComplianceReport JSON. Optional ?from=&to= date filters.


6. Rejection Reasons

CodeMeaning
signature_invalidSignature verification failed
no_jurisdictionH3 cell unresolvable
invalid_delegationCert expired, invalid sig, or scope mismatch
invalid_geometryGeometry invalid and self-healing failed
no_eligible_antNo matching agent, handoff failed
tier_insufficientAgents exist but below minTier
territory_mismatchNo agent covers the origin cell

7. Agent Audit Trail (NEW in v0.2)

7.1 Chain Integrity

Append-only, tamper-evident. Block N's previous_hash = block N-1's block_hash. Genesis has previous_hash: null. Modify block N → block_hash changes → all subsequent blocks invalid.

7.2 Context Digest

context_digest = SHA-256(SHA-256(input) + ":" + SHA-256(output)). Proves what was processed without storing actual data.

7.3 Verification Levels

LevelChecksCost
BlockSignature, hashO(1)
ChainLinks, gaps, timestampsO(n)
EpochMerkle root, epoch chainO(log n)
FullChain + delegation + jurisdictionO(n)

7.4 Supabase Schema

TableRLS
delegation_certificatesservice: full, anon: read
agent_breadcrumbsservice: full, anon: read
agent_epochsservice: full, anon: read
agent_registryservice: full, anon: read
compliance_violationsservice: full

Anon read enables third-party verifiability.


8. Jurisdiction Coverage

CountryCodeFrameworks
ItalyITGDPR, EU AI Act, eIDAS 2.0, Italian Civil Code
GermanyDEGDPR, EU AI Act, eIDAS 2.0, NetzDG
FranceFRGDPR, EU AI Act, eIDAS 2.0
SpainESGDPR, EU AI Act, eIDAS 2.0
SwitzerlandCHSwiss DPA (nDSG), FINMA
United KingdomGBUK GDPR
United StatesUSEO 14110, NIST AI RMF
CaliforniaUS-CAEO 14110, CCPA, Colorado SB 205
ChinaCNInterim Measures for GenAI, Algorithm Rules
BrazilBRLGPD
SingaporeSGPDPA

9. Relationship to GNS Protocol

GNS PrimitiveHuman UseGEIANT Agent Use
Ed25519 keypairIdentity credentialAgent identity + signing key
H3 cellLocation privacyJurisdictional binding
BreadcrumbsPhysical trajectoryVirtual audit trail
Trust scoreHumanity proofCompliance score + tier
FacetsRole separationCapability scoping
Stellar walletP2P paymentsAgent settlement
EpochsTrajectory summaryMerkle-rolled compliance
DelegationCertHuman → Agent authorization

10. Roadmap

PhaseDeliverableStatus
0 — Synthetic DataBenchmark dataset, routing logic✅ Complete
1 — Agent RegistrySupabase registry, MCP PostGIS + GDAL✅ Complete
2 — GeoRouterHTTP routing, four-gate enforcement✅ Complete
3 — Spatial MemoryH3-indexed geometry DAG✅ Complete
4 — PerceptionPrithvi-EO, Clay v1.5, ERA5, 62/62 tests✅ Complete
5.1 — Audit TrailBreadcrumbs, epochs, compliance, SSE✅ Complete (March 22, 2026)
5.2 — IDUP SettlementStellar payment routing⬜ Planned
5.3 — Multi-AgentCross-agent delegation chains⬜ Planned
6 — Full RuntimeMulti-agent orchestration, cloud marketplace⬜ Planned (Q3 2027)

11. Security Considerations

  • Ed25519 private keys MUST NOT leave the signing device.
  • DelegationCertificates MUST be validated on every operation.
  • Breadcrumbs MUST be signed; stub signatures prohibited in production.
  • The breadcrumb chain MUST be append-only with no delete/modify mechanism.
  • Supabase TIMESTAMPTZ returns +00:00; implementations MUST normalize to Z before signature verification.
  • Channel binding tokens (CBT) SHOULD be used for MCP SSE connections.
  • express.json() MUST NOT be applied to MCP /message route (SSEServerTransport reads raw body).

12. IANA Considerations

This document has no IANA actions.


13. References


ULISSY s.r.l. — Via Gaetano Sacchi 16, 00153 Roma [email protected] | https://geiant.com | https://docs.geiant.com