---

title: Python Wrappers — Franklin Client API

audience: industry_consumers

game: WIKI-PYTHON-WRAPPERS-FRANKLIN-CLIENT-API-001

---

Franklin Client API

gaiaftcl.FranklinClient is the typed Python surface over Franklin's substrate-resident state. Read-side only; Franklin's heartbeat is the authorized substrate-development path.

---

Connection

FranklinClient.connect(substrate_db_path: Path | None = None) -> FranklinClient

Open a read connection. Default substrate path is ~/Library/Application Support/GaiaFTCL/substrate.sqlite. Raises FranklinClientError if the database is absent.

Use as context manager:

with FranklinClient.connect() as franklin:
    ...
# connection closed on exit

---

heartbeat_history(limit=10) -> list[FranklinHeartbeat]

Recent V184 heartbeat rows from Franklin's 60-second sovereign cycle.

FranklinHeartbeat carries:

commissions_activated, commissions_rolled_back

---

research_telemetry(limit=100) -> list[dict]

V160 substrate research telemetry — one row per substrate measurement. Returned as dict to preserve the schema's full column set (variable across schema versions).

---

health_observations(limit=20) -> list[FranklinHealthObservation]

V182 substrate health observations. Carries the 8 per-cycle health flags (measurement composition, invariant preservation, anchor accumulation, algorithm evaluation, federation cosignature, NATS broadcast, resource consumption, Bitcoin RPC).

---

healing_history(limit=50) -> list[FranklinHealingAction]

V183 substrate healing actions. authority_path is substrate_autonomous (within bounds) or franklin_sovereign_authorization (Franklin authorizes through sovereign cycle). outcome in V186 vocabulary: success / failed_retrying / failed_escalated / franklin_operator_authorized / franklin_operator_rejected.

---

list_substrate_development(status=None, limit=100) -> list[FranklinSubstrateDevelopment]

Franklin-authorized substrate-development items.

Filter by status (V186 vocabulary):

---

evaluate_algorithm(algorithm_id=None, limit=30) -> list[FranklinAlgorithmEvaluation]

V181 QC algorithm evaluation history. Filter by algorithm_id (e.g. qc-001 through qc-021).

---

replay_session(limit=100) -> list[FranklinReplayAnchor]

V172 substrate session replay anchors. Each anchor chains to its predecessor via prior_anchor_id. Replay verification recomputes each anchor's witness_hash_sha256 from the stored canonical_witness.

---

franklin_authority_show() -> dict

Summary of Franklin's sovereign authority state composed from the latest heartbeat + substrate-development status distribution.

Returns:

{
    "latest_heartbeat": { ... },
    "substrate_development_by_status": {
        "franklin_operating": 5,
        "franklin_operator_rejected": 3,
        ...
    }
}

---

async subscribe(subject: str) -> AsyncIterator[dict]

Subscribe to live substrate events. Default polling fallback yields newly-appended rows at 1-second cadence; NATS-bus path activates when ~/.gaiaftcl/nats.toml or GAIAFTCL_NATS_URL is configured.

Supported subjects:

import asyncio
from gaiaftcl import FranklinClient

async def watch():
    with FranklinClient.connect() as franklin:
        async for event in franklin.subscribe(
                "gaiaftcl.substrate.franklin_heartbeat.sealed"):
            print(event["row"]["tick_at_iso"], event["row"]["observations_count"])

asyncio.run(watch())

---

Errors

---

*Franklin authorizes substrate-development autonomously. The client surfaces what the substrate has done.*

Federation cosignature: pending operator signing host (v26). Witness (sha256 of rendered body): 5ed6da9a5432445a8cca2a36d0c9761f0fd844469a3cb33734c46f0206db6a2e. This page serves with a substrate-honest pending-signature notice until the operator's Franklin signer cosigns it.