Solution Packs
Pre-built, domain-specific bundles of agents, workflows, squads, and prompts.
What it is
Solution Packs are pre-built, domain-specific collections of agents, prompts, workflows, and squads for a vertical (Insurance, Financial Services, HR, Customer Support…). With a pack you start from production-tested components instead of a blank page. Packs are pure configuration (JSON), decoupled from the core platform, and you install them through the API.
The TurfAI website calls these Domain Packs.
Implementation status. The installer is real, not a mock-up. The solution-pack content
type, the install/list/uninstall API, and seven shipped packs all exist today in the DMS
(dms/src/api/solution-pack/ and dms/src/seeds/packs/). What is still forward-looking is the
update/export/import endpoints, a UI "Fork" action that creates a customised copy, a
separate turfai-packs distribution repo, and the marketplace. This guide marks those
coming soon. Where the older planning doc (solution-packs-model.md) says "plan only",
treat the code as the source of truth — much of the plan has since been built.
When to use it
Use a pack to stand up a working demo or PoC, or as a reference architecture for a domain. Install the pack, connect your data sources, then customise any component. The platform stays the same across domains — only the integration layer and data source change.
- Use a pack as-is when the shipped agents/workflows match your process and you only need to swap config (model, temperature) or point integrations at your systems.
- Fork a component when you need to change content — a prompt's extraction schema, a workflow's node graph, or a squad's composition. Forking (planned) keeps your edits safe from pack updates via copy-on-write; today you achieve the same by cloning the component manually.
- Build a custom pack when no shipped pack fits — use an existing pack as the worked example.
How it works
Process flow — install to live:
Don't assume the install order from the earlier planning doc. It described a strict
prompts → agents → workflows → squads dependency order, but the code does not enforce it. The
shipped installer seeds workflows → agents → squads → prompts, upserting each record
independently so one bad record never blocks the rest. It upserts by slug, tolerates partial
failure, and returns a per-component created / updated / skipped summary plus an errors[]
array.
Call flow — installation:
Sub-features
- Three tiers + prompts — agents, workflows, squads (each builds on the one below), plus the domain prompts that give agents their expertise.
- Idempotent install — re-installing upserts by slug; unmodified system components are updated in place, forked copies are skipped.
- Copy-on-write customisation (planned) — system components are read-only; "Customize" forks a
user-owned copy with
forked_from, never overwritten by updates. The read/uninstall paths already honourforked_from; the fork-creation action is coming soon. - Demo self-sufficiency (planned) — packs are intended to ship sample data + mock integrations for standalone demos. Mock-integration bundling is roadmap.
Configuration parameters
Pack manifest (manifest JSON)
The bundle is { manifest, prompts[], agents[], workflows[], squads[] }. The manifest carries
pack identity; the four arrays carry the components.
| Field | Status | Description |
|---|---|---|
name | available | Display name (e.g. Insurance Pack) — required |
slug | available | Unique pack id (e.g. insurance) — required |
version | available | Pack version (e.g. 2.0.0) — required |
description | available | One-line summary stored on the registry entry |
category | available | industry | horizontal | custom (default industry) |
icon / color | available | UI presentation hints |
data_shield_policy | available (field) | Pack-default Data Shield policy inherited by the pack's workflow activities; shape mirrors activity.data_shield_policy. Present on the registry schema; shipped packs do not yet populate it |
min_compatible_version / changelog | coming soon | Version-gating + update notifications (update endpoint not built) |
Per-component definitions (in the bundle arrays)
The installer maps each array element onto the matching content type. Fields not listed here fall back to defaults.
| Component | Key fields the installer reads |
|---|---|
prompts[] | slug, title, description, roles, tasks, instructions, outputFormat, exampleOutput, version (strings are coerced to the JSON column shapes; level is forced to system) |
agents[] | slug, name, description, goal, prompt_title, available_tools, model (default vertex), max_iterations (10), temperature (0.3), conversational, custom_tools, mcp_servers, guardrails, welcome_message |
workflows[] | slug, name, description, category, tags, difficulty, definition (nodes/edges), prerequisites, version; forced is_system: true, is_public: true |
squads[] | slug, name, description, process (default sequential), agents[] (each { slug, role }, optionally with name, goal, available_tools, model), tasks, max_total_iterations (30) |
Every seeded component is tagged pack_slug, pack_version, and linked to the solution_pack
registry entry; agents/squads/packs also record an owner.
Install-time env
| Parameter | Status | Description |
|---|---|---|
AUTO_INSTALL_PACKS (e.g. insurance,financial-services) | coming soon | Auto-install packs on boot for managed deployments. Described in the model doc; not wired in the current installer |
Dependencies
- Core platform — workflow engine, agent runtime, squad executor, prompt service (all packs share these). See Agents, Squads, and the Visual Workflow Builder.
solution-packregistry + installer API in DMS (built).- Integrations — packs reference your email, document storage, CRM, etc. See Integrations.
- Pack seed files — today packs live in
dms/src/seeds/packs/. A separateturfai-packsdistribution repo withbuild-bundle.jstooling is coming soon.
Limitations
- Pack quality depends on its prompts and sample data; domain SME tuning is expected.
- No update / export / import endpoints yet —
POST /update,POST /export,POST /importfrom the model doc are not implemented. Re-running install is the only "update" path. - No UI fork action yet — the schema and install/uninstall logic respect
forked_from, but no endpoint creates a fork. Customise by cloning a component manually until this ships. - No marketplace / GCS distribution — packs are local seeds, not a remote registry.
Concrete examples
Pack manifest excerpt
{
"manifest": {
"name": "Insurance Pack",
"slug": "insurance",
"version": "2.0.0",
"category": "industry",
"icon": "🛡",
"color": "#2563eb",
"description": "Claims, underwriting, compliance & broker support"
},
"prompts": [ /* 14 domain prompts */ ],
"agents": [ /* 14 single-purpose agents */ ],
"workflows": [ /* 7 end-to-end automations */ ],
"squads": [ /* 3 multi-agent teams */ ]
}Reference example — the Insurance pack composition
This is the shipped reference pack (dms/src/seeds/packs/insurance.json, v2.0.0):
| Tier | Count | Examples |
|---|---|---|
| Agents | 14 | FNOL/claims intake, claims summarizer, policy Q&A, coverage analyst, valuator, compliance reviewer, plus squad specialists |
| Workflows | 7 | insurance-claims-intake, insurance-underwriting, insurance-manual-underwriting-review, insurance-policy-issuance, insurance-policy-renewal-reminder, insurance-complaint-handling, insurance-fraud-indicator-detection |
| Squads | 3 | insurance-claims-settlement-squad, insurance-underwriting-squad, insurance-broker-support-squad |
| Prompts | 14 | Extraction schemas, analysis rubrics, communication templates |
The marketing/overview doc lists the Insurance pack as 14 agents / 4 workflows / 3 squads / 14 prompts. The shipped seed has grown to 7 workflows (intake, underwriting, manual review, issuance, renewal reminder, complaint handling, fraud detection). The seed file is authoritative.
A squad in the bundle declares its agents inline with a per-step role and task — e.g. the Claims Settlement Squad runs five agents sequentially:
{
"slug": "insurance-claims-settlement-squad",
"name": "Claims Settlement Squad",
"process": "sequential",
"agents": [
{ "slug": "insurance-evidence-collector", "role": "Evidence Coordinator", "task": "Determine required evidence; flag blocking items." },
{ "slug": "insurance-coverage-analyst", "role": "Coverage Analyst", "task": "Decide whether the event is covered; list exclusions." },
{ "slug": "insurance-claims-valuator", "role": "Claims Valuator", "task": "Calculate the fair settlement amount." },
{ "slug": "insurance-settlement-drafter", "role": "Settlement Drafter", "task": "Draft the settlement offer letter." },
{ "slug": "insurance-compliance-reviewer", "role": "Compliance Reviewer", "task": "Check the offer for regulatory compliance." }
]
}Beyond Insurance, six more packs ship today: financial-services, hr-recruitment,
customer-support, education-learning, operations-it, project-management.
Fork example (planned shape)
When the fork action ships, customising a component will create a user-owned copy. The copy points back at the original, and pack updates never touch it:
// System component (read-only)
{ "slug": "insurance-fnol-intake", "is_system": true,
"pack_slug": "insurance", "pack_version": "2.0.0" }
// "Customize" -> user-owned fork (fully editable)
{ "slug": "insurance-fnol-intake-custom", "is_system": false,
"forked_from": "insurance-fnol-intake", "owner": "<user.id>" }Today you reproduce this manually: clone the component, edit the copy, and point your workflow/agent
at the clone. Uninstall already preserves anything with a forked_from value.
Tips & best practices
- Install → configure → fork → deploy. Install the pack, point its integrations at your
systems and adjust config-only fields (model, temperature,
max_iterations) in place; fork only when you need to change prompt content or graph structure; then run the workflows/squads. - Fork vs use-as-is. Use as-is for config tweaks (those are safe to edit on the system component). Fork for content changes — editing a system prompt or workflow graph in place will be overwritten when the pack updates (once updates ship), so fork to protect it.
- LLM-agnostic. Packs set
model: vertexby default but the field is per-agent and free to change — agents run on Gemini/Vertex, OpenAI, Claude, or a self-hosted model. Packs are JSON, so nothing is locked to one provider. - On-prem / data residency. Packs deploy wherever TurfAI runs; no data leaves your
infrastructure. Set a pack-level
data_shield_policyin the manifest to ship a default tokenisation posture that the pack's workflow activities inherit — see Data Shield. - Idempotency is your friend. Re-running install is safe: unmodified system components are upserted, forks are skipped. Use it to refresh a pack after editing the seed file.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Invalid bundle: missing manifest / missing slug, name, or version | Malformed bundle | Ensure the top level is { manifest, prompts, agents, workflows, squads } and the manifest has slug, name, version. |
Pack '<slug>' not found in seed library | install-by-slug for a slug with no file | Confirm dms/src/seeds/packs/<slug>.json exists; or POST the bundle to /solution-packs/install directly. |
Install returns errors[] for some components | A single record failed validation (bad slug, unresolved prompt_title, invalid workflow definition) — others still seeded | Read the per-component error, fix that record, re-install (idempotent). The whole install does not roll back. |
| Agent references a prompt that isn't there | prompt_title points at a prompt not in the bundle | Add the prompt to prompts[] or correct prompt_title. The installer does not pre-validate cross-references — validate-pack.js (which would) is coming soon. |
| Squad references a missing agent | A squad.agents[].slug has no matching agent in agents[] | Add the agent or fix the slug; re-install. |
| Edited a system component, change vanished after re-install | You edited content on a system component | Fork the component (or clone it today) so it carries forked_from; forks are skipped on install and preserved on uninstall. |
| Pack requires an integration you don't have | Workflow nodes reference an unconfigured integration | Connect the integration (Integrations) before running; prerequisite enforcement at install time is coming soon. |
| Version mismatch on update | No update endpoint exists | Version-gated updates with min_compatible_version / changelog diffs are coming soon; for now re-install to overwrite system components. |
How to test
- List available packs — call
GET /api/solution-packs/available. It returns every seed pack with itscomponent_countandinstalledflag. - Install — call
POST /api/solution-packs/install-by-slug/insurance(or POST a full bundle to/api/solution-packs/install). Check that the responsesummaryshows componentscreated. - Verify components created —
GET /api/solution-packs/:idreturns the registry entry with populatedagents/workflows/squads/prompts; or filter the component lists bypack_slug=insurance. Each should be taggedis_systemwithpack_version: 2.0.0. - Run it — execute
insurance-claims-intakeor the Claims Settlement squad against a sample input and confirm the expected output. - Fork a component (coming soon) — once the fork action ships, "Customize" an agent, confirm a
forked_fromcopy is created, then re-install and confirm the fork survives (uninstall preserves forks today). - Uninstall —
DELETE /api/solution-packs/:id/uninstallremoves system components in reverse order and leaves anyforked_fromcopies in place.
Cross-links & roadmap
Related pages
- Agents — the single-purpose workers a pack ships.
- Squads — the multi-agent teams; pack squads declare agents inline with roles/tasks.
- Visual Workflow Builder — where pack workflows render and run.
- Prompt Lab — the domain prompts that give pack agents their expertise.
- Integrations — connect pack workflows to your email, storage, and CRM.
- Data Shield — set a pack-default
data_shield_policy.
Coming soon (forward-looking)
| Capability | Status |
|---|---|
| Phase 1 domains: Insurance, Legal, Healthcare, Financial Services | Insurance + Financial Services ship today; Legal & Healthcare planned |
| Phase 2 domains: Real Estate, HR/Recruitment, Manufacturing, Education | HR, Education ship today; rest planned |
| Phase 3 domains: Sales & Marketing, IT Operations, Procurement, Customer Support | Operations-IT, Customer Support ship today; rest planned |
POST /update · POST /export · POST /import endpoints | Planned |
UI "Fork / Customize" action (creates forked_from copy) | Planned |
AUTO_INSTALL_PACKS boot env + GCS distribution | Planned |
Separate turfai-packs repo + build-bundle.js / validate-pack.js | Planned |
| Partner & community marketplace | Planned |
APIs used
| Method | Path | Status | Purpose |
|---|---|---|---|
GET | /api/solution-packs/available | available | List seed packs with install status + counts |
GET | /api/solution-packs/bundle/:slug | available | Full display bundle for one pack |
GET | /api/solution-packs | available | List installed packs (registry entries) |
GET | /api/solution-packs/:id | available | Pack detail with populated components |
POST | /api/solution-packs/install | available | Install from a bundle JSON |
POST | /api/solution-packs/install-by-slug/:slug | available | Install a shipped seed pack by slug |
DELETE | /api/solution-packs/:id/uninstall | available | Remove system components (preserves forks) |
POST | /api/solution-packs/:slug/update | coming soon | Update to latest version |
POST | /api/solution-packs/export · /import | coming soon | Bundle / load packs (partner authoring) |
See the synced solution-packs reference.