انتقل إلى المحتوى الرئيسي

الوحدة 15 — إتقان الكلفة والأمان والنشر ضمن فريق

وضعت الوحدة السابقة Claude Code في cron، وفي PR على GitHub Actions، وفي SDK Python. يبقى ما يحسم استمرار Kiosque في أكتوبر: كم يكلّف، وماذا يرى، وكيف يُنصَّب بشكل نظيف لخمسة مطوّرين. ثلاثة محاور — الكلفة، والسياق، والأمان — على قاعدة واحدة: كلّ ما ليس ضروريًّا للدور الجاري يكلّف رموزًا ويوسّع سطح الهجوم.

قراءة /usage

/usage هو ردّ الفعل الأوّل. سطر Total cost في قسم Session يعرض الكلفة المحلّيّة، محسوبةً من الرموز على السعر المعروض؛ إن كان modelPricing مُدارٌ ساريًا، تظهر الإشارة at your organization's configured rates. في Pro/Max، هذا الرقم إرشاديّ؛ الفوترة الفعليّة عبر أرصدة الاستعمال، مرئيّة في Usage credits وقابلة للإدارة عبر /usage-credits. /cost و/stats بديلان.

منذ الجواب الثاني، يُضاف سطر Prompt cache (main): 14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · warm (1h TTL, last activity 40s ago). نسبة قراءة مرتفعة تعني أنّ المحادثة تقرأ في الغالب من الذاكرة المُخبَّأة، وتُفوتَر بتعرفة «cached» (نحو 10 ٪ من تعرفة الدخل). miss هو طلب أعاد معالجة أكثر من 5 ٪ ولا أقلّ من 2000 رمز كان يمكن تقديمه من الذاكرة؛ يظهر أحيانًا سبب مرجَّح (likely cause: tool definitions changed). expected rebuilds مقصودة (ضغط، وتنظيف tool-results). warm 1h TTL: المحادثة الرئيسة على النافذة الطويلة (مضمونة على الاشتراك ضمن الاستعمال المُدرَج؛ على الأرصدة، أو مفتاح API، أو مزوّد سحابيّ، خمس دقائق افتراضيًّا).

تحت هذه الأسطر، يعزو قسم breakdown (زرّان d وw) الاستعمال الحديث إلى skills وسب-agents وplugins وخوادم MCP، ويرصد ما يصل إلى ثلاثة behavior flags (long context، cache misses…) حين يتجاوز سلوك 10 ٪. سطر Loops يعرض مهامّ /loop مرتَّبة بالرموز. /insights يكتب تقرير HTML في ~/.claude/usage-data/report.html بتحليل حتّى 200 جلسة محلّيّة حديثة.

تقليل الرموز

يُرتِّب costs.md الحركات. في Kiosque، خمس حركات تُنزل الفاتورة إلى الثلث: /clear بين مهامّ غير مترابطة (سياق مفتوح طوال اليوم يُفوتر المحادثة كاملة في كلّ دور؛ /rename قبل /clear للعثور لاحقًا عبر /resume)؛ و/compact بتعليمات (/compact ركّز على تصحيح الـauth يحفظ ما يهمّ، ويوضَع عند وقفة طبيعيّة)؛ والنموذج المناسب (يعالج Sonnet 90 ٪ من عمل Kiosque بكلفة أدنى من Opus؛ وOpus لقرارات المعماريّة وtraces متعدّدة الطبقات؛ model: haiku لسب-agent بسيط)؛ وعدد أقلّ من MCP مُفعَّلة (يعرض /mcp الخوادم النشطة)؛ والتفويض إلى سب-agent (قراءة عشرة ملفّات تبقى في سياقه، ولا يعود إلّا الملخّص).

مكمّلات: MAX_THINKING_TOKENS=8000 (أو /effort medium) لعمل بسيط، ونقل التعليمات المفصَّلة من CLAUDE.md إلى skills تُحمَّل عند الطلب (استهدف CLAUDE.md < 200 سطرًا)، وprompts محدَّدة («أضِف التحقّق في auth.ts» بدل «حسِّن الـauth»).

فهم السياق

يصف context-window.md النافذة في طبقات. قبل أوّل إدخال، تُحمَّل جلسة Kiosque: prompt النظام وتعريفات الأدوات (~4.5k رمزًا، تُعاد عند كلّ تغيير أداة)، وذاكرة تلقائيّة (~700، أوّل 200 سطر أو 25 KB من MEMORY.md)، وأسماء أدوات MCP (~120، مخطّطات مؤجَّلة بـtool search)، ووصف skills (~450، غائبة بعد /compact عدا skills المستدعاة)، و~/.claude/CLAUDE.md (~320)، وCLAUDE.md المشروع (~1800). كلّ قراءة تُضيف 1000 حتّى 3000 رمز؛ كلّ قاعدة بـpaths: تنضمّ إلى المحادثة حين يُقرأ ملفّ مطابق؛ يُبقي كلّ سب-agent نافذته الخاصّة.

بعد /compact: يبقى prompt النظام وoutput style (خارج التاريخ)، ويُعاد تحميل CLAUDE.md الجذر والقواعد غير المُرشَّحة من القرص، وتُعاد قراءة حتّى خمسة ملفّات معدَّلة حديثًا، وتُحقَن skills المُستدعاة بـ5000 رمز لكلّ منها، ومجموعها الأقصى 25000. تعود قواعد paths: عند إعادة قراءة ملفّ مطابق. ما يُكتب في ملفّ يبقى؛ وما يعيش في المحادثة وحدها يُلخَّص.

ما يُبطل الذاكرة المُخبَّأة

prompt-caching.md هو القراءة الثانية التي لا غنى عنها. الـcache مطابقة بادئة: أيّ تعديل في الداخل يُجبر على إعادة معالجة ما بعده. الإبطالات المُكلفة: /model (لكلّ نموذج cache خاصّ به، ويطلب Claude Code التأكيد ما دام الـcache حارًّا)، وتغيير الجهد أثناء الجلسة (عدا Fable 5.1 على مفتاح API أو اشتراك)، وتفعيل fast mode (الرأس يُعدِّل مفتاح الـcache، ويُفوتر دور غير مُخزَّن بتعرفة fast mode)، ووصل/فصل خادم MCP أدواته مُحمَّلة في البادئة (الأدوات المؤجَّلة بـtool search تبقى مجّانيّة في الـcache)، ورفض أداة كاملة بـdeny على Bash أو WebFetch، و/compact (يُبطل بحكم البناء)، وتغيير output style، وتحديث Claude Code.

تحرير ملفّ، وتغيير وضع الصلاحيّة، واستدعاء skill، وتنفيذ /rewind أو /recap: لا شيء من ذلك يكسر الـcache. سب-agent يبدأ cache خاصًّا به. اختر النموذج والجهد بداية الجلسة، واحفظ /compact للوقفات.

للتأكّد من الـTTL: claude -p "hello" --output-format json، ثمّ قراءة usage.cache_creation.ephemeral_1h_input_tokens مقابل ephemeral_5m_input_tokens. يقبل ضبطان، promptCacheTtl (المحادثة الرئيسة) وsubagentPromptCacheTtl (السب-agents، وسير العمل، والضغط، والعناوين)، القيمَتَين 5m أو 1h. FORCE_PROMPT_CACHING_5M=1 يفرض خمس دقائق؛ وENABLE_PROMPT_CACHING_1H=1 يطلب ساعة. على مفتاح API أو مزوّد سحابيّ، ضع promptCacheTtl: 1h.

متى نُفعِّل fast mode

fast-mode.md صريح: /fast تهيئة لـOpus، لا نموذج مختلف. متوفّر على Opus 5 وOpus 4.8، تسعير 10 /50/50 لكلّ MTok دخلًا وخرجًا، ويُفوتر من أرصدة الاستعمال حتّى على اشتراك. الدور الأوّل حيث يُفعَّل fast mode يدفع السياق كاملًا غير المُخزَّن بتعرفة fast mode؛ فعِّله إذن عند بدء الجلسة لا في أثنائها. حالة الاستعمال: تصحيح تفاعليّ تحت ضغط، وتكرار محكم على patch في React. تجنّبه لعمل دفعيّ أو PR تُراجَع ليلًا في الخلفيّة.

على Team/Enterprise، يُفعِّل Owner الـfast mode في Admin Settings > Claude Code؛ على Console، مسؤول في Claude Code preferences. دون تجهيز، تُجيب API بـ 429. ثلاثة متغيّرات بيئة للحالات عبر بوّابة: CLAUDE_CODE_DISABLE_FAST_MODE=1 وCLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1 وCLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1. لإعادة تعيين في كلّ جلسة: "fastModePerSessionOptIn": true.

أمان بثلاث طبقات

يُرسي security.md المعماريّة. في وضع Manual، يبدأ Claude Code بالقراءة فقط ويطلب قبل أيّ كتابة أو تنفيذ غير تافه؛ وأوامر Bash القرائيّة (ls وcat وgit status…) تمرّ بلا سؤال. في الوضع auto، مُصنِّف يفصل بين الإجراءات الآمنة والمطلوب تدقيقها والمرفوضة؛ وتبقى deny/ask عندك أولويّة. حدّ المجلّد صارم: لا يكتب Claude إلّا في مجلّد الإطلاق ومجلّداته الفرعيّة. وسّع عبر additionalDirectories، وقيّد القراءة عبر denyRead تحت sandboxing.

ثلاث حركات دفاعيّة لـKiosque: حجب أوامر الشبكة (افتراضيًّا يطلب curl/wget تأكيدًا في Manual؛ أضفهما إلى permissions.deny)، ومنع الأسرار (Read(./.env) وRead(./.env.*) في permissions.deny)، واستعمال hook ConfigChange لتدقيق أو حجب تعديل إعدادات في الجلسة. يعزل الـsandbox أوامر Bash (النظام الملفّيّ، الشبكة). --bare يبقى الحماية الوحيدة الموثوقة ضدّ الحقن في -p: بدونه، تُحمَّل CLAUDE.md معادية أو hook أو خادم MCP من المجلّد الجاري دون نافذة ثقة. ضدّ حقن الـprompt: أعِد قراءة كلّ أمر قبل الموافقة، وتفادَ تمرير محتوى غير موثوق مباشرةً، ونفّذ السكربتات الخطرة في VM أو devcontainer. تستخدم WebFetch نافذتها الخاصّة. على Windows، عطِّل WebDAV وارفض المسارات \\*.

الـplugin security-guidance

يُثبِّت security-guidance.md مراجعةً بثلاث طبقات، مجّانيّة في طبقة الأنماط: عند كلّ تحرير، مطابقة تعابير/سلاسل فرعيّة (eval(، new Function، os.system، child_process.exec، pickle، dangerouslySetInnerHTML، .innerHTML =، document.write، تعديلات في .github/workflows/) بلا استدعاء نموذج؛ في نهاية الدور، مراجعة بالنموذج في الخلفيّة على الـdiff التراكميّ (حتّى 30 ملفًّا، ثلاث تمريرات متتالية على الأكثر)؛ عند كلّ git commit أو git push يطلقه Claude عبر Bash، مراجعة agentic أعمق تقرأ المستدعِيات والـsanitizers (سقف 20 في ساعة متحرّكة؛ وcommits shell الخاصّة بك لا تُراجَع).

التثبيت: /plugin install security-guidance@claude-plugins-official، ثمّ /reload-plugins. للفريق كلّه، "enabledPlugins": {"security-guidance@claude-plugins-official": true} في .claude/settings.json. امتدادان محلّيّان إضافيّان: .claude/claude-security-guidance.md (نموذج تهديد داخليّ)، و.claude/security-patterns.yaml (أنماط المشروع). لا يستطيع أيّ منهما تعطيل تحقّق أصيل. أربعة متغيّرات تقطع طبقة: ENABLE_PATTERN_RULES=0، وENABLE_STOP_REVIEW=0، وENABLE_COMMIT_REVIEW=0، وENABLE_CODE_SECURITY_REVIEW=0. SECURITY_GUIDANCE_DISABLE=1 يعطّل الكلّ.

مكمّلًا، يُجري /security-review تمريرة واحدة على diff الفرع الجاري مقابل الفرع الافتراضيّ لـorigin. مفيد قبل فتح PR. بلا origin، يفشل الأمر بخطأ ambiguous argument الموثَّق في errors.md.

ضبط الفريق

يُعرِّف settings.md خمسة نطاقات، مرتَّبة أولويّةً: Managed، ثمّ Command line (--settings)، ثمّ Project local (.claude/settings.local.json)، ثمّ Shared project (.claude/settings.json)، ثمّ User (~/.claude/settings.json). تُدمَج القوائم (permissions.allow تُضاف بدلًا من أن تُستبدَل)، مع أربع استثناءات لقوائم النماذج (fallbackModel، وmodelPicker، وavailableModels، وmodelSettings).

في Kiosque، يُثبِّت الملفّ المشترك الثوابت:

{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Bash(make test)",
"Bash(make lint)",
"Bash(ruff *)",
"Bash(pytest *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Bash(curl *)",
"Bash(wget *)"
]
},
"enabledPlugins": {
"security-guidance@claude-plugins-official": true,
"kiosque-tools@kiosque-marketplace": true
}
}

يخدم .claude/settings.local.json، المُدرَج في .gitignore، الاستثناءات الشخصيّة. لا يُفعَّل allow وadditionalDirectories في إعدادات مشتركة إلّا بعد ثقة المجلّد (workspace trust)؛ وتنطبق deny وask فورًا. يُدرج /status الملفّات المحمَّلة فعلًا تحت Setting sources. يُفصِّل claude doctor المُدخلات المرفوضة.

بعض المفاتيح تُتَجاهَل في الملفّ المشترك (عمود Scope User, local, or managed في settings-reference.md). يُعرِّف المديرون سياسات عبر managed settings لا يستطيع شيء محلّيّ إرخاءها، عدا استثناءات حسّاسة أمنيًّا حيث تسود القيمة الأشدّ (disableClaudeAiConnectors: true، وenableArtifact: false، وisolatePeerMachines: true…). ينتقل onboarding مطوّر جديد عبر /team-onboarding: يحلّل Claude آخر 30 يومًا من الجلسات المحلّيّة ويكتب دليلًا Markdown يُنسَخ رسالةً أولى؛ على claude.ai، يُعاد أيضًا رابط قابل للمشاركة. يبقى /privacy-settings مخصّصًا لمشتركي Pro وMax.

الخلاصة

اقرأ /usage كلّ أسبوع، وسطر Prompt cache (main) في كلّ يوم ترتفع فيه الكلفة. فرِّغ بين المهامّ غير المترابطة، واضغط عند الوقفات، وابقَ على Sonnet افتراضيًّا، وOpus للقرارات الصعبة. لا تُفعِّل /fast إلّا في بداية جلسة حسّاسة زمنيًّا. اقفل الصلاحيّات في .claude/settings.json المشترك، ثبِّت security-guidance للفريق، وكمِّل بـ/security-review، ووزِّع التهيئة عبر managed settings حين تكون نقطة غير قابلة للتفاوض.

الوحدة التالية: «مشروع: صندوق أدوات Claude Code الكامل لفريق Kiosque».