Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

أنبوب الخطاف

ملف precc-hook الثنائي هو جوهر PRECC. يقع بين Claude Code والصدفة، ويعالج كل أمر bash في أقل من 5 ميلي ثانية.

كيف يستدعي Claude Code الخطاف

يدعم Claude Code خطافات PreToolUse – برامج خارجية يمكنها فحص وتعديل مدخلات الأدوات قبل التنفيذ. عندما يكون Claude على وشك تشغيل أمر bash، يرسل JSON إلى precc-hook عبر stdin ويقرأ الاستجابة من stdout.

مراحل الأنبوب

Claude Code
    |
    v
+---------------------------+
| 1. Parse JSON stdin       |  Read the command from Claude Code
+---------------------------+
    |
    v
+---------------------------+
| 2. Skill matching         |  Query heuristics.db for matching skills (Pillar 4)
+---------------------------+
    |
    v
+---------------------------+
| 3. Directory correction   |  Resolve correct working directory (Pillar 1)
+---------------------------+
    |
    v
+---------------------------+
| 4. GDB check              |  Detect debug opportunities (Pillar 2)
+---------------------------+
    |
    v
+---------------------------+
| 5. RTK rewriting          |  Apply command rewrites for token savings
+---------------------------+
    |
    v
+---------------------------+
| 6. Emit JSON stdout       |  Return modified command to Claude Code
+---------------------------+
    |
    v
  Shell executes corrected command

مثال: إدخال وإخراج JSON

الإدخال (من Claude Code)

{
  "tool_input": {
    "command": "cargo build"
  }
}

يكتشف PRECC أن الدليل الحالي لا يحتوي على Cargo.toml، لكن ./myapp/Cargo.toml موجود.

الإخراج (إلى Claude Code)

{
  "hookSpecificOutput": {
    "updatedInput": {
      "command": "cd /home/user/projects/myapp && cargo build"
    }
  }
}

إذا لم تكن هناك حاجة للتعديل، يكون updatedInput.command فارغًا ويستخدم Claude Code الأمر الأصلي.

تفاصيل المراحل

المرحلة 1: تحليل JSON

يقرأ كائن JSON الكامل من stdin. يستخرج tool_input.command. إذا فشل التحليل، يخرج الخطاف فورًا ويستخدم Claude Code الأمر الأصلي (تصميم fail-open).

المرحلة 2: مطابقة المهارات

يستعلم قاعدة بيانات SQLite الاستدلالية عن المهارات التي يتطابق نمط تشغيلها مع الأمر. يتم التحقق من المهارات بترتيب الأولوية. يتم تقييم مهارات TOML المدمجة والمهارات المستخرجة.

المرحلة 3: تصحيح الدليل

لأوامر البناء (cargo، go، make، npm، python، إلخ)، يتحقق مما إذا كان ملف المشروع المتوقع موجودًا في الدليل الحالي. إذا لم يكن كذلك، يفحص الدلائل القريبة للعثور على أقرب تطابق ويضيف cd <dir> && في البداية.

يستخدم مسح الدليل فهرس نظام ملفات مخزنًا مؤقتًا مع TTL مدته 5 ثوانٍ للحفاظ على السرعة.

المرحلة 4: فحص GDB

إذا كان من المحتمل أن ينتج الأمر عطلًا (مثل تشغيل ملف ثنائي للتصحيح)، يمكن لـ PRECC اقتراح أو حقن أغلفة GDB لالتقاط مخرجات تصحيح منظمة بدلاً من سجلات الأعطال الخام.

المرحلة 5: إعادة كتابة RTK

يطبق قواعد RTK (مجموعة أدوات إعادة الكتابة) التي تختصر الأوامر المطولة وتقمع المخرجات المزعجة أو تعيد هيكلة الأوامر لكفاءة الرموز.

المرحلة 6: إصدار JSON

يُسلسل الأمر المعدل مرة أخرى إلى JSON ويكتبه إلى stdout. إذا لم يتم إجراء تغييرات، تشير المخرجات إلى Claude Code لاستخدام الأمر الأصلي.

الأداء

يكتمل الأنبوب بأكمله في أقل من 5 ميلي ثانية (p99). التحسينات الرئيسية:

  • SQLite في وضع WAL للقراءات المتزامنة بدون قفل
  • أنماط regex مترجمة مسبقًا لمطابقة المهارات
  • عمليات مسح نظام الملفات المخزنة مؤقتًا (TTL مدته 5 ثوانٍ)
  • لا توجد مكالمات شبكة في المسار الساخن
  • Fail-open: أي خطأ يعود إلى الأمر الأصلي

اختبار الخطاف يدويًا

يمكنك استدعاء الخطاف مباشرة:

$ echo '{"tool_input":{"command":"cargo build"}}' | precc-hook
{"hookSpecificOutput":{"updatedInput":{"command":"cd /home/user/myapp && cargo build"}}}