Packs
A pack is a single .pack.json file that shapes Jet for a
specific business. The engine never learns about verticals — packs carry the opinions.
Install marketing-agency and your tenant becomes an agency. Install
law-firm and the same engine runs a firm.
Packs are how Jet stays generic without being useless. One install configures six layers: entity type, institutional context, role profiles, skills, workflows, and automations. Every layer is editable after install.
What a pack bundles
| Layer | What it carries | Tenant table |
|---|---|---|
| Entity type | The business's "thing" — client, matter, patient, engagement, property, account, plus its field schema | workspace_entity_types |
| Institutional context | Voice, SOPs, standards, case studies — seeded only if absent (won't overwrite customization) | context_institutional |
| Role profiles | Pane layout, skill palette, tool types, default context, daily open-routine per role | workspace_profiles |
| Skills | System prompt + required tools + model preference per skill, versioned | skills, skill_versions |
| Workflows | Sequential skill chains with {{input}} and {{prev.output}} templates | workflows, workflow_steps |
| Automations | Cron-scheduled + event-triggered agent runs | automations |
File format
A pack is a JSON document validated against the JetPack type in
@jet/shared. The top-level shape:
{
"spec": "jet-pack/v1",
"slug": "marketing-agency",
"name": "Marketing Agency",
"description": "AI-native ops for marketing agencies.",
"author": "Jet",
"version": "1.0.0",
"entity": {
"slug": "client",
"labelSingular": "Client",
"labelPlural": "Clients",
"icon": "briefcase",
"schema": {
"industry": { "label": "Industry", "type": "text" },
"monthlyAdSpend": { "label": "Monthly ad spend (USD)", "type": "number" }
}
},
"institutional": {
"identity": "## Agency identity\n...",
"voice": "## Voice\n...",
"standards": "## Delivery standards\n...",
"sops": "## SOPs (excerpt)\n...",
"caseStudies": "## Case studies\n..."
},
"profiles": [ /* role profiles */ ],
"skills": [ /* skill definitions */ ],
"workflows":[ /* sequential chains referencing skill slugs */ ],
"automations":[ /* cron + trigger configs */ ],
"recommendedTools": ["slack", "gmail", "google-drive", "notion"]
} Installing a pack
Packs install via POST /packs/install with the pack JSON as the request body.
The caller must be authenticated and have a resolved tenant (admin middleware gates it).
curl -X POST https://api.jet.do/packs/install \
-H "Authorization: Bearer $JET_API_KEY" \
-H "Content-Type: application/json" \
--data @marketing-agency.pack.json The response reports what got created:
{
"data": {
"tenantId": "tn_0f91...",
"packSlug": "marketing-agency",
"created": {
"entityType": true,
"institutional": true,
"profiles": 5,
"skills": 17,
"workflows": 1,
"automations": 2
},
"warnings": []
}
} Idempotency
Re-installing the same pack upgrades it in place. The installer matches by slug, updates
existing rows, and adds a new skill_versions row for each skill so history is
preserved. Institutional context is not overwritten if the tenant has already set it.
This means you can safely:
- Publish a
marketing-agency@1.1.0and have existing tenants re-install to upgrade - Fork a pack, edit it, and re-install without duplicating rows
- Iterate locally during pack authoring — every install merges cleanly
Reference pack
marketing-agency.pack.json is shipped in the Jet repo as the canonical
reference. It's distilled from the 8 Figure Agency Blueprint and exercises every subsystem:
- Entity:
clientwith industry, monthly ad spend, target ROAS, retainer - Profiles: Account Manager, Media Buyer, SEO Lead, Sales, Operations — pre-configured pane layouts + skill palettes
- Skills (17): Client Report Generator, Creative Fatigue Detector, Full Campaign Audit, Call Summary, Weekly Pulse Email, Content Calendar Builder, Ad Copy Variations, Lead Qualification Scorer, Proposal Generator, Cold Outreach Sequencer, SEO Content Brief, Competitor Intel, Budget Pacing Monitor, QBR Prep, Scope Creep Detector, Team Capacity Planner, Agency Margin Analyzer
- Workflow: Monthly Client Report (Full Campaign Audit → Client Report Generator)
- Automations: Morning Performance Pulse (7:30am weekdays), Weekly Pulse Email Queue (Friday 4pm)
- Recommended tools: Slack, Gmail, Google Drive, Notion
Authoring your own pack
- Copy
packs/marketing-agency.pack.jsonas your starting point - Change
slug,name,entity, andinstitutionalto match your business - Rewrite the
skillsarray to match your SOPs — each skill is a system prompt + required tools - Update
profilesto match your team's roles and which skills belong in each role's palette - Define any
workflowsandautomationsthe business runs repeatedly POST /packs/install— iterate, re-install, refine
Packs are just JSON. You can author one in any editor, commit it to source control, and
deploy it as part of your own infrastructure. A public pack marketplace at
marketplace.jet.do is on the roadmap.
Next steps
- API reference — the
/packs/installendpoint - Desktop app — how installed packs show up in the workspace