المشكلة: AI يعمل actions
AI الـ traditional = chatbot. يجاوب على أسئلة. لا يعمل actions.
Adam مختلف. Adam = agent. يقدر:
- يـ read files
- يـ run shell commands
- يـ browse websites
- يـ modify databases
- يـ send emails
الـ action surface = أكبر attack surface.
الـ Permission Manager
كل action قبل ما ينفّذ، يمر في الـ Permission Manager:
action.requested → permission.check → {allow, deny, ask}
19 category، 3 mode لكل category:
الـ 19 category
- file.read — قراءة ملفات
- file.write — كتابة ملفات
- file.delete — حذف ملفات
- shell.safe — أوامر آمنة (ls, cat, pwd)
- shell.network — أوامر network (curl, wget)
- shell.dangerous — أوامر خطرة (rm, dd, mkfs)
- browser.read — قراءة صفحات
- browser.write — كتابة في صفحات (forms, comments)
- browser.submit — submit forms
- email.read — قراءة emails
- email.send — إرسال emails
- email.draft — إنشاء draft بدون إرسال
- database.read — قراءة من database
- database.write — كتابة في database
- database.delete — حذف من database
- api.call.external — calling external APIs
- api.call.internal — calling internal APIs
- mcp.execute — تنفيذ MCP server
- subagent.spawn — تشغيل subagent
الـ 3 modes
كل category يقدر يضبطها العميل على واحد من:
- auto-allow: ينفّذ بدون سؤال
- once: يسأل مرة واحدة في الـ session
- always-ask: يسأل في كل مرة
الـ default configuration
عند الـ install، الـ default:
| Category | Default mode |
|----------|--------------|
| file.read | auto-allow |
| file.write | once |
| file.delete | always-ask |
| shell.safe | auto-allow |
| shell.network | always-ask |
| shell.dangerous | always-ask |
| email.send | always-ask |
| database.delete | always-ask |
| subagent.spawn | once |
العميل يقدر يضبط. بس الـ default conservative.
مثال حقيقي
User: 'احذف كل الـ logs القديمة'
Permission check:
action: file.delete (in /var/log/)
category: file.delete
mode: always-ask
→ ASK USER
Adam: 'هل تريد فعلاً حذف /var/log/؟'
options: ['نعم، احذف', 'لا، أوقف', 'اعرض لي المحتوى أولاً']
Audit log
كل action، مسموح أو مرفوض، يتسجل في:
/audit/2026-07-05.jsonl
{
"timestamp": "2026-07-05T14:23:18Z",
"user": "[email protected]",
"action": "file.delete",
"path": "/var/log/old.log",
"result": "allowed",
"session_id": "abc123"
}
الـ audit log:
- Append-only (لا يمكن تعديله)
- Cryptographically signed
- Queryable via API
- Exportable for compliance
Engineering decisions
ليش 19 مش 50؟
كل category = code + test + documentation. 50 = burden على المستخدم. 19 = enough granularity for 95% of use cases.
ليش 3 modes مش 5؟
- auto-allow / always-deny = binary
- once / always-ask = session-level granularity
- 5 modes = feature creep
ليش default conservative؟
Default insecure = bad UX (في أول bug، الشركة خسرانة data). Default conservative = slow but safe. العميل يقدر يفتح. ما يقدر يقفل لو ضاع الـ key.
الـ Permission Manager كـ engineering choice
19 × 3 = 57 configuration options. قد يبدو كثير. لكنه:
- Single source of truth
- Version controlled
- Auditable
- Default safe
الـ Permission Manager مش feature — هو الـ contract بين الإنسان والـ AI.



