الانتباه هو كل ما يتعلق بالنماذج الكبيرة.
التركيز هو كل ما يتعلق بـ NIUMA.
في عام 2017، حدّد Attention is All You Need حقبة كاملة — كل ذكاء النموذج مبني على "الانتباه". بعد ثماني سنوات اكتشفنا: النماذج لا تعاني من نقص في آلية الانتباه، بل من نقص في وضع الانتباه في المكان الصحيح. كلما طال السياق كثرت الضوضاء، والمعلومات الحقيقية الحاسمة تتبدد. niuma_code يفعل شيئاً واحداً: طرح من السياق، وجمع في الانتباه — لضمان أن كل رمز من رموز النموذج يسقط في نقطة التركيز.
شاهد كيف يعمل
تسجيل حي لوضع تنسيق IDE، اختبر تجربة niuma_code المركّزة في دقيقة واحدة
لماذا تختار niuma_code
ليس بديلاً عن Claude Code، بل أداة تكميلية تعزز تركيزه
محادثة مستقلة عبر harness
الوضع الافتراضي، لا حاجة لأي أمر. يستكشف النموذج LLM بشكل مستقل ضمن حلقة الأدوات، يفكر ويبني أثناء التنفيذ بخطوات غير محددة حتى إنهاء المهمة.
- حلقة أداة tool_use: يقرر النموذج LLM بشكل مستقل قراءة الملفات / تعديل الكود / تشغيل الأوامر حتى الإنجاز
- إعادة محاولة تلقائية لأخطاء API، عرض متدفق + إلغاء ESC + ضغط تلقائي عند الطول الزائد
- مناسب للمهام ذات الحدود الغامضة التي يصعب تفكيكها مسبقاً، يقرر النموذج متى ينتهي
تنسيق هندسي عبر loop
/loop <هدف> يدخل في حلقة ذاتية موجهة بالهدف:
يُفكّك أولاً إلى قائمة مهام بأوامر تحقق، ثم تنفيذ متسلسل مع تحقق من كل مهمة، وتصحيح ذاتي عند الفشل.
- تخطيط ← تنفيذ ← تحقق ← إعادة المحاولة عند الفشل (3-strike، مع تغذية سبب الفشل لمنع التكرار)
- بوابتان متعامدتان: MAX_ROUNDS=20 حد صلب للمهمة + MAX_RETRIES=3 تصحيح ذاتي لكل مهمة
- كل دورة تستدعي harness داخلياً لخطوة واحدة، مناسب للمهام الهندسية القابلة للتفكيك والتحقق
وضع TUI ملء الشاشة
واجهة ملء الشاشة مبنية على prompt_toolkit، مع تثبيت حقل الإدخال في الأسفل، يمكن إضافة رسائل جديدة أثناء تدفق إخراج النموذج LLM دون فقدانها.
- 5 طبقات مشروطة: إعدادات النموذج، طابور الرسائل، تبديل السياق، إدارة المحادثة، تأكيد الصلاحيات
- تظليل التحديد بسحب الماوس، التمرير بالعجلة، النسخ التلقائي بالزر الأيسر، Ctrl+عجلة لتكبير الخط
- شريط حالة فوري: معاينة التفكير، عدّ رموز الإدخال/الإخراج، تقدّم الضغط وإلغاء ESC
وضع تنسيق IDE
محرر كود ملء الشاشة، يُكتب سكربت التنسيق بصياغة Python الأصلية، لدمج استدعاءات LLM في تدفق سكربتي قابل للتحكم.
- حقن دوال llm_call / llm_confirm / llm_judge لتنسيق تدفق استدعاءات LLM قابل للتحكم
- F5 للمعاينة (تحليل AST ثابت لفك الخطوات)، F6 للتنفيذ (بدون مراقبة، صلاحيات الأدوات تُمنح تلقائياً)
- تنفيذ في رمل آمن + اعتراض قائمة سوداء للاستيرادات الخطرة (os/subprocess/socket إلخ)، القائمة السوداء هي الضمانة الوحيدة لوضع عدم المراقبة؛ F6 يعيد استخدام سلسلة المحادثة الرئيسية للتشغيل الحقيقي
توجيه متعدد المزودين
تُهيَّأ عدة نقاط نهاية API عبر settings.json، وتُوجَّه تلقائياً لكل نموذج إلى مزوِّده الصحيح، مع تبديل حر داخل نفس الجلسة.
- يصرّح كل مزوِّد بـ base_url / api_key / قائمة الطرازات المدعومة
- #tag أو /model لتبديل الطراز، والطلبات تصل تلقائياً لنقطة النهاية الصحيحة
- ثلاث طبقات تكوينية متراكبة (مستوى المستخدم / مستوى المشروع / محلي بالمشروع)، الأخيرة تطغى على سابقتها
سياقات متعددة متوازية
يُوسّع المحادثة الواحدة إلى N سياقات متوازية، يُدير كل منها تاريخاً وعداد رموز وحالة ضغط بشكل مستقل دون تداخل.
- استبعاد LRU، الحد الافتراضي 5 (قابل للضبط بـ max_contexts)، الاستبعاد يعني أرشفة قابلة للاستعادة
- تبديل مرئي عبر نافذة /context؛ عند المغادرة يُولَّد ملخص في الخلفية بشكل غير متزامن
- /messages لاختيار وحدات المحادثة المتعددة: حذف / نقل / دمج ملخصات LLM
خرائط معرفة الكود
يُحلّل بنية الكود عبر tree-sitter لبناء خرائط علاقات تعريفات الرموز والاستدعاءات والتبعيات، لتمكين النموذج LLM من التحديد الدقيق قبل قراءة الأسطر.
- 4 أدوات بحث للقراءة فقط: تحديد الرمز، استعلام تبعيات الملف، الاستعلامات، الاستدعاءات
- يُرجع مسار الملف:رقم السطر والتوقيع، ليحل محل البحث الكامل grep
- إعادة بناء حسب الحاجة عبر عامل قرار ثلاثي، لتجنب التحليل الكامل عند كل تشغيل
بحث متوازٍ عبر وكلاء فرعيين
ينفّذ وكلاء فرعيون للقراءة فقط أدوات بحث متوازية في سياقات معزولة ثم يُعيد ملخصات، مع الحفاظ على نقاء السياق الرئيسي.
- عدة وكلاء فرعيين ينفّذون أدوات قراءة فقط بشكل متوازٍ دون تداخل
- بحث في سياقات معزولة، يُعيد ملخصات فقط دون تلوين المحادثة الرئيسية
- ينتمي لنظام المحادثة المستقل الافتراضي، يُستدعى حسب الحاجة وليس كوضع مستقل
ذاكرة مدفوعة بالإدراك
ذاكرة دائمة مبنية على memory-palace، تُحوّل أحداث التشغيل إلى ذكريات في الوقت الحقيقي، وتُراكم التجارب عبر الجلسات.
- 10 أنواع أحداث إدراكية: عين/جسد/لسان/أنف/نتيجة إلخ، تُكتب في الوقت الحقيقي وليس عند انتهاء المحادثة
- ثلاثيات fact + ملخصات محادثة، بحث رباعي الطبقات + تراجع بايزي
- استعلام تلقائي وحقن في system prompt في المحادثة التالية، مع موقع استدعاء مستقر
تتبع مكافآت الإدراك بالنتيجة
يتتبع دورة حياة أهداف المهمة بالكامل، ويحسب درجة المكافأة بناءً على جودة الإنجاز، وتُكتب كحدث إدراكي في الذاكرة بالوقت الحقيقي.
- OutcomeTracker يحسب درجة مكافأة من 0.0 إلى 1.0 طوال دورة حياة المهمة
- تترسّب درجة المكافأة كإشارة تقييم لإعادة استخدام الذاكرة
- واحد من 10 أنواع أحداث إدراكية، مترابطة مع القراءة/الكتابة/استدعاء الأدوات
كيف تستخدم الوضعين بشكل جيد
لا تستطيع تحديد الخطوات وتريد التفكير أثناء التنفيذ؟ استخدم harness مباشرة. تستطيع سرد قائمة مهام قابلة للتحقق؟ استخدم /loop
مفتاح استخدام harness الجيد
لا يملك harness ركنة إعادة تخطيط، فكلما كانت البداية أوضح، كان الاستكشاف المستقل أدقّ.
- اذكر القيود دفعة واحدة: الهدف + الملفات/الدوال الممنوعة + معايير القبول، لا تغير المتطلبات في منتصف الطريق
- الأنسب حين تكون الحدود غامضة لكن الهدف واضح؛ كلما كانت الخطوات أوضح، تقاربت أسرع
- استخدم نقاط التحكم بحكمة: ESC للإيقاف الفوري، ضغط تلقائي للطول الزائد، إعادة محاولة تلقائية لأخطاء API
- ادّعاؤه "الإنجاز" لا يعني الإنجاز الفعلي — بعد التعديلات الجوهرية شغّل اختبار/ترجمة للتأكيد بنفسك
مفتاح استخدام loop الجيد
نجاح التصحيح الذاتي في حلقة الرجوع يعتمد كلياً على "التحقق" — التصحيح 3-strike ذو معنى فقط حين يكون الهدف قابلاً للتحقق.
- يجب أن يكون الهدف قابلاً للتفكيك إلى قائمة مهام بأوامر تحقق: "أكثر أناقة" غير قابل للتحقق، فحلقات الرجوع بلا جدوى
- حدّد طريقة التحقق في الهدف مباشرة (مثل تشغيل py_compile / اختبار معين)، أعلى نسبة إصابة في التخطيط
- عند فشل التصحيح 3 مرات غالباً ما تكون معلومات التحقق غير كافية: فكّك المهمة بتفصيل أدقّ، أكثر فعالية من إعادة المحاولة العنيدة
- 3 إخفاقات لا توقّف التنفيذ بل تُسجَّل ثم يُتابَع، شاهد النتيجة الكاملة بانتظار علامة [!!] في الملخص
ابدأ في ثلاث خطوات
تنزيل وتهيئة وتشغيل، خلال ثوانٍ معدودة
المعاملات الكاملة في settings.json
مسار ملف التهيئة: ~/.niuma/settings.json
factories — تهيئة API لعدة مزوّدين، يصرّح كل مزوّد بـ base_url / api_key / قائمة الطرازات المدعومة، مع توجيه تلقائي حسب اسم الطراز
{
"factories": [
{
"base_url": "https://api.anthropic.com", // نقطة نهاية Anthropic الرسمية
"api_key": "sk-ant-xxx", // إلزامي، الحقول الثلاثة مطلوبة جميعها
"options": ["claude-sonnet-4-6", "claude-opus-4-8"] // الطرازات التي يدعمها هذا المزوّد
},
{
"base_url": "https://your-proxy.example.com", // نقطة نهاية وكيل متوافق مع Anthropic
"api_key": "sk-proxy-xxx",
"options": ["claude-sonnet-4-6"] // الطرازات التي تدعمها هذه النقطة
}
]
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| base_url | string | — | عنوان نقطة نهاية API (إلزامي)API endpoint URL (required) |
| api_key | string | — | مفتاح API (إلزامي)API key (required) |
| options | string[] | [] | قائمة أسماء الطرازات التي يدعمها هذا المزوّد، مثل ["claude-sonnet-4-6", "claude-opus-4-8"]Supported model names for this provider |
llm — تهيئة الطراز ومستوى effort وميزانية التفكير وإدارة السياق
{
"llm": {
"default_model": "claude-sonnet-4-6", // القيمة الافتراضية لتبديل /model
"default_effort": "high", // يحدد تفعيل thinking_budget_high
"max_contexts": 5, // الحد الأعلى للسياقات المتوازية، استبعاد LRU عند التجاوز
"resume_latest_context": true, // استعادة آخر سياق نشط عند البدء
"options": [ // خريطة الطراز ← effort
{"claude-sonnet-4-6": ["low", "medium", "high"]},
{"claude-opus-4-8": ["low", "medium", "high", "max"]}
],
"thinking_budget_low": "0", // 0 = تعطيل التفكير الموسّع
"thinking_budget_medium": "0",
"thinking_budget_high": "10000", // high effort تستخدم هذه الميزانية
"thinking_budget_max": "20000" // max effort تستخدم هذه الميزانية (أعمق استدلال)
}
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| default_model | string | "claude-sonnet-4-6" | الطراز الافتراضي (ثابت على مستوى الجلسة، قابل للتبديل عبر /model)Default model (fixed per session, switchable via /model) |
| default_effort | string | "high" | مستوى effort الافتراضي (low/medium/high/max)، يتحكم في عمق ميزانية التفكيرDefault effort level — controls thinking budget depth |
| max_contexts | integer | 5 | الحد الأعلى للسياقات النشطة، يُستبعد الأقدم عبر LRU عند التجاوز (مؤرشف وقابل للاستعادة عبر /context)Max active parallel contexts; LRU evicts the oldest when exceeded |
| resume_latest_context | boolean | true | هل يستعيد آخر سياق نشط عند البدء؛ false = يبدأ بسياق فارغ في كل مرةResume last active context on startup; false = start fresh |
| options | object[] | [] | تركيبات effort المدعومة لكل طراز، مثل [{"claude-sonnet-4-6": ["low","medium","high"]}]، تُستخدم للتحقق من تبديل /modelModel→effort mapping, used to validate /model switches |
| thinking_budget_low | string/int | "0" | عدد رموز ميزانية التفكير لـ low effort (0 = تعطيل التفكير الموسّع)Thinking token budget for low effort (0 = disabled) |
| thinking_budget_medium | string/int | "0" | عدد رموز ميزانية التفكير لـ medium effortThinking token budget for medium effort |
| thinking_budget_high | string/int | "10000" | عدد رموز ميزانية التفكير لـ high effortThinking token budget for high effort |
| thinking_budget_max | string/int | "20000" | عدد رموز ميزانية التفكير لـ max effort (أعمق استدلال)Thinking token budget for max effort (deepest reasoning) |
env — متغيرات البيئة، تُكتب مباشرة في os.environ للتحكم في الشخصية والتصحيح والشبكة والصلاحيات
{
"env": {
"PERSONA_NAME": "niuma", // اسم شخصية AI، يُحقن في system prompt
"MODEL_BACKGROUND": "claude-haiku-4-5", // طراز المهام الخلفية (استخراج الذاكرة، الضغط، إلخ)
"LANG": "zh", // لغة الواجهة (zh/en)، تتحكم أيضاً في لغة رد LLM
"TEMPERATURE_ZERO": "true", // ملاحظة: جميع القيم نصية
"API_TIMEOUT": "30", // مهلة التوقف في التدفق (بالثواني)
"API_ROUND_MAX": "120", // الحد الأعلى لوقت الجدار للجولة الواحدة (بالثواني)
"API_STALL_MAX_RETRIES": "10", // عدد محاولات إعادة المحاولة عند توقف التدفق
"PERMISSION_MODE": "auto", // auto = قائمة بيضاء + تأكيد / manual = قائمة بيضاء فقط / skip = السماح الكامل
"ALLOWED_TOOLS": "" // أدوات القائمة البيضاء (مفصولة بفواصل)، فارغ = الافتراضي المدمج
}
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| PERSONA_NAME | string | "niuma" | اسم شخصية AI، يُحقن في system prompt كاسم الدورPersona name injected into the system prompt |
| MODEL_BACKGROUND | string | "claude-haiku-4-5" | طراز المهام الخلفية (استخراج الذاكرة، ضغط المحادثة، إلخ)Background model for memory extraction, compression, etc. |
| LANG | string | "en" | لغة الواجهة (ar = العربية / en = الإنجليزية)، تتحكم أيضاً في لغة رد LLMUI language (ar/en), also controls LLM response language |
| TEMPERATURE_ZERO | string(bool) | "true" | تثبيت temperature=0 (مخرجات حتمية)؛ false = استخدام درجة الحرارة الافتراضية للطرازFix temperature=0 for deterministic output; false = use model default |
| API_TIMEOUT | string/int | "30" | عتبة توقف استجابة التدفق من API (بالثواني)، عند تجاوزها دون أحداث تُعتبر الاتصال شاذاًStreaming stall timeout in seconds — no events for this long triggers reconnect |
| API_ROUND_MAX | string/int | "120" | الحد الأعلى لوقت الجدار للجولة الواحدة (بالثواني)، لمنع الاستجابات الطويلة التي تحتوي تفكيراً فقط من احتكار خيط العملWall-clock hard limit per turn in seconds — kills stale streams |
| API_STALL_MAX_RETRIES | string/int | "10" | الحد الأعلى لمحاولات إعادة المحاولة عند توقف التدفقMax retries on stream stall before giving up |
| PERMISSION_MODE | string | "auto" | وضع الصلاحيات: auto (قائمة بيضاء + تأكيد) / manual (قائمة بيضاء فقط) / skip (السماح الكامل)Permission mode: auto (whitelist+confirm) / manual (whitelist only) / skip (allow all) |
| ALLOWED_TOOLS | string | "" | قائمة أدوات القائمة البيضاء (مفصولة بفواصل)، عند الفراغ تُستخدم القائمة الافتراضية (تشمل read_file, write_file, execute_bash إلخ)Comma-separated tool whitelist; empty = use built-in defaults |
compact — تهيئة ضغط السياق، الضغط التلقائي للحفاظ على المعلومات الجوهرية عند طول المحادثة
{
"compact": {
// ── ضغط متزامن أثناء المحادثة (يحجب الحلقة الرئيسية حتى اكتمال الضغط) ──
"inline_trigger": 0.8, // يُشغَّل عند وصول الرموز إلى 80% من MAX_TOKENS
"inline_keep_ratio": 0.4, // يُحتفظ بآخر 40% من الرسائل بعد الضغط
// ── ضغط غير متزامن بعد الانتهاء من الرد (لا يحجب، يعمل بصمت في الخلفية) ──
"idle_trigger": 0.5, // يُشغَّل عند وصول الرموز إلى 50% من MAX_TOKENS
"idle_keep_ratio": 0.4, // يُحتفظ بآخر 40% من الرسائل بعد الضغط
// ── الحد الأعلى لمخرجات ملخص LLM ──
"max_summary_tokens": 4096 // العدد الأقصى للرموز في الملخص المُولّد
}
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| inline_trigger | float | 0.8 | عتبة تشغيل الضغط المتزامن أثناء المحادثة (نسبة من MAX_TOKENS)، عند بلوغها تُحجب الحلقة الرئيسية للضغطInline compression trigger ratio — blocks main loop when reached |
| inline_keep_ratio | float | 0.4 | نسبة الرسائل الأخيرة المحتفظ بها بعد الضغط المتزامن (0.4 = 40%، والباقي يلخصه LLM)Ratio of recent messages kept after inline compression |
| idle_trigger | float | 0.5 | عتبة تشغيل الضغط غير المتزامن بعد الرد (نسبة من MAX_TOKENS)، يُشغَّل في الخلفية دون حجبIdle compression trigger ratio — runs async after reply completes |
| idle_keep_ratio | float | 0.4 | نسبة الرسائل الأخيرة المحتفظ بها بعد الضغط غير المتزامنRatio of recent messages kept after idle compression |
| max_summary_tokens | integer | 4096 | الحد الأقصى لرموز مخرجات ملخص LLM (الحد الأعلى للملخص عند الضغط)Max output tokens for LLM-generated compression summaries |
memory_palace — تهيئة LLM لقصر الذاكرة، مستقلة عن بلوك llm، تُحلّل بشكل منفصل
// الوضع الأساسي: استخراج بالقواعد فقط (بدون LLM، تكلفة صفرا)
{
"memory_palace": {
"enable_v9": false, // تعطيل V9، التراجع إلى الوضع التقليدي V8
"llm_enabled": false // تعطيل تعزيز LLM
}
}
// الوضع الكامل: استخراج مع تعزيز LLM (الحقول الثلاثة مطلوبة جميعها، وإلا التراجع للقواعد فقط)
{
"memory_palace": {
"enable_v9": true,
"llm_enabled": true, // عند التفعيل يجب تعبئة الحقول الثلاثة أدناه
"base_url": "https://api.anthropic.com",
"api_key": "sk-ant-xxx",
"model": "claude-haiku-4-5" // يُنصح بgunakan طراز خفيف لتوفير الرموز
}
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| enable_v9 | boolean | true | تفعيل طبقة ذاكرة V9 (ذاكرة مدفوعة بالاستيعاب)، false = التراجع إلى الوضع التقليدي V8Enable V9 perception-driven memory; false = legacy V8 mode |
| llm_enabled | boolean | false | تفعيل تعزيز LLM لاستخراج الذاكرة (true = استخدام LLM لاستخراج حقائق أعلى جودة، false = وضع القواعد فقط)Enable LLM-enhanced memory extraction; false = rule-based only |
| base_url | string | "" | نقطة نهاية API لذاكرة LLM (الحقول الثلاثة base_url/api_key/model مطلوبة جميعها، وإلا التراجع للقواعد فقط)Memory LLM API endpoint (all three fields required, or falls back to rule-based) |
| api_key | string | "" | مفتاح API لذاكرة LLMMemory LLM API key |
| model | string | "" | اسم الطراز المستخدم في ذاكرة LLM (يُنصح بطراز خفيف مثل haiku)Model for memory LLM (recommend a lightweight model like haiku) |
memory_quality — عتبة بوابة جودة الذاكرة، التحكم في تصفية الكتابة ودقة الاستدعاء
{
"memory_quality": {
"min_store_importance": 0.4, // بوابة الكتابة: لا تُخزَّن الحقائق بأهمية أقل من هذه القيمة
"min_recall_score": 0.35, // بوابة الاستدعاء: لا تُحقَّن في prompt إذا كانت الدرجة أقل من هذه القيمة
"dedup_threshold": 0.3 // عتبة إزالة التكرار: تشابه Jaccard أعلى من هذه القيمة يُconsider مكرراً
}
}
| المعامل | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
| min_store_importance | float | 0.4 | بوابة الكتابة: لا تُخزَّن الحقائق بأهمية ذاتية أقل من هذه القيمة، مصادر الضوضاء منخفضة القيمة (0.4 يحجب "الذكر العشوائي"، ويحتفظ بـ "خطأ/مشكلة" فأعلى)Write gate: facts scoring below this importance are discarded at extraction |
| min_recall_score | float | 0.35 | بوابة الاستدعاء: لا تُحقَّن في prompt الذكريات بدرجة استدعاء أقل من هذه القيمة، تصفية الضوضاء منخفضة الصلةRecall gate: memories scoring below this are not injected into the prompt |
| dedup_threshold | float | 0.3 | عتبة إزالة التكرار: تشابه أحرف Jaccard أعلى من هذه القيمة يُعتبر مكرراً، والاحتفاظ بالأحدثDedup threshold: Jaccard similarity above this = duplicate, keeps newest |
جميع الأوامر المتاحة
استخدم الأوامر ذات الشرطة المائلة للعمليات السريعة
| الأمر | الوصف |
|---|---|
| /ide | الدخول إلى محرر التعليمات البرمجية بملء الشاشة |
| /context | إدارة السياقات المتعددة (new/rename/switch/del) |
| /help | عرض معلومات المساعدة |
| /copy | نسخ آخر رد إلى الحافظة |
| /resume | متابعة المهام غير المكتملة |
| /clear | مسح سياق المحادثة |
| /restart | إعادة تشغيل niuma |
| /model | عرض/تبديل الطراز |
| /quit | الخروج من البرنامج |