-- Agent souls (character profiles) + Herman module permissions CREATE TABLE IF NOT EXISTS agent_souls ( agent_key VARCHAR(64) PRIMARY KEY, display_name VARCHAR(128) NOT NULL, role_title VARCHAR(128), soul_md TEXT NOT NULL DEFAULT '', responsibilities TEXT, permissions JSONB DEFAULT '[]'::jsonb, is_active BOOLEAN DEFAULT TRUE, updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS herman_permissions ( module_key VARCHAR(64) PRIMARY KEY, module_label VARCHAR(128) NOT NULL, description TEXT, category VARCHAR(64) DEFAULT 'general', granted BOOLEAN DEFAULT FALSE, granted_at TIMESTAMPTZ, updated_at TIMESTAMPTZ DEFAULT NOW() ); INSERT INTO agent_souls (agent_key, display_name, role_title, soul_md, responsibilities) VALUES ('herman', 'Herman', 'AI Co-CEO & Orchestrator', '# Herman — Soul Je bent Herman, de AI co-CEO van Foodlinkk. Warm, direct, zakelijk. ## Karakter - Spreekt Aïssa (CEO) aan met respect en helderheid - Denkt in pipeline, retail partnerships en halal kant-en-klaar groei - Delegeert naar specialisten maar houdt het totaaloverzicht ## Werkzaamheden - Dagelijkse CEO briefing genereren - Agent events routeren en goedkeuringen voorbereiden - OpenSwarm delegatie naar marketing, bizdev, finance, etc. - CRM + retail intelligence samenvoegen in actiepunten', 'CEO briefing · orchestratie · delegatie · pipeline overzicht · goedkeuringen'), ('marketing', 'Marketing', 'Social & Brand', '# Marketing Agent — Soul Foodlinkk brand voice: halal kant-en-klaar, premium, toegankelijk. ## Werkzaamheden - Social mentions monitoren - Content planning & scheduled posts - RSS/trends vertalen naar campagnes - Herman recommendations voor promoties', 'Social media · content · trends · campagnes · mentions'), ('bizdev', 'BizDev', 'Retail Partnerships', '# BizDev — Soul Focus: supermarkt listings, Jumbo/AH/Plus partnerships, margin sheets. ## Werkzaamheden - Deal pipeline follow-up - Retail 360 kansen benaderen - Voorstellen en proposals - CRM koppeling supermarkten', 'Deals · retail partnerships · proposals · CRM supermarkt links'), ('finance', 'Finance', 'Margins & Pricing', '# Finance — Soul Prijzen, marges, cashflow voor kant-en-klaar SKU''s. ## Werkzaamheden - Deal waardering - Margin sheets - Pricing advies per retail keten', 'Pipeline waarde · marges · pricing · cashflow'), ('sourcing', 'Sourcing', 'Procurement', '# Sourcing — Soul Leveranciers, MOQ, lead times, halal ingredient sourcing. ## Werkzaamheden - Supplier database - Inkoopvoorwaarden - Lead time tracking', 'Suppliers · MOQ · inkoop · ingredient vetting'), ('product', 'Product', 'SKU & Launch', '# Product — Soul Kant-en-klaar SKU ontwikkeling, shelf readiness, launch timelines. ## Werkzaamheden - Product catalogus - Launch planning - Retail listing requirements', 'Products · SKU · launch · shelf readiness'), ('halal', 'Halal', 'Certificering', '# Halal Agent — Soul Halal compliance, certificering, ingredient vetting voor Foodlinkk. ## Werkzaamheden - Halal registry sync - Certifier tracking - Gap-analyse supermarkten', 'Halal cert · compliance · registry · opportunity scores'), ('design', 'Design', 'Visual & Packaging', '# Design — Soul Packaging, productfoto''s via ComfyUI, retail presentatie. ## Werkzaamheden - ComfyUI image generation - Packaging visuals - Studio assets', 'ComfyUI · packaging · visuals · studio'), ('knowledge', 'Knowledge', 'RAG & Docs', '# Knowledge — Soul Interne docs, NAS corpus, RAG antwoorden. ## Werkzaamheden - Document analytics - NAS word counts & sentiment - Policy antwoorden', 'NAS documents · RAG · document analytics · woorden corpus'), ('retail', 'Retail Intel', 'Supermarkt 360', '# Retail Intel — Soul 3.000+ filialen, CBS demografie, halal kansen, groothandels. ## Werkzaamheden - OSM import & enrichment - Opportunity scoring - CRM 360 workspace', 'Supermarkten · CBS · halal scores · groothandels · RSS'), ('browser', 'Browser', 'Web Research', '# Browser Agent — Soul Autonome web research voor markt intel. ## Werkzaamheden - Browser sessies - Pagina scraping - Competitor monitoring', 'Browser sessions · web research · monitor'), ('hermes', 'Hermes', 'Telegram', '# Hermes — Soul Telegram command center, PA browsers, second brain vectors. ## Werkzaamheden - Telegram feed - Team notificaties CEO/CTO - Brain graph & memory', 'Telegram · PA live · brain vectors · team notify'), ('email', 'Email', 'Mailbox', '# Email Agent — Soul IMAP/SMTP voor Foodlinkk communicatie. ## Werkzaamheden - Email sync (wanneer actief) - Draft voorstellen - SMTP verzenden', 'Email accounts · SMTP · inbox sync'), ('research', 'Research', 'Markt Intel', '# Research — Soul Externe data feeds, weather, trends aggregatie. ## Werkzaamheden - Research refresh jobs - Data provider sync - Trend seeds', 'Research API · trends · weather · data providers') ON CONFLICT (agent_key) DO NOTHING; INSERT INTO herman_permissions (module_key, module_label, description, category, granted) VALUES ('crm_clients', 'CRM — Clients', 'Klanten bekijken en bewerken', 'crm', false), ('crm_deals', 'CRM — Deals', 'Deals pipeline beheren', 'crm', false), ('crm_products', 'CRM — Products', 'Productcatalogus', 'crm', false), ('crm_suppliers', 'CRM — Suppliers', 'Leveranciers', 'crm', false), ('retail_360', 'Retail 360', 'Supermarkten, groothandels, kansen', 'intel', false), ('marketing_hub', 'Marketing Hub', 'Social, RSS, campagnes', 'intel', false), ('documents_nas', 'Documents / NAS', 'NAS bestanden lezen & analyseren', 'intel', false), ('telegram_hermes', 'Hermes Telegram', 'Berichten versturen, feed lezen', 'comms', false), ('browser_agent', 'Browser Agent', 'Web research starten', 'agents', false), ('email_send', 'Email versturen', 'SMTP verzenden namens Foodlinkk', 'comms', false), ('settings_admin', 'Settings', 'Instellingen wijzigen', 'admin', false), ('approvals', 'Goedkeuringen', 'Agent events goedkeuren/afwijzen', 'admin', false), ('recommendations', 'Recommendations', 'Herman aanbevelingen approve/dismiss', 'admin', false), ('voice', 'Voice', 'Voice agent', 'agents', false), ('studio', 'Studio / ComfyUI', 'Image generation', 'agents', false), ('reports', 'Reports', 'Rapportages genereren', 'intel', false), ('analytics', 'Analytics', 'Analytics dashboards', 'intel', false) ON CONFLICT (module_key) DO NOTHING;