Add orynq-ai-auditability community ability#249
Add orynq-ai-auditability community ability#249realdecimalist wants to merge 3 commits intoopenhome-dev:devfrom
Conversation
🔀 Branch Merge CheckPR direction: ✅ Passed — |
✅ Community PR Path Check — PassedAll changed files are inside the |
✅ Ability Validation Passed |
🔍 Lint Results✅
|
Creates tamper-proof, blockchain-anchored audit trails for AI conversations using Orynq's Proof-of-Inference protocol. - Builds SHA-256 rolling hash chains where each entry links to the previous one, making any tampering detectable - Uploads trace data to the Materios blob gateway (permissionless, no API key required) - The cert daemon committee (10 independent attestors) verifies data availability and certifies the receipt - Certified receipts are batched into Cardano mainnet anchor transactions (metadata label 8746) Trigger phrases: "audit my AI", "run orynq", "anchor this session", "proof of inference", "blockchain audit", etc. Docs: https://docs.fluxpointstudios.com/materios-partner-chain Explorer: https://materios.fluxpointstudios.com/explorer SDK: https://github.com/flux-point-studios/orynq-sdk
fa50a7a to
b7a9b86
Compare
uzair401
left a comment
There was a problem hiding this comment.
Suggestion: Refactor as a Background Daemon
The hash chain logic and Materios/orynq-sdk integration look great — the rolling SHA-256 chain with content hashing and the privacy-first approach (only hashes on-chain, never raw content) are exactly right for AI auditability.
However, I think this would work much better as a background daemon instead of the current conversational loop pattern. Right now the user has to activate the trigger and dictate messages one by one for them to be hashed — but the real power of orynq's Proof-of-Inference is capturing AI agent actions passively and continuously. A background daemon would let the SDK do what it's designed for: building cryptographic receipts of every interaction automatically.
Suggested approach
Split into background.py + main.py:
-
background.py— Runs silently in awhile Trueloop, pollsget_full_message_history()every 60-90s, hashes new messages into the rolling chain. This gives you continuous process tracing, every conversation turn gets a cryptographic receipt without the user doing anything. -
main.py— Triggered when the user says Trigger words. Reads the persisted chain, summarizes it, and handles the Materios upload / blockchain anchoring with user consent. This is where the user interacts with the orynq-sdk's anchoring options.
This way the hash chain builds up passively throughout the session, the chain is persisted across sessions via file storage, and the user can verify or anchor it anytime through the foreground ability. Your existing logic (_build_hash_chain_entry, _build_trace_content, _anchor_to_materios) is reusable as-is — it just needs to move into the right files.
Relevant docs
- Background Ability Template — daemon pattern with
while True+session_tasks.sleep() - Conversation Memory & History —
get_full_message_history()for polling messages each cycle - File Storage — persisting the chain across sessions
- Session Tasks — use
session_tasks.sleep()in the daemon loop
Happy to help if you have questions on the daemon pattern.
|
Hello @realdecimalist, please review the suggestions and implement the changes. Once done, we’ll reopen the PR and I’ll review it. Also, please use the following audit prompt to improve voice naturalness, UX, and robustness for real-world spoken interactions: "You are auditing a voice ability built for native US English speakers. The ability runs |
Summary
Adds a community ability that creates tamper-proof, blockchain-anchored audit trails for AI conversations using Orynq's Proof-of-Inference protocol.
8746)No API key or wallet setup required. Works out of the box.
Files
main.pyREADME.md__init__.pyLive Infrastructure
Checklist
devbranchcommunity/orynq-ai-auditability/main.pyextendsMatchingCapabilitywithregister_capability+callREADME.mdwith description, trigger words, and setupresume_normal_flow()called on every exit path (infinallyblock)print()statements (useseditor_logging_handler)🤖 Generated with Claude Code