Packs
Packs route work by domain and explain what each domain owns.
Packs divide Dreamstate into twelve ownership domains across data, knowledge, action, and control layers. Use a pack to narrow an outcome to the team of capabilities that owns it, then fetch the exact capability contract before you run anything.
Packs are metadata, not authority. Architect, MCP, and the CLI expose the same pack controls, while the live catalog supplies the schema, modes, cost policy, scopes, and effect of a capability. Start with Tool catalog after routing, and use Integrations or Senders and mailboxes when the outcome concerns a connection or outreach safety policy.
Route work through four layers
The data layer contains tables and crm. Tables builds a scored working list from sources, columns, and row enrichment. CRM manages canonical records that are already saved in the workspace. This boundary means that an unsaved people search belongs in a workbook and a durable account, opportunity, or deal belongs in CRM.
The knowledge layer contains knowledge and visibility. Knowledge owns Context, documents, briefs, research notes, positioning, ideal customer profiles, personas, competitor intelligence, revisioned vault content, and governed knowledge changes. Visibility owns the evidence that shows how business content is seen, including attribution, SEO, AI answer-engine citations, share of voice, conversion measurement, meetings, and feedback.
The action layer contains sequence, social, workflow, unibox, and tasks. It covers work that changes a draft, a lifecycle, an assigned task, an automation, or an existing conversation. Publishing a social post and launching an outreach sequence are separate action outcomes.
The control layer contains integrations, senders, and workspace. It controls access and durable workspace policy: third-party provider connections, suppression and sender policy, and membership, credits, billing, notifications, and saved views. A control pack does not become the owner of the social, sequence, CRM, or knowledge result that uses it.
| Pack id | Layer | Owns | Not for |
|---|---|---|---|
tables | Data | Working lists, worksheets, sources, enrichment, columns, scores, and row provenance. | Saved canonical CRM records. |
crm | Data | Saved people, companies, accounts, opportunities, deals, relationships, and pipelines. | Unsaved discovery or provider connections. |
knowledge | Knowledge | Context, documents, briefs, research, positioning, and governed knowledge changes. | Working row sets, CRM records, membership, or billing. |
visibility | Knowledge | Attribution, SEO, AI answer-engine citations, share of voice, and measurement evidence. | Social creation, provider setup, or list building. |
sequence | Action | Outreach cadence, templates, enrollment, follow-ups, launch, pause, and lifecycle state. | Existing-conversation replies, suppressions, or general automation. |
social | Action | Social drafts, schedules, publish actions, accounts, and post performance. | Visibility measurement or provider credentials. |
workflow | Action | Automation graphs, triggers, runs, failure diagnostics, replay, and metrics. | Outreach cadence or worksheet column runs. |
unibox | Action | Existing threads, messages, replies, response state, and follow-up state. | Net-new outreach initiation and enrollment. |
tasks | Action | Assigned work, queues, assignees, due dates, series, completion, and review. | Sequence automation or workflow graphs. |
integrations | Control | Provider connection, OAuth, credentials, health, diagnostics, and synchronization. | CRM truth, calendar events, social publishing, or visibility results. |
senders | Control | Suppression, mailbox health, rotation, sender identities, domains, and sender policy. | Provider OAuth, sequence selection, or conversation replies. |
workspace | Control | Members, settings, credits, billing, webhooks, agency, grants, snapshots, tags, and saved views. | Knowledge or external provider connections. |
Choose by the owned outcome
Ask what durable result is needed, not which familiar product noun appears in the request. A connection behind a record is integrations work, but the record remains CRM work. A suppression is sender-policy work, but the outreach sequence remains sequence work. A reply in an existing thread is Unibox work, while a first outreach attempt is sequence work.
The pack boundaries prevent several common routing errors. Do not use CRM as a disposable prospect list, because tables owns working lists and their sources. Do not use a social pack to measure citations or SEO, because visibility owns measurement. Do not use a workflow to create a cadence, because sequence owns outreach timing and lifecycle. Do not use a sender policy to authorize a provider connection, because integrations owns external provider OAuth and credentials.
A pack can name related capabilities that live under another prefix when the outcome requires them. That does not transfer ownership. For example, a social outcome can surface related auto-engagement controls whose ids begin with sequence.; the scoped search includes the relationship so an agent does not conclude that the feature is absent merely because its identifier uses a neighbouring pack prefix.
In the app, workbooks are under Workbooks, Context is under Knowledge, sequences and workflows are under Automations, Inbox holds existing conversations, Tasks holds assigned work, and connection or sender policy lives in Settings. These locations help a user check the right screen after Architect has routed a goal, but the capability catalog remains the authority for a runnable operation.
I need to stop future outreach to acme.example, then inspect the current sequence for its contacts. Route each outcome to its owning pack and show the exact capability contracts before changing anything.Pack control reference
packs_list is the index and packs_get is the full document. The list deliberately omits the complete capability array so the response foregrounds pack ids instead of burying routing metadata in a large catalog response. Use get after list when the agent needs the complete capabilities and skill briefs for one pack.
packs_route accepts one trimmed, non-empty goal. It returns an owning pack_id when the outcome has one, or a null route when no pack owns it. Route is a recommendation based on the current pack catalog, not an authorization decision and not a substitute for searching the capability catalog.
CLI commands are dreamstate packs list, dreamstate packs get <pack_id>, and dreamstate packs route --goal <text>. Each accepts optional --json-output or --json. The parser accepts no additional packs-specific flag. Its route form requires --goal, while get requires one positional pack id.
MCP uses strict empty input for packs_list, a strict object containing pack_id for packs_get, and a strict object containing goal for packs_route. Unknown fields are not part of these contracts. A missing pack responds with the canonical not_found error and a Pack not found message.
| Control | Arguments | Required | Result |
|---|---|---|---|
packs_list | None | No | Summary of available pack cards without the full capability list. |
packs_get | pack_id: non-empty string | Yes | One pack document, including capability detail and skill briefs. |
packs_route | goal: non-empty string | Yes | Route with an owning pack id, or null when no pack owns the outcome. |
When it goes wrong
If packs_get returns not_found, call packs_list again and choose one id from the active response. Do not repair the error by guessing an old or human-friendly pack name. Pack ids are lowercase identifiers such as tables, sequence, and workspace.
If route returns no owner, describe the desired durable outcome more clearly and then search the catalog without pretending that an unowned request belongs to a neighbouring pack. A route is deliberately allowed to return null. It gives an agent evidence that it should refine the goal instead of executing the first loosely matching operation.
If a scoped tool search misses an expected result, verify the pack boundary and inspect related capabilities on the pack card. A capability prefix and an outcome owner can differ for a documented related capability. If the searched capability is not delivered in the current turn, search or get it again before run; otherwise the runtime returns capability_not_fetched with the required repair.
If the route is correct but execution fails, investigate the exact capability rather than changing packs. A missing provider connection belongs to integrations, a suppression belongs to senders, and an existing thread belongs to Unibox. A schema validation, cost quote, required mode, or required-scope failure belongs to the fetched contract and has to be repaired with the fields and state that contract names.
If a user asks for several outcomes at once, route them independently before combining them in a plan. A workbook can supply the audience for a sequence, a sequence can create work for tasks, and a workflow can coordinate an outcome, but those connections do not remove the ownership boundaries. Check each created object in its own app surface and keep each capability result with the run that returned it.
Use the pack id from the current response, then retain the returned result identifiers for later reads.
The result can also carry a web_url for the corresponding object in the app.