Multi-Agent Orchestration
Agents delegate to specialists, run tasks in parallel, and return coordinated results with full trace visibility.
A personal AI system where specialist agents research, write, generate media, manage your calendar, and coordinate with each other. Built for one user. Not a SaaS.
Agents delegate to specialists, run tasks in parallel, and return coordinated results with full trace visibility.
Real-time conversations with thinking mode, agent switching mid-thread, document reading, and web browsing.
Generate images and videos through AI providers. Queued jobs with progress tracking, delivered in-chat or via Telegram.
Persistent memory across sessions. Reusable skills that auto-activate based on context. The assistant learns and remembers.
Full two-way Telegram bot. Chat, get reminders, receive generated media, and run commands from your phone.
Scheduled agent tasks, webhook-triggered actions, calendar sync, and smart home control running in the background.
AI generated demo clips exploring how Iris works and how interacting with my personal AI system could feel. Iris coordinates specialist agents, remembers context, and helps me manage everyday work.
A visual exploration of Iris as a thinking partner. The system understands context, reasons about problems, and coordinates specialist agents when working through tasks with me.
A concept visualisation of Iris as a constant presence in my environment. Ready to respond, coordinate tasks, and surface useful information whenever I need it.
A cinematic visualisation of Iris as a central interface where conversations, agents, research, memory, and generated media come together in one place.
Iris is not a product or a service. It is a personal AI system I am building for myself that remembers context, coordinates specialist agents, and helps organise everyday work.
These videos are AI generated visualisations created to explore ideas and interactions around Iris while the real system continues to evolve.
Chatbots answer questions. Iris is something different - an AI system that knows me, manages things for me, and actively works to improve my life. Think less "ChatGPT but self-hosted" and more "a second brain that can actually do things."
The end state looks something like this: I wake up and Iris has already checked my calendar, noticed a conflict, drafted an email to reschedule, and is waiting for my approval before sending it. My fitness agent remembers I skipped legs on Wednesday and adjusts the rest of the week. The research agent has a briefing ready on a topic I asked about yesterday because it took longer than a quick answer. All of this happened proactively, overnight, without me asking.
That is the vision. We are not there yet. But every piece I am building points in that direction.
Read the full storyNot a wrapper around ChatGPT. A full AI runtime built from scratch on Laravel, with provider abstraction, recursive agent orchestration, and queue-driven execution. Built almost entirely with AI coding assistants.
Claude Code and Codex handle implementation. I prompt, review, and oversee - nothing goes in without approval. One developer steering AI agents, production-grade output, weeks instead of months.
AI providers are swappable contracts. Chutes AI is the primary (genuinely great service, not affiliated). Ollama for local development. Adding a new provider means implementing one interface.
Agents call other agents through tool use. The orchestration context tracks depth, prevents cycles, enforces time budgets, and merges traces. Sub-agents run in isolated conversations but report back to the parent.
Streaming and multi-step tool execution handled by the SDK. The generator yields text deltas while Prism manages tool call loops internally. We layer orchestration, memory injection, and skill matching on top.
Sub-agent batches, media generation, reminders, and automations all run through Horizon-managed queues. The HTTP stream stays alive while background work dispatches and resolves asynchronously.
Full SPA experience without a separate API layer. Server-side routing, shared validation, deferred props. The backend defines the contract and the frontend mirrors it.
One Laravel app, one Redis instance, Horizon for queue topology. Deployed on Forge. No microservices, no Kubernetes. Simple until it needs to not be.
Chutes AI for production, Ollama for local development and privacy-sensitive workflows. Same agents, tools, and orchestration regardless of where the model runs. Develop offline, deploy to cloud.
What's shipped, what's being built, and what's coming next.
Shipped does not mean done. Everything listed here is actively maintained and continuously improved as we learn more about what works in practice.
Multi-provider streaming with tool use, specialist agents with custom prompts and models, thinking mode visibility, agent switching mid-conversation. **Room to grow**: structured output mode for agents returning JSON/tables, conversation branching (fork a thread to explore alternatives), and client-side token usage display per message.
ShippedHierarchical agent orchestration with supervisor pattern. Synchronous sub-agent delegation with cycle detection via visited-set tracking, configurable depth limits, and per-agent time budgets. Fan-out/fan-in parallel execution via Bus batches with automatic sequential fallback when queue infrastructure is unavailable. Orchestration context propagation through the full call tree. **Room to grow**: persistent orchestration plans that survive disconnections, agent capability negotiation (agents declaring what they can and cannot do before accepting a task), and cost-aware routing that factors token spend into delegation decisions.
ShippedStream passthrough architecture replacing store-and-forward. Sub-agent output streams directly to the user's browser via SSE, eliminating the parent's second inference pass. TTFT reduced from 15 seconds to 4 seconds. Out-of-band signalling via inline instruction injection tells the parent the content was already delivered. Works for both single delegation and fan-out parallel patterns.
ShippedCircuit breaker with fallback pattern for LLM orchestration. Parent agent takes ownership when specialists fail, implementing graduated degradation: total fallback when all agents error, partial degradation when some succeed. Each failure carries structured metadata (agent name, ID, status: error/timeout/rate_limit/budget_exhausted). Takeover directives use inline instruction injection to override the parent's default behaviour. The leader handles it, no apologies.
ShippedFull observability for the delegation chain. Correlation ID linking from parent message to sub-agent conversation. Collapsible inline panels with progressive disclosure. Structured trace data including tool calls, tool results, token usage, TTFT, and total duration per agent. Span collection via orchestration context for distributed-tracing-style visibility across the agent call graph.
ShippedPersistent memories with shared and agent-specific scoping. Pinned facts, expiring context, AI tools for reading and writing memories. CRUD interface at /memories. Batch storage for multi-fact intake with deduplication and structured responses. **Room to grow**: automatic memory extraction from conversations (the AI notices important facts and saves them without being asked), fuzzy/semantic deduplication, memory conflict resolution, and semantic search across memories using the embedding pipeline.
ShippedCreate specialist agents with custom system prompts, model selection, provider choice, per-agent tool allowlists, voice assignment, routing keywords, sort order, default status, guardrails, and handoff rules. Tool allowlists scope each agent to exactly the tools it needs, reducing model reasoning overhead and preventing irrelevant tool selection. Voice and routing keyword fields feed into the voice pipeline and semantic routing layer respectively. Form-based CRUD in agents page. **Room to grow**: agent versioning (roll back to a previous prompt), prompt A/B testing, agent templates and one-click cloning, and a testing sandbox where you can trial an agent before publishing.
ShippedReusable knowledge blocks with trigger-based auto-matching. Skills inject into agent context when the user's prompt matches. CRUD at /skills.
ShippedConnected knowledge maps that give Iris structured, relevant context for every conversation. Nodes represent knowledge (skills, personal claims, workflows, references), edges represent relationships created automatically from wikilinks. Hybrid retrieval (keyword + semantic + type scoring) with graph traversal and budget constraints. Interactive visual editor with force-directed layout, type filtering, and minimap. Full graph and node CRUD. Shadow mode for safe testing. Retrieval logging for analytics. Built with Claude and Codex.
ShippedAI image generation through Chutes provider. Queued jobs with progress tracking, S3 storage, expiration cleanup, delivered in-chat and via Telegram.
ShippedProvider-agnostic video pipeline with queued jobs, progress tracking, and S3 delivery. Contract-based architecture for adding new video providers.
ShippedMultimodal video analysis with hybrid execution: synchronous for small files, queued jobs for large files, and conversation delivery on completion. Telegram-hosted video attachments auto-queue for reliability. Provider agnostic.
ShippedTime-based reminders with recurrence support. Delivered through the app and Telegram. AI tools for creating, listing, and updating reminders.
ShippedReview-before-commit workflow for multi-item operations. When tools detect 3+ items (reminders, memories, tasks), they build a proposal instead of executing immediately. Per-item approve, skip, and edit controls on both web and Telegram. Execution respects individual item choices with item-level error tracking. 24-hour expiry with automatic purge. Inline chat rendering on web, inline keyboards with per-item buttons on Telegram.
ShippedTwo-way Telegram integration. Receive messages, send responses, deliver generated media as photos/videos, slash command registration, reminder notifications. Channel-aware output transformation (adapter pattern) strips orchestration markers for clean prose delivery. Heartbeat-pattern typing indicators during delegation windows. Real-time streaming via edit-in-place loop. Per-item batch proposal actions with inline keyboards: approve, skip, confirm, cancel individual items before execution. **Room to grow**: conversation threading in Telegram groups, file uploads forwarded into the agent pipeline.
ShippedExpanded from basic page fetch to full research workflow tools: web search, news search, image search, open page, click extracted links, and find exact text patterns in opened pages. Added live market quotes (equity, fund, index, crypto), sports standings/schedules, UTC-offset time lookup, and weather forecast support. Existing website fetch, document reading, and screenshot tools remain in place.
ShippedResilience layer for external tool calls with retry/backoff + jitter, Retry-After handling, provider cooldown windows on 429, and ordered provider fallback chains. Current default web search order is DuckDuckGo first, then Brave, then Serper. Finance now falls back across providers for both traditional and crypto assets.
ShippedAdded a parallel tool execution entrypoint that can run multiple read-only tool calls in one step and return grouped results. Uses Laravel concurrency with sync fallback when process parallelism is unavailable.
ShippedAdded MCP runtime capabilities to list resources, list resource templates, and read resources from configured MCP servers. Includes transport-level resilience and normalized outputs for agent consumption.
ShippedAdded explicit plan update tooling (step/status tracking) and local image-path viewing/analysis. This closes major parity gaps with hosted coding-agent workflows.
ShippedScheduled agent tasks with interval, daily, weekly, and one-time modes. Multi-channel output (app, Telegram). Run history with status tracking.
ShippedOAuth-based calendar sync. AI tools for listing upcoming events and creating new ones directly from conversations.
ShippedSystem health monitoring. Database, Redis, Horizon queue status. Agent task tracking, orchestration traces, failed job visibility.
ShippedSpeech-to-text via browser Web Speech API and server-side transcription (Chutes, ElevenLabs). Text-to-speech with chunked streaming synthesis, prefetch, and markdown stripping. Self-healing conversation loop with auto-restart on silence, error recovery, and noise filtering. Tap-to-interrupt stops speech and resumes listening. 28 English voices (UK and US) via KokoroVoice enum, fetched from backend API. Configurable providers and voices per provider. **Room to grow**: per-agent voice selection, emotion-aware synthesis (adjust tone based on content), multilingual support, and speaker diarisation for multi-person input.
ShippedFeature-flagged realtime voice mode with always-on listening and hands-free barge-in across web and Apple Watch. Speaking during assistant playback cancels audio and model streaming immediately and returns the session to listening - no tap required. Web barge-in uses WebRTC VAD. Watch barge-in uses RMS level detection on the AVAudioEngine microphone tap with a consecutive-frame threshold to distinguish deliberate speech from speaker bleed. Hardware AEC via `.voiceChat` session mode cleans up most of the echo on watch hardware before the level check runs. Added Groq and Deepgram as fast STT options, Deepgram Aura voices for TTS, and an updated voice selector with realtime/legacy mode toggle. **Room to grow**: adaptive VAD sensitivity per device, session-level voice analytics for turn-taking quality. Voice & LLM Provider Expansion (Groq, Deepgram, Inworld AI) Expanded the AI stack with additional provider gateways and unified provider registration across voice and language services. Added Groq to support both speech-to-text and text-to-speech, while also being available as a high-performance LLM provider. Deepgram continues to provide transcription and synthesis through its Aura voice family, and Inworld AI has been added as an additional TTS provider. Provider capability validation, API configuration payloads, and frontend selectors were updated so supported features (LLM, STT, TTS) are surfaced dynamically in the UI instead of relying on hardcoded assumptions. Room to grow: dynamic provider benchmarking per device/network profile, adaptive fallback routing, and real-time provider health scoring exposed directly in voice and model settings.
ShippedRich markdown rendering with rehype-highlight syntax colouring, heuristic block-vs-inline code detection for react-markdown v9 compatibility, and valid DOM nesting (Postel's law approach to streaming partial parse output). Copyable tables with DOM traversal to TSV export. Progressive disclosure via hover-to-reveal controls.
ShippedFull Ollama integration for running models locally. Same provider abstraction as cloud - develop offline, test with local models, keep data on your machine. OllamaRoutingStrategy handles all routing transparently.
ShippedSemantic pre-routing layer that auto-selects the best specialist agent before the LLM runs. Embeds user queries against pre-computed agent capability profiles (Qwen3-Embedding-8B, 4096 dimensions), then blends semantic similarity, historical performance, keyword matching, and recency into a confidence score. Self-learning feedback loop tracks routing outcomes and adjusts agent scores via exponential moving averages. Falls back to the default agent when confidence is low. **Room to grow**: per-user routing preferences, multi-turn context awareness (route based on conversation history rather than just the first message), A/B testing between routing strategies, dynamic threshold adjustment based on the user's override rate, and full agent performance profiling - p50/p95 latency, TTFT distributions, token cost per delegation, failure mode classification, with underperforming agent detection and model swap recommendations feeding back into routing weights.
ShippedWhen running on a local Mac, Iris can read and write files, search file contents with ripgrep, run shell commands, manage Apple Notes and Apple Reminders (iCloud-synced), list directories, and send native macOS notifications. A lightweight Node.js bridge runs natively on the Mac. Docker containers reach it via `host.docker.internal`. Works in chat and voice mode. Iris reminders auto-sync to Apple Reminders on creation. The bridge has path-safe file access, a command allowlist, and bearer-token auth. **Room to grow**: local coding sessions with Git worktree management, branch creation, and PR opening without GitHub - a fully local coding agent flow.
ShippedShipped as a practical personal mobile build using Capacitor + WebView, running on my phone. This gives me native packaging, push-capable foundations, and mobile access to the full app without waiting for a full App Store product cycle. This is intentionally a personal setup, not a distribution-first mobile strategy. I may publish to the App Store later, but it is not a priority right now because this already covers what I need day to day.
ShippedNative watchOS app for hands-free voice sessions directly from the wrist. Raise wrist, tap start, talk to Iris. No phone required once paired. Hardware acoustic echo cancellation via AVAudioSession `.voiceChat` mode prevents the speaker from bleeding into the microphone. Barge-in works the same way as the web client: speak during assistant playback and the session interrupts immediately. A 400ms grace period after audio ends stops the microphone from reopening into the playback tail. The visual indicator is a compact animated waveform bar strip - 13 bars with phase-offset animation, pattern changing by state. Listening ripples gently. Speaking goes tall and fast. Thinking sweeps. The full orb would eat 40% of the screen; the waveform uses 28 points and leaves room for transcript, status, and controls without anything getting pushed off screen. Transcripts show the active speaker only, switching with a crossfade. Sentence-boundary detection resets the visible chunk at each full stop so text never accumulates beyond the fixed two-line zone. After Iris finishes, her last sentence stays visible until you speak again. Session history persists back to the conversation thread. Switch to iPhone or web afterwards and everything is there. Gesture controls: double tap (watchOS 11+) starts or stops the session from anywhere on screen. Swipe up mutes or unmutes the microphone - requires a clearly vertical stroke so arm movements and accidental swipes do not trigger it. The Digital Crown adjusts playback volume while Iris is speaking, with haptic feedback at both ends of the range. Crown input is ignored in all other states so it does not interfere with navigation.
ShippedEvolving from basic CRUD to a three-layer system: session context (auto-captured), long-term recall (consolidated), and pinned facts (permanent). Automatic memory extraction from conversations is the next step.
In ProgressProvider-backed voice agent sessions across web and Apple Watch. Strict settings-first WebSocket startup, keep-alive handling, tool-call bridging, and voice-to-chat message persistence for continuity when switching between voice and text. URL-safe voice responses, in-chat media continuity (image and video previews persist into text mode after voice turns), and watch session history that syncs back to the conversation thread. Current hardening focus: lower-latency turn transitions, better long-session stability, and tighter audio playback quality across device sample rates.
In ProgressMoving beyond form-based agent creation to a visual interface. Goal: drag-and-drop tool selection, prompt templates, testing sandbox, and one-click cloning. No code required.
In ProgressNext hardening pass: migrate MCP server definitions from env JSON to a database-backed registry with per-server metadata, credential management, and enable/disable controls; add provider health metrics and caching for repeated web/data lookups.
In ProgressExpand beyond Telegram to WhatsApp, Discord, iMessage, and email. Same conversation threads across all channels. Adapter pattern already in place from Telegram - each new channel is a new adapter, not a rewrite.
PlannedHome security powered by AI. Frigate handles real-time object detection from cameras (people, cars, animals, packages). Iris adds the intelligence layer: contextual alerts ("delivery driver at front door, Amazon package expected today"), anomaly detection ("unfamiliar car parked outside for 20 minutes"), and time-aware escalation (silent logging during the day, immediate phone alert at 3am). Event clips stored and searchable.
PlannedDedicated always-listening device with wake word detection. Sits on the desk or in the kitchen. "Hey Iris, what's the weather?" without reaching for a phone. The Star Trek computer, in my house.
PlannedIris answers calls when I'm busy, takes messages, screens spam, schedules callbacks. Summarises missed calls and voicemails. "He's not available right now, can I take a message?" Voice models are fast enough. Latency is low enough. It's an engineering problem now, not a research one.
PlannedBeyond basic Home Assistant tool calls. Device pairing UI, event-driven automations triggered by sensor data, scene management, and proactive alerts. "Iris, I'm heading to bed" triggers the full chain: lights, thermostat, alarm, morning briefing.
PlannedFull conversation sync between web and Telegram. Start a chat on web, continue on Telegram. Inline keyboards, rich formatting, file sharing both ways.
PlannedExport conversations. Search across all threads. Usage analytics, cost tracking per provider, agent performance profiling, and automatic conversation summarisation.
PlannedMove from static env-configured MCP endpoints to managed server records (per-user or per-workspace), encrypted auth fields, priority/order controls, and audit logs for resource access.
PlannedAdd response caching and deduplication for search/news/finance/sports/weather calls with TTL policies, stale-while-revalidate, and request budget controls to reduce latency and provider spend.
PlannedMove beyond send-only email. Gmail inbox display, email threading, draft management, and AI-assisted email composition with context from memories and conversations.
PlannedAn agent that writes code, runs tests, opens PRs, reviews its own diffs, and deploys. Routine changes go through autonomously. Complex or risky changes ping me for approval. Merge on approval, deploy to staging, run smoke tests, promote to production. The full pipeline from "fix this bug" to "it's live."
PlannedShopper agent that compares prices, finds deals, and places orders on my behalf. "We're low on coffee" triggers a reorder. "Find noise-cancelling headphones under 200" returns ranked options. One tap approval from watch or phone.
PlannedNotes on what we built, how we built it, and the decisions along the way.
We're living through something special. The AI and LLM space is moving faster than anything I've seen in my career. Every week there's a new model, a new capability, a new way of thinking about what s...
Read moreThe idea is simple. Raise my wrist, talk to Iris, get an answer. No phone, no laptop, no context switch. The kind of thing that should take a day to build and then just work. It did not take a day....
Read moreThe gap that kept bothering me was this: I am talking to an assistant that lives on my Mac, and it cannot see my Mac. It cannot open a file. It cannot check what git branch I am on. It cannot create...
Read moreIris already had multi-agent orchestration. The problem was that it behaved more like a very capable manager with no operations playbook. The main agent could delegate. It could even fan out to multip...
Read moreEvery voice feature I have shipped until now has been three separate things bolted together: STT to turn speech into text, an LLM to think, and TTS to turn the answer back into audio. That architectu...
Read moreThis refactoring was not just about adding providers. It was about removing ambiguity in voice mode. I used to ask a simple question: "Why does voice still feel awkward even after latency work?" Th...
Read moreIris had image analysis. Iris had video generation. What it did not have was video understanding. I kept sending clips and asking "what is happening here?" and the system had no proper pipeline for t...
Read moreWhen Iris creates a single reminder, there's no friction. "Remind me to call the dentist tomorrow at 11" - done, one row, instant confirmation. But real usage doesn't look like that. It looks like: "R...
Read moreBatch proposals shipped with a proper review UI on the web. Inline cards, per-item approve/skip/edit buttons, the full treatment. Telegram got the short end: a numbered list and two buttons - "Confirm...
Read moreAgents used to be a name, a system prompt, and a model choice. Everything else was inherited. Every agent got the same number of tools, no voice identity, and no way to hint to the routing layer what...
Read moreThe memory tool was one of Iris's earliest features. "Remember that I prefer Apple over Orange." One fact, one database row, done. Simple. Too simple. The problem with one-at-a-time Users don't thin...
Read moreThe web UI streams token by token. You see words forming as the model thinks. Telegram didn't do any of that. You'd send a message, watch "typing..." for 15 seconds, then get the entire response dumpe...
Read moreThe skill graph system is live. Time to step back and look at the bigger picture. How we built this Let me be upfront: I did not write this. Not a single line. The idea was mine. The architecture d...
Read moreAn empty graph is not very useful. Today was about creating starter content - pre-built graphs that demonstrate the system's potential and give Iris something meaningful to work with from day one. I...
Read moreThe graph visualisation works beautifully, but there was a gap: you could view and edit nodes, but you could not create new graphs, rename them, or delete them from the interface. Wrote up a quick pla...
Read moreBackend is solid. Today was about building the API layer and the visual interface - making the skill graph something you can actually see and interact with. Claude handled the API controllers, form r...
Read moreArchitecture designed yesterday, building today. Handed the architecture doc to Claude and said "build it." This is where having AI collaborators genuinely shines - the tedious part of translating a d...
Read moreSat down with Claude today and laid out the vision. Described the problem, shared arscontexta's post, and asked it to help me design the technical architecture. The central question: when someone asks...
Read moreCame across a fascinating post by @arscontexta today about using knowledge graphs to make AI agents smarter. It hit differently because it described the exact problem I have been wrestling with in Iri...
Read moreWhen you type "build me a Laravel model with a factory and migration", you mean the Engineer. When you say "research AI trends in healthcare", you want the Researcher. Previously, Iris relied on eithe...
Read moreLet me start by saying this clearly: OpenClaw is genuinely brilliant. If you've used it and haven't starred the repo, go do that. Peter Steinberger built something in a weekend that went from 9,000 to...
Read moreThis is Part 2. If you haven't read Part 1, go do that first - it covers the five foundational techniques (negative constraints, instruction placement, inline instructions, imperative framing, and few...
Read moreIris runs its specialist agents on open-source models - 30B to 235B to 1T parameters, hosted through Chutes AI. These aren't frontier models. They don't have the raw reasoning capacity of Claude Opus...
Read moreThree rendering bugs in the chat markdown component, all interconnected, all caused by the same root issue: react-markdown v9 quietly changed how it passes information to custom components, and our co...
Read moreThe multi-agent pipeline was built for the web UI first. Telegram was an afterthought, and it showed. When a specialist finished its work and the parent relayed the response, the Telegram message inc...
Read moreWhen the parent agent delegated to a specialist, the work happened in a completely separate conversation record. The user saw the final output but had no visibility into what actually happened. What p...
Read moreThis was the problem that bothered me most. You'd ask Iris to delegate a question to a specialist. The specialist would fail - maybe the AI provider returned a 503 (server overloaded), the model timed...
Read moreAfter shipping direct streaming, the parent agent developed an annoying habit. The specialist would stream a detailed research analysis directly to the user. Then the parent would write three paragrap...
Read moreWhen you asked Iris to delegate a question to a specialist agent, you'd wait 15 seconds in silence. The answer was fine when it arrived. The wait was not. What was actually happening Picture a trans...
Read moreYesterday's post was about latency. Today's is about reliability. The chunked TTS system made voice mode feel fast, but it would silently die after a few minutes. You'd finish speaking, wait, and noth...
Read moreIris has a voice mode. You tap the orb, speak, and it responds with audio. The problem was it felt like talking to someone on a really bad phone connection - you'd finish speaking, wait half a minute,...
Read moreIris does not talk to one AI provider. It routes requests across multiple providers, picks the right model for the job, and fails over automatically when things go wrong. The problem Different model...
Read moreLanguage models are good at understanding and generating text. But text alone cannot set a reminder, fetch a webpage, generate an image, or send an email. That is where tools come in. What is a tool...
Read moreIris is provider-agnostic by design - the routing layer can switch between providers mid-conversation. But every system needs a default, and mine is Chutes AI. Full disclosure: I'm not affiliated wit...
Read moreHere's something I want to be transparent about: Iris is built with AI coding assistants. Claude Code and OpenAI's Codex do the heavy lifting on implementation. My job is to oversee, prompt, review, a...
Read moreOne of the core ideas behind Iris is that the assistant should get better over time without deploying new code. That's what the skill registry does. A skill is a chunk of knowledge or instructions wi...
Read moreA common question: why Laravel instead of a Node/Python stack for an AI-heavy app? Laravel AI SDK + Prism gives us streaming, tool use, multi-step reasoning, and provider abstraction out of the box....
Read moreThe biggest technical challenge so far: getting AI agents to delegate work to each other. Most AI frameworks treat agents as isolated units. You pick a model, give it tools, and chat. But what happen...
Read more