TurfAI 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…). 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 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. Fields not listed here fall back to 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 }, 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

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 yet — POST /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. 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: 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 packs — call GET /api/solution-packs/available. It returns every seed pack with its component_count and installed flag.
  2. Install — call POST /api/solution-packs/install-by-slug/insurance (or POST a full bundle to /api/solution-packs/install). Check that the response summary shows components created.
  3. Verify components created — GET /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. Uninstall — DELETE /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