AI Capabilities
AI that takes actions, not just AI that talks
Anyone can drop a chat box into a product. The hard, valuable part is wiring AI into your real systems so it gets work done — safely. That's the work I specialize in.
AI capabilities
Tool-based agents
Agents built around typed tools — create a record, launch a campaign, fetch analytics. Claude decides which tool to call; your API does the work. Reliable enough for production because each tool validates its own inputs.
MCP servers
Model Context Protocol servers that expose your systems to an agent through one consistent interface — so adding the tenth tool is as clean as the first, and access stays auditable.
Production chatbots
Assistants that handle real workflows — bookings, support, onboarding — in Arabic, French and English, with confirmation steps before anything irreversible happens.
AI media generation
Image and video generation (Veo 3, Nano Banana and more) wired behind real-time previews, so users watch creatives appear instead of waiting on a spinner.
Model selection & routing
Choosing the right model for each task — Claude for agentic and multilingual work, others where they fit — balancing accuracy, latency and cost rather than chasing benchmarks.
Guardrails & evals
Least-privilege tools, input validation, logging and confirmation gates. AI features get the same engineering rigor as the rest of the codebase.
The pattern I use
Tools, not prompts
The reliability trick isn't a clever prompt — it's giving the model a set of small, typed tools and letting it choose. Each tool validates its own inputs, so a vague request becomes a clarifying question instead of a wrong action. Here's the shape of a real agent, using the Anthropic SDK.
- Every action is a typed, validated tool
- Claude selects and sequences; your code executes
- Irreversible actions get a confirmation gate
- Everything is logged for audit and evals
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
// Each capability is a typed tool. Claude chooses; your code executes.
const tools = [
{
name: "create_campaign",
description: "Create an ad campaign from a natural-language brief.",
input_schema: {
type: "object",
properties: {
objective: { type: "string", enum: ["traffic", "leads", "sales"] },
daily_budget: { type: "number", description: "USD per day" },
audience: { type: "string", description: "Who to target" },
},
required: ["objective", "daily_budget"],
},
},
] as const;
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
tools,
messages: [
{
role: "user",
content: "Launch a $40/day sales campaign retargeting last month's visitors.",
},
],
});
// Claude returns a tool_use block; you run it, validate, then return the result.
for (const block of message.content) {
if (block.type === "tool_use" && block.name === "create_campaign") {
const campaign = await ads.createCampaign(block.input); // your API, your validation
// ...send { type: "tool_result", tool_use_id: block.id, content } back to Claude
}
} Models I work with
Anthropic Claude
My default
For agentic, tool-using and multilingual work. The reasoning and reliability make it the model I reach for first — it's what powers Scalify's and Spacloudy's agents.
OpenAI
Where it fits
For specific tasks and ecosystems where its models or tooling are the better fit.
Google Gemini
Where it fits
For multimodal and Google-ecosystem work where it has an edge.
FAQ
About building with AI
What's the difference between an AI chatbot and an AI agent?
What is MCP and why does it matter?
Can an AI agent handle bookings or support in Arabic and French?
Which AI model should I use for my product?
Is it safe to let an AI agent take actions in my system?
Have an AI feature in mind?
From a single agent to a full assistant, I'll help you build AI that's reliable enough to ship.