استخدم opencode من الـTerminal وتابع الـAgent – عملي

في مقال من Prompt Engineering إلى Loop Engineering قلنا إن التحول الحقيقي مو في النموذج نفسه، بل في الحلقة اللي تدور حوله نموذج يفكر، ينفذ، يشوف النتيجة، ويصحح نفسه. الكلام النظري جميل، لكن كيف ممكن نستخدم الطرفية Terminal. نفس الشاشة السوداء اللي كنا نعتبرها أداة للمتخصصين، صارت اليوم أفضل بيئة للـAI Aghents، لأنها المكان اللي يقدر فيه الوكيل يقرأ ملفاتك، يشغل الأوامر، ويشوف نتيجة كل خطوة.

في هذا المقال بنسوي ثلاثة أشياء. أولًا مشروع كامل من البداية للنهاية ملف مبيعات خام فيه مشاكل، يدخل من طرف، ويطلع من الطرف الثاني تقرير report.md جاهز للإرسال، فيه مؤشرات ورسوم وتوصيات. ثانيًا نشوف كيف تدور الحلقة داخل opencode فعليًا. وثالثًا نبني «ادوات محلل بيانات» كاملة داخل الأداة وكيل مخصص، أمر مخصص، مهارة، ثم نكمل القصة للشهر الثاني نوصل Agent بقاعدة بيانات المتجر عبر MCP ونختم بداشبورد يتجدد بطلب واحد.

وش opencode؟

الـopencode وكيل برمجة (AI coding agent) يشتغل من الطرفية، مشروع مفتوح المصدر بالكامل على GitHub. الفرق الجوهري بينه وبين أدوات مثل Claude Code أو Codex إنه غير مرتبط بمزود واحد (همم مجازيا) تشغله بنماذج Anthropic أو OpenAI أو Google، أو عبر OpenCode Zen (بوابة نماذج مختارة من فريق المشروع)، أو حتى بنموذج محلي على جهازك عبر Ollama. وإذا قريت مقال الاعتماد على النماذج العملاقة ليس تقدمًا بتعرف ليش هذا.

لتثبيت وأول تشغيل

أسهل طريقة عبر npm (نفس الأمر على ماك ولينكس وويندوز)، أو السكربت الرسمي على ماك ولينكس. مستخدمي ويندوز الأفضل لهم WSL كما يوصي الفريق

bash

npm install -g opencode-ai

الان توجه الى مسار المجلد المشروع او ملفاتك وشغل opencode

الواجهة بسيطة مكان تكتب فيه، وتحته الوضع الحالي والنموذج. ثلاث حركات تحتاجها من البداية Tab يبدل بين الوكلاء (بنشرحها بالتفصيل تحت)، ctrl+p يفتح قائمة الأوامر، وأي رسالة تبدأ بـ ! تتنفذ كأمر “shell” مباشرة. ولعرض النماذج اكتب /models

من أول تشغيل يظهر نموذج مجاني افتراضي تبدأ فيه، وأمر /connect يضيف مفتاح API لأي مزود إذا بغيت نماذج أقوى. ولاحظ شريط الحالة في كل لقطات هذا المقال النموذج المستخدم هو Big Pickle المجاني، يعني الرحلة كلها قابلة للإعادة عندك بدون ما تدفع شيء، وأمر opencode stats يعرض لك استهلاك الـ tokens والتكلفة لكل جلسة لو انتقلت لنموذج مدفوع.

ملاحظة سريعة قبل نبدأ النماذج تفهم العربي تمام وتقدر تكتب طلباتك فيه، لكن أغلب برامج الطرفية تعرض النص العربي بشكل مكسور (مشكلة RTL معروفة في الـ terminals). عشان كذا بتشوف كل أوامري في اللقطات بالإنجليزي. المشكلة في العرض، مو في الفهم.

المشروع: من CSV خام إلى تقرير جاهز

هذا ملف sales.csv مبيعات ثلاثة شهور لمتجر قهوة (بيانات تجريبية، 602 صف)، واضفت فيه نفس المشاكل اللي نشوفها كل يوم في الشغل كعالم او محلل بيانات صفوف مكررة، تواريخ بثلاث صيغ، أسماء مدن غير موحدة (Riyadh و riyadh و RUH نفس المدينة)، وقيم إجمالي خاطئة

قبل أي شيء، سويت خطوتين مهمتين. الأولى git init في المجلد، لأن أوامر التراجع في opencode مبنية على Git. والثانية كتبت ملف AGENTS.md في جذر المشروع، وهذا الملف يُحقن تلقائيًا في سياق الوكيل مع كل جلسة. أنا استخدمته كقاموس بيانات Data Dictionary وقواعد عمل

# Project: coffee sales analysis ## Data dictionary (sales.csv) – order_id: unique order reference – date: order date (mixed formats in the raw file) – city: branch city (5 canonical cities) – quantity, unit_price, total: total must equal quantity * unit_price – customer_rating: 1 to 5, optional ## Conventions – Never modify sales.csv; cleaned data goes to sales_clean.csv – Charts as PNG, 150 dpi, English labels – Final deliverable: report.md

لاحظ آخر سطر حددت للـAgent من البداية إن المخرج النهائي report.md. هذي أهم عادة تعلمتها مع Agents اعرّف شكل النهاية قبل ما تبدأ.

المرحلة الأولى: الفحص

دائمًا كمحلل بيانات، أول خطوة مو إنك تفهم بياناتك، وتتأكد إن البيانات نفسها سليمة. وهذا بالضبط اللي طلبته من opencode يقرأ ملف sales.csv، يفحص جودة البيانات، ويطلع لك ملخص بالمشاكل. بدل ما تقضي وقتك تكتشف الأخطاء يدويًا، تخلي الـAI يبدأ عنك بالجزء الممل من تحليل البيانات.

الوكيل ما اكتفى بكلام إنشائي، هو فتح الملف واستخدم pandas بنفسه وطلع بأرقام دقيقة 22 صف مكرر، 81 تقييم ناقص، 20 قيمة إجمالي غلط.

المرحلة الثانية: التنظيف

طلبت التنظيف والرسم، والحصيلة: من 602 صف إلى 580 صف نظيف، أسماء المدن من 12 شكل مختلف إلى 5 مدن موحدة، وكل التواريخ بصيغة ISO واحدة

وأتأكد بنفسي إن الملفات طلعت فعلًا

المرحلة الثالثة: التحليل والتقرير النهائي

هنا الفرق بين “تجربة لطيفة” و”شغل حقيقي”. طلبت تحليل كامل ينتهي بتقرير، ولاحظ كيف Agent قسم الشغل بنفسه لقائمة مهام Todo يعلّم عليها وحدة وحدة، وهذي ميزة مدمجة في opencode بتشوفها في كل مهمة طويلة

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

وهذا التقرير النهائي، ملف report.md حقيقي فيه ملخص تنفيذي وجدول جودة البيانات ومؤشرات وتوصيات

من ملف خام فيه مشاكل، إلى تقرير فيه توصية تجارية واضحة (روّج V60 في الرياض وجدة)، والرحلة كلها داخل الطرفية. هذا معنى end-to-end.

كيف Loop داخل opencode ؟

نرجع لسؤال Loop Engineering وش اللي يصير خلف الكواليس لما تضغط Enter؟

الحلقة في opencode تشتغل كذا رسالتك تروح للنموذج ومعها قائمة أدوات مدمجة قراءة وكتابة وتعديل الملفات، bash لتنفيذ الأوامر، grep و glob للبحث، todowrite لإدارة قائمة المهام، task لاستدعاء وكلاء فرعيين، و webfetch لجلب صفحات. النموذج يرد إما بنص نهائي، أو بطلب تنفيذ أداة. طلب الأداة يمر أولًا على بوابة صلاحيات Permissions: كل أداة لها سياسة allow أو ask أو deny، وتقدر تدقق أكثر بأنماط glob (مثلًا: اسمح بكل أوامر bash إلا git push خله يستأذن). بعد التنفيذ، ناتج الأداة يرجع للنموذج، ويعيد الكرة تنفيذ، ملاحظة، قرار. هذي هي الحلقة، حرفيًا loop في الكود، تستمر حتى يقرر النموذج إنه خلص أو توقفها أنت.

والجزء الذكي هو أدوات التحكم في هذه الحلقة، وهذا اللي يفرق أداة ناضجة عن سكربت يلف على API أول شيء، حد الخطوات steps: تقدر تحدد لأي وكيل أقصى عدد لفّات، وإذا وصله يُجبر النموذج على التوقف وتلخيص وش سوى ووش باقي. ثاني شيء، opencode عنده كاشف اسمه doom_loop إذا تكرر نفس استدعاء الأداة بنفس المدخلات ثلاث مرات متتالية، يعتبر الوكيل مكانك راوح ويوقفه ويسألك. ثالث شيء، إدارة السياق لما تطول الجلسة ويقارب الـ context على الامتلاء، وكيل خفي اسمه compaction يضغط المحادثة لملخص ويكمل، وتقدر تسويها يدويًا بـ /compact. ورابع شيء، كل تعديل ملفات يتسجل كنقطة Snapshot عبر Git، وهذا اللي يخلي /undo و /redo تراجع حقيقي للملفات مو بس للكلام.

وفيه مستوى ثاني للحلقة الوكلاء الفرعيون Subagents. الوكيل الأساسي يقدر يفوّض شغل لوكلاء متخصصين مدمجين، مثل general للمهام العامة و explore للاستكشاف بدون تعديل، وكل واحد يفتح جلسة فرعية بسياق مستقل، يعني حلقات داخل حلقات، وتتنقل بينها من الكيبورد. جرب أمر /details عشان تشوف كل استدعاء أداة بتفاصيله وأنت تتابع الحلقة لايف.

عمليًا، أهم زر للتحكم في الحلقة هو Tab يبدل بين وكيل Build اللي ينفذ ويعدل، ووكيل Plan اللي يمنع التعديل ويكتفي بالتحليل والاقتراح

جربته بطلب إضافة رسم جديد وهو في وضع Plan

الدورة الصحيحة للشغل المهم خطط في Plan، ناقش وعدّل، ارجع بـ Tab لوضع Build ونفّذ، راجع، وإذا ما عجبك /undo وجرب من زاوية ثانية. التجارب تصير رخيصة لما يكون التراجع بأمر واحد.

لا تعيد نفسك داخل opencode

هنا جواب السؤال المهم هل فيه شيء داخل opencode يعزز شغل تحليل البيانات تحديدًا؟ الجواب إن opencode مو مجرد شات في طرفية، هو منصة قابلة للتخصيص، وبنبني فيها عدة كاملة للمحلل، كلها ملفات نصية ترفعها مع مشروعك على Git فتشتغل عند كل الفريق.

  • وكيل analyst مخصص

الوكلاء في opencode مجرد ملفات Markdown في .opencode/agents/. سويت وكيل analyst له منهجية ثابتة و temperature منخفضة (0.1) عشان تحليل حتمي ومنضبط، وحجبت عنه webfetch لأن محلل البيانات ما يحتاجه

بمجرد وجود الملف، الوكيل يظهر في دورة Tab مع Build و Plan

الحين أي جلسة تحليل أفتحها على وكيل analyst تلتزم بنفس المنهجية فحص، ثم تنظيف بدون لمس الملف الخام، ثم تحليل، ثم تقرير. المنهجية صارت جزء من الأداة، مو ذاكرتي.

  • أمر /report واحد يعيد كل شيء

الأوامر المخصصة ملفات Markdown في .opencode/commands/، وفيها ميزة قوية جدا لأهل البيانات سطر يبدأ بـ !command يتنفذ فعليًا وقت استدعاء الأمر ويُحقن ناتجه في البرومبت. يعني الأمر يشوف عينة حية من البيانات كل مرة

لاحظ في الترويسة agent: analyst، الأمر مربوط بالوكيل المخصص. وأول ما أكتب /report يظهر في القائمة مثل الأوامر المدمجة

النتيجة العملية وصلت بيانات الشهر الجديد؟ حط الملف وشغل /report، والسلسلة كاملة (فحص، تنظيف، تحليل، تقرير) تعيد نفسها. والأوامر تدعم $ARGUMENTS لو تبي تمرر اسم الملف: /report sales_august.csv.

مهارة تحفظ خبرتك Skills

المهارات Skills خطوة أعمق من الأوامر ملف SKILL.md في .opencode/skills/<name>/ فيه اسم ووصف، والوكيل نفسه يقرر يحملها لما يحس إنها مناسبة للمهمة، أو تطلبها أنت بالاسم. حطيت فيها قائمة فحوصات الجودة اللي أسويها دايم

الفرق بين الأمر والمهارة الأمر أنت تستدعيه، المهارة الوكيل يكتشفها ويحملها عند الحاجة. و opencode يقرأ حتى مجلدات .claude/skills/ المتوافقة مع Claude Code، يعني مهاراتك تنتقل معك بين الأداتين.

الشهر الثاني: البيانات ما عادت CSV… وهنا يجي دور MCP

القصة ما تتوقف عند التقرير. تخيل الشهر الثاني المتجر ركّب نظام نقاط بيع، والمبيعات صارت تنزل مباشرة في قاعدة بيانات، ملف store.db. وش نسوي؟ نصدّر CSV يدوي كل مرة ونعيد الرحلة؟ هنا بالضبط يجي دور بروتوكول MCP (Model Context Protocol) هو الطريقة اللي توصل فيها الوكيل بمصدر البيانات نفسه، بدل ما تناوله ملفات.

فيه خوادم MCP جاهزة لقواعد البيانات المشهورة (Postgres وغيرها)، لكن أبغى أوريك الشيء الأجمل كتابة خادم MCP خاص بمتجرك أسهل مما تتوقع. هذا خادم كامل، 27 سطر Python، يعرض على الوكيل أداتين عرض الجداول، وتنفيذ استعلام. ولاحظ السطر المهم يرفض أي استعلام غير SELECT، يعني الوكيل يقرأ من قاعدة البيانات ولا يقدر يعدل فيها شيء أبدًا، مهما صار

(الخادم مبني على حزمة MCP الرسمية للبايثون: pip install mcp.) نسجله في opencode.json ونتحقق من الاتصال، وإذا تفضل معالج تفاعلي بدل تحرير الملف بشكل يدوي فأمر opencode mcp add يسوي نفس الشيء

بمجرد الاتصال يظهر عداد 1 MCP في شريط حالة opencode، وأدوات الخادم تنضم لأدوات الوكيل باسم store_db_query و store_db_list_tables، ويقدر يستدعيها داخل الحلقة مثل أي أداة مدمجة.

النتيجة: من قاعدة البيانات إلى داشبورد

الحين الطلب يتغير بشكل نوعي. خلاص مافي “اقرأ الملف”، صار “اسحب أرقام الشهر من قاعدة البيانات وابن داشبورد”

الوكيل استعلم من store.db عبر MCP (بدون ما يلمس أي CSV)، وبنى ملف dashboard.html تفاعلي مكتفي بذاته يفتح في أي متصفح، وصدّر نسخة صورة للمشاركة السريعة. وهذا الناتج الفعلي

أربع بطاقات KPI وأربع لوحات، منها heatmap للمدينة × المنتج تجاوب سؤال “وش أبيع؟ وين؟” بنظرة واحدة. الرحلة اكتملت فعليًا CSV خام ← تقرير ← قاعدة بيانات ← داشبورد يتجدد بطلب واحد.

طيب وأنظمة الداشبورد المشهورة؟

نفس البروتوكول يوصلك فيها. Grafana مثلًا عندها خادم MCP رسمي يخلي الوكيل يبحث في الداشبوردات الموجودة، ويقرأ إعدادات اللوحات واستعلاماتها، وينشئ ويحدث داشبوردات كاملة عبر أدوات مثل update_dashboard، ويستعلم من مصادر البيانات المربوطة، وكل هذا محكوم بصلاحيات Grafana نفسها عبر service account token تعطيه أنت. يعني السيناريو الواقعي في شركتك وكيل opencode يحلل بياناتك، ثم يحدّث داشبورد الفريق في Grafana بنفسه، وأنت تراجع التعديل. وحول Grafana فيه خوادم مجتمعية لأنظمة BI أخرى تتوسع كل شهر، والفكرة وحدة MCP صار “USB” اللي يوصل الوكيل بأي نظام.

تنبيه أخير من التوثيق الرسمي كل خادم MCP تضيفه يستهلك من الـ context اللي يشوفه النموذج، فأضف اللي يخدم شغلك فعلا وعطل الباقي بـ “enabled”: false.

الأتمتة التقرير يحدث نفسه

آخر قطعة في العدة opencode له وضع غير تفاعلي، أمر opencode run ينفذ طلب كامل بدون واجهة، وبما إن الوكيل صار موصول بقاعدة البيانات عبر MCP

bash

opencode run –agent analyst “Refresh report.md and dashboard.html from store.db”

وهنا تكتمل الصورة حط هذا الأمر في cron أو GitHub Actions (مع علم –auto للموافقة التلقائية على الصلاحيات المسموحة)، وخل التقرير والداشبورد يتجددان كل ليلة من أحدث بيانات في القاعدة، بدون أي تصدير يدوي. وأمر opencode stats يعرض لك استهلاك الـ tokens والتكلفة لكل جلساتك، عشان تعرف كم يكلفك التحليل الآلي فعليًا

الأمان مع بيانات حقيقية

نقطة أخيرة مهمة لأهل الشغل قبل ما تشغل وكيل على بيانات حقيقية، استخدم نظام الصلاحيات. مثال يمنع الحذف ويطلب إذن قبل أي شيء يمس الملفات الخام.

json

{ “permission”: { “bash”: { “*”: “allow”, “rm *”: “deny” }, “external_directory”: “ask” } }

و external_directory تحديدًا مهمة تمنع الوكيل يقرأ أو يكتب خارج مجلد المشروع بدون إذنك.

الزبدة

السؤال اللي بدأنا فيه وين يعيش Loop Engineering؟ الحين الجواب صار ملموس. opencode يعطيك الحلقة كاملة نموذج تختاره أنت، أدوات تنفيذ، بوابة صلاحيات، حد خطوات، كاشف حلقات ميتة، ضغط سياق تلقائي، وتراجع مبني على Git. وفوقها طبقة تخصيص تحول الأداة من “مساعد برمجة” إلى “منظومة محلل بيانات” وكيل analyst يحمل منهجيتك، أمر /report يعيد السلسلة كاملة، مهارة تحفظ فحوصاتك، خادم MCP من 27 سطر يوصل الوكيل بقاعدة بيانات متجرك قراءة فقط، داشبورد يبنى من المصدر مباشرة (و Grafana وأخواتها على بعد خادم MCP رسمي)، و opencode run يؤتمت السلسلة كلها في cron.

نصيحتي نفسها دايم ابدأ بمشروع صغير وبيانات تجريبية مثل هذي، وخل عينك على كل خطوة ينفذها. الوكيل ينجز، لكن المراجعة النهائية شغلك أنت، والأرقام اللي تطلع في تقرير باسمك مسؤوليتك أنت. وهذا بالضبط الفرق بين شخص يستخدم الأداة، وشخص الأداة تستخدمه.

في مقال قادم إن شاء الله نسوي نفس الرحلة مع Claude Code ونقارن الوكلاء، المهارات، الأتمتة، والفلسفة المختلفة بين الأداتين.

Originally published on X.