Redis-backed orchestration. Complete audit trail. Zero data leakage.
Chronological ledger storing artefacts, claims, and bids. Append-only for complete audit trail. Every decision traced to source.
Docker-isolated agents bid for work. Execute with tools (Git, linters, etc.). Commit results with cryptographic signatures.
Complete history in Redis + Git. Every artefact timestamped. Every claim logged. When the regulator calls, you have the answer.
End-to-end audit trail for AML alert ALT-2026-001. Three sequential human consultations — L1 triage, L2 investigation, MLRO sign-off — each producing a named, cryptographically linked artefact. Under POCA 2002, the MLRO carries personal liability for SAR filing decisions. Artefact 36df4891 is that decision: timestamped, hashed, permanently recorded.
[14:12:32.286] ✨ Artefact created: by=orchestrator, type=SystemConfig, id=92c7bee8
[14:12:41.145] 🏆 Claim granted: agent=L1TriageSynthesizer, claim=fanin:f3, type=exclusive
[14:12:41.145] 🏆 Claim granted: agent=DataGathererTxHistory, claim=2a3bd4db, type=claim
[14:12:41.145] 🏆 Claim granted: agent=DataGathererKyc, claim=2a3bd4db, type=claim
[14:12:41.145] 🏆 Claim granted: agent=DataGathererSanctions, claim=2a3bd4db, type=claim
[14:12:41.145] ✨ Artefact created: by=user, type=GoalDefined, id=f3a3353b (anchored to spine=92c7bee8)
[14:12:42.343] 🏆 Claim granted: agent=L1KycSpecialist, claim=7b546aa3, type=claim
[14:12:42.343] 🏆 Claim granted: agent=L1CounterpartySpecialist, claim=2a04c899, type=claim
[14:12:42.343] ✨ Artefact created: by=DataGathererSanctions, type=SanctionsData, id=e30ce293
[14:12:42.343] ✨ Artefact created: by=DataGathererKyc, type=KycData, id=d66b18ec
[14:12:42.344] ✨ Artefact created: by=DataGathererTxHistory, type=TxHistoryData, id=9e960558
[14:12:43.857] ✨ Artefact created: by=L1BehavioralCalculator, type=CalculatedMetrics, id=26848142
[14:12:47.661] ✨ Artefact created: by=L1CounterpartySpecialist, type=CounterpartyAnalysis, id=fcc4afe5
[14:12:47.997] ✨ Artefact created: by=L1KycSpecialist, type=KycAnalysis, id=23f71bd9
[14:12:48.796] ✅ Review Approved - Jurisdiction assessment correct: by=L1CounterpartyValidator for artefact fcc4afe5 (review: 044c2898)
[14:12:49.137] ✅ Review Approved - KYC analysis schema valid: by=L1KycValidator for artefact 23f71bd9 (review: aaf3c5f4)
[14:12:50.247] 🏆 Claim granted: agent=L1BehavioralValidator, claim=64b7e11e, type=review
[14:12:50.247] ✨ Artefact created: by=L1BehavioralAnalyst, type=BehavioralAnalysis, id=2db32217
[14:12:51.386] ✅ Review Approved - Schema validation passed: by=L1BehavioralValidator for artefact 2db32217 (review: 00227b55)
[14:12:57.975] ✨ Artefact created: by=L1TriageSynthesizer, type=L1TriageDossier, id=fdc06213
[14:12:57.975] 🏆 Claim granted: agent=L1DossierValidator@a2c9bd10fd7e, claim=111f0b21, type=review
[14:12:59.116] ✅ Review Approved - Dossier synthesis complete: by=L1DossierValidator for artefact fdc06213 (review: a7bc8525)
[14:12:57.975] 🏆 Claim granted: agent=L1Gatekeeper@d2760c47cc39, claim=111f0b21, type=exclusive
[14:13:00.164] ❓ Question asked: by=L1Gatekeeper, type=L1Question, id=5f2c866a
[14:13:30.167] 💬 Answer provided: by=user, type=L1Answer, id=fb11fe99
[14:12:57.975] 🏆 Claim granted: agent=L1Gatekeeper, claim=2611159e, type=exclusive
[14:13:31.209] 🔄 Artefact Reworked (v1): by=L1Gatekeeper, type=L1TriageDecisionEscalate, id=92d5006d
[14:13:31.209] ✨ Artefact created: by=L1Gatekeeper, type=L1TriageDecisionEscalate, id=92d5006d
[14:13:31.209] 🏆 Claim granted: agent=L2DataGathererOsint@2bf94f114ec0, claim=6139dceb, type=claim
[14:13:31.209] 🏆 Claim granted: agent=L2DataGathererMedia@7f18cc5c640b, claim=6139dceb, type=claim
[14:13:32.422] ✨ Artefact created: by=L2DataGathererOsint, type=L2OsintData, id=031913d6
[14:13:32.422] ✨ Artefact created: by=L2DataGathererMedia, type=L2MediaData, id=9403cd58
[14:13:32.422] 🏆 Claim granted: agent=L2OsintSpecialist@cc290d5c9e5d, claim=8b6948bf, type=claim
[14:13:32.422] 🏆 Claim granted: agent=L2MediaSpecialist@2f581be697ae, claim=b2f94aee, type=claim
[14:13:37.177] ✨ Artefact created: by=L2MediaSpecialist, type=L2MediaAnalysis, id=26838df3
[14:13:37.177] 🏆 Claim granted: agent=L2MediaValidator@b747d61a7e36, claim=43e7b251, type=review
[14:13:38.327] ✅ Review Approved - Media analysis complete: by=L2MediaValidator for artefact 26838df3 (review: 708ca7c9)
[14:13:39.871] ✨ Artefact created: by=L2OsintSpecialist, type=L2OsintAnalysis, id=6d51f420
[14:13:39.871] 🏆 Claim granted: agent=L2OsintValidator@3c3abb5c8914, claim=fa739bcf, type=review
[14:13:41.023] ✅ Review Approved - OSINT analysis complete: by=L2OsintValidator for artefact 6d51f420 (review: 61c4eeeb)
[14:13:39.871] 🏆 Claim granted: agent=ShellCompanySpecialist@246b2c6c9172, claim=fa739bcf, type=claim
[14:13:47.384] ✨ Artefact created: by=ShellCompanySpecialist, type=ShellCompanyAssessment, id=8528e1a4
[14:13:47.384] 🏆 Claim granted: agent=ShellCompanyValidator@be3b43854809, claim=6f6ed9bd, type=review
[14:13:48.535] ✅ Review Approved - Shell company assessment complete: by=ShellCompanyValidator for artefact 8528e1a4 (review: 9bb83a59)
[14:13:53.633] ✨ Artefact created: by=L2Investigator, type=L2InvestigationReport, id=f43af51b
[14:13:53.633] 🏆 Claim granted: agent=L2ReportValidator@1a33c0e825ff, claim=39b9a31a, type=review
[14:13:54.780] ✅ Review Approved - Investigation report validated: by=L2ReportValidator for artefact f43af51b (review: 107f6d86)
[14:13:53.633] 🏆 Claim granted: agent=L2Gatekeeper@e2b406dbee1a, claim=39b9a31a, type=exclusive
[14:13:55.836] ❓ Question asked: by=L2Gatekeeper, type=L2Question, id=2cb63db4
[14:14:04.512] 💬 Answer provided: by=user, type=L2Answer, id=b446ac58
[14:13:53.633] 🏆 Claim granted: agent=L2Gatekeeper, claim=2a3385cb, type=exclusive
[14:14:05.547] ✨ Artefact created: by=L2Gatekeeper, type=L2SarRecommendation, id=694eb606
[14:14:05.547] 🔄 Artefact Reworked (v1): by=L2Gatekeeper, type=L2SarRecommendation, id=694eb606
[14:14:05.547] 🏆 Claim granted: agent=MlroGatekeeper@d483a880dc7e, claim=d9944a9b, type=exclusive
[14:14:06.709] ❓ Question asked: by=MlroGatekeeper, type=MLROQuestion, id=ca31c068
[14:14:16.340] 💬 Answer provided: by=user, type=MLROAnswer, id=2a733b47
[14:14:05.547] 🏆 Claim granted: agent=MlroGatekeeper, claim=0439b2af, type=exclusive
[14:14:17.370] 🔄 Artefact Reworked (v1): by=MlroGatekeeper, type=MLROApproval, id=36df4891
[14:14:17.370] ✨ Artefact created: by=MlroGatekeeper, type=MLROApproval, id=36df4891
[14:14:17.370] 🏆 Claim granted: agent=SarDrafter@cacebfecefd4, claim=ed9d85ea, type=exclusive
[14:14:18.590] ✨ Artefact created: by=SarDrafter, type=SarDraft, id=0333e3e9
[14:14:20.742] 🏁 Workflow complete [status=complete]: workflow=b6d2509e, goal={"alert_id": "ALT-2026-001", "subject_name": "hans_mueller"}
Forensic Replay: Because every event is written to an append-only ledger, an auditor can reconstruct the exact state at any point in the chain — including the system_manifest_id embedded in each artefact, which identifies the precise version of holt.yml governing each agent at the moment of its decision.
Three human consultations. Zero automated approvals.
L1Gatekeeper, L2Gatekeeper, MlroGatekeeper — three independent human consultations, each producing a named, hashed artefact. The system cannot advance without a human decision at each tier. This is not a policy statement. It is a hard architectural constraint.
L1TriageDecisionEscalate (92d5006d) unlocks the L2 investigation. L2SarRecommendation (694eb606) triggers MLRO review. MLROApproval (36df4891) authorises the SAR draft. Remove any link and the chain breaks. A regulator can follow it forward or backward to any point.
Artefact 36df4891 is the MLRO's approval decision: named agent, timestamp, parent hash — immutable. Under POCA 2002, the MLRO carries personal liability for SAR filing decisions. This is what they can show a regulator if that decision is ever questioned.
version: "1.0"
agents:
# Phase 1: Data ingest — reads from source, writes nothing upstream
DataGathererKyc:
image: aml-forensic/datagatherer-kyc:latest
bidding_strategy:
type: "claim"
target_types: ["GoalDefined"]
allowed_types: ["Failure", "KycData"]
network_access:
mode: restricted
allowed_domains: [] # zero egress
workspace:
mode: ro
volumes:
- "./data:/data:ro"
# Phase 2: AI analysis — restricted to named model endpoint
L1KycSpecialist:
image: aml-forensic/l1-kyc-specialist:latest
bidding_strategy:
type: "claim"
target_types: ["KycData"]
allowed_types: ["Failure", "KycAnalysis"]
network_access:
mode: restricted
allowed_domains: ["host.docker.internal"] # locally hosted LLM
workspace:
mode: ro
# Phase 3: Human gate — no automated approval path exists
L1Gatekeeper:
image: aml-forensic/l1-gatekeeper:latest
bidding_strategy:
type: "exclusive"
target_types: ["L1TriageDossier"]
allowed_types:
- "Question" # request human input
- "Failure" # system error
- "L1TriageDecisionEscalate" # elevate to L2
- "L1TriageDecisionDiscard" # close the alert
workspace:
mode: ro
network_access:
mode: restricted
allowed_domains: []
The engine enforces the boundary. Not the agent.
Each agent declares what it can consume (target_types) and what it can produce (allowed_types). The engine enforces both. DataGathererKyc can only produce KycData or Failure — it cannot write an analysis, escalate a case, or contact an external endpoint. This is not a coding convention. It is a runtime constraint.
L1Gatekeeper carries no Approval type in its allowed_types. The AI cannot produce an automated approval because the platform does not permit the type to exist. The only paths forward are a question, an escalation, or a discard. Human action is not a workflow step. It is a hard architectural boundary.
The AI cannot hallucinate a permission that does not exist. Security is not a guideline. It is architecture.
Most orchestration tools optimize for speed. Holt optimizes for proof.
| Feature | Standard CI/CD / Agents | Hearth Blackboard Architecture |
|---|---|---|
| The Log | Ephemeral text stream (Splunk/CloudWatch) | Immutable Event Ledger (Redis) |
| The Data | Piped to external SaaS clouds | Zero Egress (Your VPC Only) |
| The Payload | Opaque Containers (Black Box) | Hermetic & Signed (Images & Binaries) |
| The Audit | "Trust us, it ran." | "Here is the cryptographic proof." |
Request a demo to see how the Blackboard Architecture transforms AI from a compliance risk into a strategic asset.