
مسارات تدقيق مقاومة للعبث لوكلاء الذكاء الاصطناعي: سجلات Runtime Records مترابطة بسلسلة تجزئة (hash-chained)، بدون تبعيات، وقابلة للتحقق من قبل أي شخص.
سجلات وقت تشغيل مقاومة للعبث لوكلاء الذكاء الاصطناعي: مسار تدقيق يشغّله البائع ولا يمكنه تعديله.
كل إجراء يقوم به وكيلك (استدعاءات الأدوات، استدعاءات النماذج، الوصول إلى البيانات، الموافقات) يصبح سجلًا واحدًا في سجلّ مترابط التجزئة ذي بنية إلحاقية. يمكن لأي طرف يحمل نقطة تفتيش للسلسلة أن يتحقق من أن السجلات التي خلفها لم تُعدَّل أبدًا، دون الحاجة إلى الثقة بمن أنتجها. عندما يسأل فريق الأمان لدى عميلك «ماذا فعل وكيلك ببياناتنا؟»، تمنحه رابطًا بدلًا من فقرة. مراجعات الأمان تطرح بالفعل أسئلة عن الذكاء الاصطناعي إلى جانب قائمة فحص SOC 2، وما زال الضمان المكتوب يُقبل اليوم. الرهان الذي يقوم عليه هذا المشروع هو أن ذلك لن يستمر طويلًا.
تنسيق السجل مفتوح ومجاني التنفيذ. هذه الحزمة هي التنفيذ المرجعي: المُسجِّل، والمُتحقِّق، وعميل الشاهد، وخادم التقارير.
يُطلب منك وضع مُسجِّل داخل وكيلك. لا ينبغي أن تتقبّل ذلك على أنه أمر مسلَّم به:
pip install halo-record يثبّت حزمة واحدة بالضبط.لا حاجة إلى وكيل. مع uv، لا شيء يستلزم التثبيت:
uvx --from halo-record halo demo --serve
أو بالطريقة التقليدية:
pip install halo-record
halo demo --serve
أيُّ الطريقتين يُنشئ هيكل موزّع وكيل دعم افتراضي بعميلين، ويشهد على السلاسل، ويقدّم تقارير وقت التشغيل المقيّدة (gated) لكل منهما، ويفتح لوحة تحكم المشغِّل في متصفحك. ثم جرّب اختبار العبث: احذف سطرًا من أحد ملفات .jsonl وأعد التحميل. التقرير سيلتقط ذلك.
سطر واحد عند الحدود:
from halo import trace
agent = trace(run_my_agent, profile="my-agent", log="audit.jsonl") # wraps your entrypoint; records every tool call to ./audit.jsonl
بدون log=، تُحفظ السجلات في ~/.halo/my-agent.jsonl (سلسلة واحدة لكل وكيل). أو استخدم المحوِّل لما تشغّله بالفعل (انظر الجدول أدناه). ثم اعرض التقرير:
halo report audit.jsonl -o report.html # one chain -> self-verifying HTML
halo serve ./records --port 8721 # all tenants, gated per customer
ينتهي البدء السريع عندما ترى تقرير وقت التشغيل الخاص بوكيلك في المتصفح. إذا حصلت على ملف JSONL دون تقرير، فثمة خلل ما: افتح مشكلة (issue).
| يُلتقط عند الحدود | يُستورد من القياس عن بُعد الحالي |
|---|
يحمل كل سجل وسم source، لذا يكشف التقرير كيف جُمعت كل قطعة دليل. السجلات الملتقطة والمستوردة تعيش في السلسلة نفسها.
أي شيء يُصدر OpenTelemetry GenAI spans (مثل CrewAI وLlamaIndex ومعظم أطر الوكلاء المزوّدة بأدوات OTel) يصل إلى السلسلة عبر محوّل OTel، وتأتي حزمة TypeScript مزوّدة بمحوّلات أصلية لـ Vercel AI SDK ولنظام الوكلاء في JavaScript. هل ينقصك محوّل لبيئتك التقنية؟ افتح مشكلة (issue). معظم المحوّلات نحو مئة سطر.
يُطلق Claude Code خطاف PostToolUse بعد كل استدعاء أداة. وجّهه إلى halo hook، فيصبح كل إجراء — كتابة ملفات، أوامر shell، استدعاءات موصلات MCP — سجلًا في سلسلة محلية. لا تغييرات في الكود؛ إدخال واحد في الإعدادات:
{
"hooks": {
"PostToolUse": [
{"matcher": "*", "hooks": [{"type": "command", "command": "halo hook"}]}
]
}
}
أضف ذلك إلى ~/.claude/settings.json وستصبح السجلات في ~/.halo/audit.jsonl (يمكنك تجاوز ذلك عبر $HALO_LOG). تُتجاوز الأدوات الخالصة للتنسيق (orchestration) التي لا تلمس بيانات أو شبكة أو حالة خارجية — تسجّل السلسلة إجراءات حدود الثقة، لا التفكير. اضبط HALO_HASH_ONLY=1 لتسجيل تجزئات المحتوى دون ملخصات. اضبط HALO_AGENT_VERSION (واختياريًا HALO_AGENT_MODEL) لربط كل سجل بالبناء البرمجي للوكيل الذي أنتجه — عندما يسأل مدقّق عن الإصدار الذي كان يعمل في نافذة زمنية معينة، يجيب التصدير بالعمود بدلًا من الاعتماد على التذكُّر.
إذا احتجت التقرير ليجيب عن «تحت أي قواعد حدث هذا التشغيل؟»، اضبط HALO_AUTHORITY_FILE على لقطة JSON للسلطة الفعلية (effective authority) للجلسة. أبقِها آمنة للخصوصية: تجزئات ومراجع، لا المطالبات الخام، ولا نصوص السياسات الخاصة، ولا الأسرار، ولا مخططات الأدوات الكاملة.
{
"snapshot_id": "auth_2026_07_08T1100Z",
"captured_at": "2026-07-08T11:00:00Z",
"scope": "session",
"workspace": {"path_hash": "sha256:...", "git_commit": "abc1234"},
"refs": [
{"kind": "project_rules", "id": "CLAUDE.md", "hash": "sha256:...", "loaded": true, "truncated": false},
{"kind": "mcp_tool_registry", "id": "filesystem", "hash": "sha256:..."}
],
"omissions": [{"kind": "private_policy", "reason": "customer_secret", "hash": "sha256:..."}],
"stale_if": ["project_rules_hash_changed", "mcp_tool_registry_hash_changed"]
}
HALO_AUTHORITY_FILE=./authority.json halo hook
تُختَم اللقطة في سلسلة التجزئة نفسها التي تضم سجلات الإجراءات. القيمة الافتراضية الجيدة هي لقطة واحدة على مستوى الجلسة في البداية، مع لقطة جديدة عند تغيّر القواعد أو المهارات (Skills) أو الخطافات أو سجلات أدوات MCP أو سياسة الضغط. لإبقاء الجلسات الطويلة خفيفة، تُضغط السجلات المتتالية ذات authority.snapshot_id نفسه بعد أول لقطة كاملة: تحتفظ السجلات اللاحقة فقط بـ {"snapshot_id": "...", "same_as_previous": true}. يبقى المؤشر مربوطًا بسلسلة التجزئة، لكن لا تتكرر كتلة refs/omissions/stale-if الضخمة في كل إجراء. ثم، كالمعتاد:
halo verify ~/.halo/audit.jsonl
halo report ~/.halo/audit.jsonl -o report.html
أي بيئة تشغيل وكلاء تعرّض خطاف ما بعد الإجراء يمكنها تغذية الأمر نفسه — يقرأ الخطاف حدثًا واحدًا بصيغة JSON من stdin ويُلحق سجلًا واحدًا.
كن دقيقًا بشأن ما يثبته كل مستوى — لأنها ادعاءات مختلفة، والاختلافات هي جوهر الفكرة:
السلسلة المُمسكة ذاتيًا تثبت النزاهة بالنسبة إلى رأس مُرسّخ: ما دام هناك رأس سلسلة يمسكه شخص بالفعل، يصبح أي تعديل أو إعادة ترتيب أو حذف في السجلات التي خلفه قابلاً للاكتشاف. وبمفردها — قبل أن يرى أي شخص خارج نطاق المشغِّل رأسًا — تثبت السلسلة الاتساق الداخلي، لا التاريخ: يمكن لمشغِّل أن يُسقط سجلًا ويعيد الختم، وسيتحقق الملف الجديد. تصبح السلسلة ملتزمة تاريخيًا في اللحظة التي يغادر فيها رأسها سيطرة المشغِّل.
هذا هو الشاهد: طرف خارج نطاق المشغِّل يمسك بصمات دورية للسلسلة (عددًا وتجزئة رأس، لا شيء غير ذلك). نقاط التفتيش تجعل إعادة كتابة التاريخ الملتزم قابلة للاكتشاف، ونقطة التفتيش الفائتة بحد ذاتها حدث مرئي:
halo anchor audit.jsonl witness.jsonl # anchor a checkpoint to a local witness
halo anchor audit.jsonl witness.jsonl --check # completeness verdict against it
حدود أخرى، بعبارة صريحة: لا السلسلة ولا الشاهد تثبت أن كل إجراء واقعي مرّ عبر المسجِّل. هذا هو اكتمال الالتقاط — وهي خاصية لموضع المسجِّل في الحزمة التقنية (الأدوات الأصلية، الخطافات، استيعاب البوابة)، وليست خاصية لأي تجزئة. تحمل السجلات وسم source لهذا السبب تحديدًا.
يمكن لأي شخص تشغيل شاهد. الشاهد الذي تشغّله بنفسك يُلزم التاريخ تجاه نفسك؛ أما إلزامه تجاه عميلك فيتطلّب شاهدًا لديه سبب للثقة به. البروتوكول مفتوح في الحالتين.
الشاهد المُستضاف والمعترف به هو السبيل الذي سيُبقي هذا المشروع مستدامًا. وصول مبكر: [email protected].
halo-record هو طبقة أدلة، وليس شهادة اعتماد. إنه يُنتج الأثر الذي تطلبه أطر التقييم مرارًا بكلمات مختلفة:
AARM.md.ATC.md.لا يصدّق أيٌّ من هذا أي شيء بحد ذاته. إنه يمنح المقيِّم شيئًا قابلاً للتحقق لينظر إليه. الحدود — ما لا يفعله halo-record عمدًا، وماذا تقول عندما يسأل مراجع — موثقة في LIMITS.md.
halo verify validate schema + hash chain (non-zero exit on failure; CI-friendly)
halo report render a chain as a self-verifying HTML Runtime Report
(--from/--to: a date-windowed report covering only the review period)
halo serve serve per-tenant reports over HTTP, access-scoped per customer
halo grant designate a report recipient (email or domain)
halo anchor witness a chain head, or --check completeness
halo demo scaffold the full vendor demo (record -> witness -> gated report)
halo export date-bounded evidence export: CSV + manifest tied to the chain head
halo sample emit a valid example log
halo hash canonical sha256 of a JSON value
halo hook Claude Code PostToolUse hook
لحساب تجزئة سجل: خذ السجل مستبعدًا integrity.hash، مع ضبط integrity.prev_hash على تجزئة السجل السابق؛ طبّعه باستخدام RFC 8785 (JSON Canonicalization Scheme)؛ ثم طبّق SHA-256 على البايتات. قيمة prev_hash للسجل الأول هي 64 صفرًا. يعيد التحقق حساب كل تجزئة ويفحص كل رابط. لا يُشترط أي سر؛ هذا هو جوهر الفكرة.
هل تظن أنك تستطيع العبث بسلسلة دون أن يلاحظ المُتحقِّق؟ المحاولات والنتائج هنا.
المرجع الكامل للحقول: halo-record.schema.json.
المسجِّل نفسه متاح لـ Node: halo-record-ts. نفس تنسيق السلسلة، نفس بروتوكول الشاهد. السجلات المكتوبة بأيٍّ من اللغتين تتحقق مع أيٍّ من المُتحقِّقين.
المشكلات (issues) والمناقشات وطلبات السحب (pull requests) مرحّب بها — انظر CONTRIBUTING.md للقواعد الأساسية (النسخة المختصرة: اختبارات مطلوبة، طلبات سحب صغيرة، تغييرات المخطط تُناقَش أولًا).
Apache-2.0
المسجِّل الأصلي (from halo import trace) | OpenTelemetry GenAI spans |
| معترض MCP | استدعاءات LiteLLM |
| استدعاء LangChain / LangGraph | تصدير Langfuse |
| خطافات OpenAI Agents SDK | أي سجل بوابة / وكيل عكسي |
| خطاف Claude Code / Claude Agent SDK |
| الادعاء | سلسلة مُمسكة ذاتيًا | + نقاط تفتيش خارجية | + التقاط موثوق |
|---|
| كشف التعديلات على أثر مُرسّخ | ✔ | ✔ | ✔ |
| كشف إعادة كتابة التاريخ الملتزم | — | ✔ | ✔ |
| كشف نقاط التفتيش الفائتة/المتأخرة | — | ✔ (وتيرة متفق عليها) | ✔ |
| إثبات أن كل إجراء سُجِّل | — | — | يعتمد على حدود الالتقاط |