TurfAITurfAI User Guide
Modules

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 honour forked_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.

FieldStatusDescription
nameavailableDisplay name (e.g. Insurance Pack) — required
slugavailableUnique pack id (e.g. insurance) — required
versionavailablePack version (e.g. 2.0.0) — required
descriptionavailableOne-line summary stored on the registry entry
categoryavailableindustry | horizontal | custom (default industry)
icon / coloravailableUI presentation hints
data_shield_policyavailable (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 / changelogcoming soonVersion-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.

ComponentKey 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

ParameterStatusDescription
AUTO_INSTALL_PACKS (e.g. insurance,financial-services)coming soonAuto-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-pack registry + 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 separate turfai-packs distribution repo with build-bundle.js tooling is coming soon.

Limitations

  • Pack quality depends on its prompts and sample data; domain SME tuning is expected.
  • No update / export / import endpoints yetPOST /update, POST /export, POST /import from 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):

TierCountExamples
Agents14FNOL/claims intake, claims summarizer, policy Q&A, coverage analyst, valuator, compliance reviewer, plus squad specialists
Workflows7insurance-claims-intake, insurance-underwriting, insurance-manual-underwriting-review, insurance-policy-issuance, insurance-policy-renewal-reminder, insurance-complaint-handling, insurance-fraud-indicator-detection
Squads3insurance-claims-settlement-squad, insurance-underwriting-squad, insurance-broker-support-squad
Prompts14Extraction 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: vertex by 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_policy in 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

SymptomLikely causeFix
Invalid bundle: missing manifest / missing slug, name, or versionMalformed bundleEnsure the top level is { manifest, prompts, agents, workflows, squads } and the manifest has slug, name, version.
Pack '<slug>' not found in seed libraryinstall-by-slug for a slug with no fileConfirm dms/src/seeds/packs/<slug>.json exists; or POST the bundle to /solution-packs/install directly.
Install returns errors[] for some componentsA single record failed validation (bad slug, unresolved prompt_title, invalid workflow definition) — others still seededRead the per-component error, fix that record, re-install (idempotent). The whole install does not roll back.
Agent references a prompt that isn't thereprompt_title points at a prompt not in the bundleAdd 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 agentA 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-installYou edited content on a system componentFork 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 haveWorkflow nodes reference an unconfigured integrationConnect the integration (Integrations) before running; prerequisite enforcement at install time is coming soon.
Version mismatch on updateNo update endpoint existsVersion-gated updates with min_compatible_version / changelog diffs are coming soon; for now re-install to overwrite system components.

How to test

  1. List available packsGET /api/solution-packs/available returns every seed pack with its component_count and installed flag.
  2. InstallPOST /api/solution-packs/install-by-slug/insurance (or POST a full bundle to /api/solution-packs/install). Check the response summary shows components created.
  3. Verify components createdGET /api/solution-packs/:id returns the registry entry with populated agents / workflows / squads / prompts; or filter the component lists by pack_slug=insurance. Each should be tagged is_system with pack_version: 2.0.0.
  4. Run it — execute insurance-claims-intake or the Claims Settlement squad against a sample input and confirm the expected output.
  5. Fork a component (coming soon) — once the fork action ships, "Customize" an agent, confirm a forked_from copy is created, then re-install and confirm the fork survives (uninstall preserves forks today).
  6. UninstallDELETE /api/solution-packs/:id/uninstall removes system components in reverse order and leaves any forked_from copies in place.

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)

CapabilityStatus
Phase 1 domains: Insurance, Legal, Healthcare, Financial ServicesInsurance + Financial Services ship today; Legal & Healthcare planned
Phase 2 domains: Real Estate, HR/Recruitment, Manufacturing, EducationHR, Education ship today; rest planned
Phase 3 domains: Sales & Marketing, IT Operations, Procurement, Customer SupportOperations-IT, Customer Support ship today; rest planned
POST /update · POST /export · POST /import endpointsPlanned
UI "Fork / Customize" action (creates forked_from copy)Planned
AUTO_INSTALL_PACKS boot env + GCS distributionPlanned
Separate turfai-packs repo + build-bundle.js / validate-pack.jsPlanned
Partner & community marketplacePlanned

APIs used

MethodPathStatusPurpose
GET/api/solution-packs/availableavailableList seed packs with install status + counts
GET/api/solution-packs/bundle/:slugavailableFull display bundle for one pack
GET/api/solution-packsavailableList installed packs (registry entries)
GET/api/solution-packs/:idavailablePack detail with populated components
POST/api/solution-packs/installavailableInstall from a bundle JSON
POST/api/solution-packs/install-by-slug/:slugavailableInstall a shipped seed pack by slug
DELETE/api/solution-packs/:id/uninstallavailableRemove system components (preserves forks)
POST/api/solution-packs/:slug/updatecoming soonUpdate to latest version
POST/api/solution-packs/export · /importcoming soonBundle / load packs (partner authoring)

See the synced solution-packs reference.

On this page