تكنولوجيا

كواليس «كلود كود» بـ سويفت: القوة في البساطة لا في «هياط» الكود المتراكم

تحليل معماري لمقاربة بسيطة تحدث فرقاً كبيراً في عالم المساعدين البرمجيين

مراسل في قسم التكنولوجيا، يركز على متابعة أخر مستجدات أخبار التكنولوجيا

هوس المطورين بفك شفرة «كلود كود» (Claude Code) لا يتوقف. الجميع يسأل عن سر الكفاءة. الإجابة ليست في آلاف السطور البرمجية، بل في مشروع جديد بلغة «سويفت» يضع هذه الأداة على طاولة التشريح. المحاولة هنا ليست مجرد تقليد، بل إعادة بناء الواجهة من الصفر لبرهنة حقيقة واحدة: القوة تسكن في البساطة المعمارية، لا في تكدس الأدوات الرقمية التي لا يلمسها أحد.

خرافة أن التعقيد يولد العبقرية سقطت تماماً. «كلود كود» لا يغرقك بمئات الميزات التافهة. هو يركز على حفنة أدوات متقنة؛ أداة بحث، ومحرر ملفات. هذا كل شيء. الحمل الأكبر يقع على عاتق النموذج اللغوي (LLM) نفسه. هذا النهج يقتل «الضجيج» البرمجي الذي يفسد تجربة الوكلاء الآخرين. النظام هنا أداة تنفيذية رشيقة، وليس هيكلاً بيروقراطياً معقداً يستهلك الموارد ويقدم القليل.

لغة «سويفت» لم تعد حبيسة تطبيقات آيفون. بفضل نموذج التزامن (Concurrency) الحديث، أصبحت خياراً شرساً لبناء أنظمة الذكاء الاصطناعي التي تطلب استجابة لحظية. المشروع الحالي يستغل هذه القوة لاختبار الحد الأدنى من البنية المطلوبة. التصميم «المتقشف» يتفوق بمراحل على الأنظمة التي تعتمد على طبقات تنسيق ضخمة تلتهم الذاكرة دون طائل. تاريخياً، البرمجيات العظيمة بدأت هكذا: نواة صلبة، ووظائف مباشرة.

قوة النظام تتركز في حلقة تفاعل واحدة. هي القلب النابض:

func run(query: String) async throws -> String {
    messages.append(.user(query))

    while true {
        let request = APIRequest(
            model: model, system: systemPrompt, messages: messages, tools: Self.toolDefinitions
        )
        let response = try await apiClient.createMessage(request)
        messages.append(Message(role: .assistant, content: response.content))

        guard response.stopReason == .toolUse else {
            return response.content.textContent
        }

        var results: [ContentBlock] = []
        for block in response.content {
            if case .toolUse(let id, let name, let input) = block {
                let output = await executeTool(name: name, input: input)
                results.append(.toolResult(toolUseId: id, content: output, isError: false))
            }
        }
        messages.append(Message(role: .user, content: results))
    }
}

الأساس المتين لا يحتاج لتغيير مستمر. الأدوات تتبدل، وبنية الحلقة ثابتة. ولمن يريد الغرق في التفاصيل، تتوفر سلسلة تعليمية من 9 أجزاء تفكك شفرة هذا المشروع. الهدف؟ عزل كل آلية واختبارها وحدها.

مبادئ تصميم وكلاء البرمجة هنا حادة وواضحة:

  • الكيف يدهس الكم: فهرس أدوات ضخم يعني تشتتاً أكبر. مجموعة صغيرة موثوقة هي الحل.
  • ذكاء المحرك: النموذج اللغوي يقود، والكود المحيط مجرد «تنسيق خفيف» لتقليل التكاليف.
  • وضوح المهمة: تتبع الحالة بدقة يمنع الغموض الذي تسببه الأوامر العشوائية.
  • ضغط السياق: تقليل البيانات المرسلة ليس توفيراً للرموز (Tokens) فقط، بل ميزة تجعل الوكيل أسرع وأكثر تركيزاً.

خارطة الطريق قسمت العمل لمرحلتين؛ الميكانيكا أولاً، ثم المنتج النهائي الذي يملك ذاكرة ومثابرة.

المرحلة الأولى: الميكانيكيات الأساسية

المرحلةالإضافة البرمجيةالعلامة (Tag)
00التمهيد: مشروع SPM وتصميم CI00-bootstrap
01حلقة الوكيل وأداة Bash01-agent-loop
02توجيه الأدوات والتحكم في الملفات02-tool-dispatch
03تتبع المهام وحقن التذكيرات03-todo-write

المرحلة الثانية: آليات المنتج

المرحلةالإضافة البرمجيةالعلامة (Tag)
04الوكلاء الفرعيون بسياق جديد04-subagents
05تحميل المهارات عبر ملفات Markdown05-skill-loading
06إستراتيجية ضغط السياق الثلاثية06-context-compaction
07نظام المهام القائم على الرسم البياني07-task-system
08إدارة المهام الخلفية بنظام Actor08-background-tasks

تقنياً، المشروع يعتمد على Swift Package Manager مقسماً بين مكتبة (Core) وواجهة سطر أوامر (CLI) باسم claude. استخدام مكتبة AsyncHTTPClient يضمن العمل بكفاءة على Mac أو Linux. دعم كامل لتدفق الأحداث (SSE) دون تعقيدات إضافية.

هذا المشروع لا يدعي المثالية. هو رحلة استكشافية لفهم «لماذا تنجح الأشياء؟». تصميم بسيط عمداً، يترك مساحة للنقص ليركز على الدروس المعمارية. هل المعمارية الرشيقة كافية لمنافسة العمالقة؟ الإجابة في الكود.

التشغيل الفوري

  • بيئة سويفت 6.2 مع تفعيل التزامن الصارم.
  • مكتبة AsyncHTTPClient.
  • نظام macOS 10.15 أو لينكس حديث.

خطوات التنفيذ

  1. استنساخ المستودع: git clone https://github.com/ivanmagda/swift-claude-code.git
  2. الدخول للمجلد: cd swift-claude-code
  3. إعداد البيئة: cp .env.example .env وضع مفتاح API لشركة Anthropic.
  4. البناء: swift build
  5. التشغيل: swift run claude

المشروع تحت ترخيص MIT. عدل، اشتق، وافعل ما بدا لك.

مقالات ذات صلة