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…). They solve the "blank page" problem — start from production-tested components instead of building from scratch. Packs are pure configuration (JSON), decoupled from the core platform, installed via API.
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. Those are marked
coming soon throughout this page. 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 in days, or as a reference architecture for a domain. Install the pack, connect your data sources, then customise any component. The platform is 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:
The seed order in the shipped installer is workflows → agents → squads → prompts (each
record upserted independently so one bad record never blocks the rest). The earlier planning
doc described a strict prompts → agents → workflows → squads dependency order — the code does
not enforce that; it upserts by slug and tolerates partial failure, returning 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. Unlisted fields fall back to sensible 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, task }), 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 that points back at the original and is never touched by pack updates:
// 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 —
GET /api/solution-packs/availablereturns every seed pack with itscomponent_countandinstalledflag. - Install —
POST /api/solution-packs/install-by-slug/insurance(or POST a full bundle to/api/solution-packs/install). Check 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.