Meet the Foresyte AI Agent: Your Forecast Copilot Is Here
Foresyte now ships with an AI agent that explains forecasts, investigates runs, and drafts model-tuning changes — all gated behind explicit user approval. Here is what it does and how it works.
Today we are launching the Foresyte AI Agent — a conversational copilot built directly into the dashboard that helps you onboard data, understand forecast runs, and improve model quality without ever leaving the product. It is live for every workspace, starting now.
The agent lives in the chat panel in the bottom-right of every screen. Open it, ask a question in plain English, and it responds with grounded answers, drafts proposals you can accept or reject, and — crucially — never mutates anything in your workspace without your explicit sign-off.
Demand forecasting tools have always given you numbers. They have rarely given you answers. The Foresyte agent closes the loop between "here is a forecast" and "here is why, and here is how to make it better."
What the Agent Can Do Today
We scoped the v1 feature set around the five questions forecasting teams ask us most often. Each one is now a first-class capability in the agent.
Built on a Safety-First Architecture
We spent more time on the safety model than on the features. Here is what that means in practice:
| Control | How it works |
|---|---|
| Proposal-first mutations | The agent cannot write to your workspace directly. Every change — parameter tweaks, model overrides, pipeline config — is drafted as a pending proposal that you explicitly approve. |
| Full rollback | Every applied change snapshots the prior state. One click reverts it. No reconstruction, no guessing what "before" looked like. |
| Audit trail | Every agent conversation, tool call, proposal, and approval is logged to agent_messages and agent_changes. Compliance-ready. |
| Bounded reasoning | Each turn runs at most four tool calls before it must respond. It cannot loop indefinitely, rack up bills, or wander into long-running investigations without permission. |
| Attachment isolation | Uploaded files are held in a short-lived Redis buffer with a hard size cap. The agent receives a structural summary — column names, sample rows, detected layout — never raw file bytes. Prompt injection from file contents is structurally prevented. |
| Tenant isolation | Every query the agent issues is scoped by tenant_id, enforced at both the application and database levels (RLS). The agent cannot reach data outside your workspace, even accidentally. |
It cannot apply changes without approval. It cannot trigger a forecast run unprompted. It cannot read or reference data from another tenant. It cannot bypass the approval queue or roll back changes on its own. These are architectural limits, not policy ones — the code paths literally do not exist.
Under the Hood
For the technically curious, here is how the agent is wired together:
- Model: OpenAI's GPT-5.4 family, served via Azure OpenAI with strict structured outputs. The classifier, planner, summary, and escalation roles each run on a dedicated deployment so we can tune cost and capability independently.
- Planner loop: A single-turn planner built on a typed intent classifier. Each message first routes into one of five intents (
schema_help,investigation,improvement_request,general_question,out_of_scope), then runs a bounded tool-execution loop before replying. No multi-step autonomous agents — every turn terminates predictably. - Structured outputs everywhere: Every model response is validated against a pydantic schema. Invalid outputs raise typed errors with the raw payload attached, so we catch misbehavior at the edge instead of shipping garbage into the UI.
- Observability baked in: Every LLM call emits a telemetry record — role, deployment, latency, token counts, status. Failures log at
ERROR; successes atINFO. You can replay the full trace of any conversation from the audit log.
Sample Conversations
Here is what actually talking to it feels like.
You: "Here is a sample of our Shopify export. Will it work?"
Agent: "Yes, with one change. Your file has all required fields (order_date, product_code, quantity), but the product_code column is labeled SKU. I can map it for you — want me to save that mapping for future uploads?"
You: "Why did product CA00003 swing 40% higher in this run?"
Agent: "Three factors: a recent promotion event was detected in the last 14 days of data, the archetype routing bumped it from B to A (higher-confidence seasonal pattern now visible), and the damping parameter dropped from 0.9 to 0.85 based on the new segment rule. I can pull up the full feature diff if you want."
You: "My fast-mover accuracy looks weak this quarter."
Agent: "I can see wMAPE on your archetype-A products went from 18% to 27% in the last two runs. I have drafted a proposal to tighten the changepoint prior scale from 0.05 to 0.02 on that segment — the recent regressions look like the model over-reacting to noise. Expected wMAPE recovery: ~5 points, with full rollback available. Open proposal."
What's Next
This is v1. The roadmap for the next few months:
- Slack integration: ask the agent from wherever you actually work.
- Scheduled investigations: post-run summaries delivered automatically with "here is what changed and why" commentary.
- Forecast narratives: generate exec-ready written summaries of a run's output for finance and ops partners.
- Goal-based workflows: state an outcome ("reduce stockout risk on top-20 SKUs"), the agent breaks it into a multi-step plan, you approve each step.
- Custom tool registration: expose your own business logic as agent-callable tools.
A Note on Trust
The best feedback we got during the private beta came from a planner at a mid-size DTC brand who told us: "I do not want an AI that makes decisions for me. I want one that surfaces the decisions I should be making, and then does the typing." That is the product we tried to build. The agent sees your data, reasons about it, drafts clear proposals, and stops. You remain the operator.
If that resonates — open the chat panel and say hello. We are excited to see what you ask it first.
