For developers
Solution Packs
Connect product roles and scenarios declaratively without adding product-specific code to Kanyman Core.
Updated: August 11, 2026
01
What the manifest stores (short example)
jsonKanyman docs
{
"schema": "kanyman.solution-pack.v1",
"id": "example.support",
"version": "1.0.0",
"core_contract": "kanyman.external-integrations.v1",
"roles": [{ "key": "support", "title": "Support" }],
"scenarios": [{
"key": "support.diagnostics",
"version": "1.0.0",
"entry_role": "support",
"allowed_capabilities": ["project.get_diagnostics"]
}],
"required_capabilities": [{
"name": "project.get_diagnostics",
"version": "1.0.0",
"kind": "read",
"side_effect": "none"
}]
}- The manifest contains roles, scenarios, policies, knowledge requirements, UI labels, and acceptance fixtures.
- Credentials, private keys, tokens, and direct access to the product database are forbidden in the manifest.
- A capability is identified by a stable name and exact version; the current contract accepts read and draft.
- DISP and VerifyBox use the same schema contract as any third-party product.
02
Installation and compatibility
- 1Create and activate an external integration.
- 2Add and test the capabilities required by the selected pack.
- 3Install the pack on the integration. Kanyman stores an immutable manifest snapshot and digest.
- 4If a capability is missing, inactive, or has a different policy/version, the installation receives blocked status.
- 5After changing capabilities, run the check again and activate the pack.
- 6A pack can be disabled without deleting history; rollback moves the pointer only to a previously installed immutable snapshot.
- 7At runtime, the model selects the exact pack, scenario, and specialist role; the server validates the selection again and exposes only the capabilities of the current scenario step.
- 8A blocked or disabled pack fails closed: its capabilities are not exposed to the agent until a successful recheck and activation.
httpKanyman docs
GET /api/projects/{project_id}/external-integrations/{integration_id}/connectors/{connector_id}/versions/{version}/manifest
Authorization: Bearer <Kanyman access token>
{
"schema": "kanyman.connector-contract.v1",
"digest_scope": "manifest_without_lifecycle_status",
"digest": "<sha256 canonical contract>",
"manifest": {
"schema": "kanyman.connector-manifest.v1",
"id": "example.support-api",
"version": "1.0.0",
"status": "planned",
"capabilities": ["...full input/output schemas..."]
}
}03
Scenario Library and persistent state
jsonKanyman docs
{
"schema": "kanyman.solution-scenario.v1",
"pack_id": "example.support",
"pack_version": "1.0.0",
"scenario_key": "support.diagnostics",
"scenario_version": "1.0.0",
"status": "active",
"entry_step": "identify_issue",
"steps": [{
"key": "identify_issue",
"kind": "question",
"role_keys": ["support"],
"allowed_capabilities": ["project.get_diagnostics"],
"answer_options": [{
"key": "resolved",
"next_step": "completed"
}]
}]
}- A scenario definition is stored separately from the immutable pack manifest and linked by exact pack/scenario versions.
- The draft, review, active, paused, and archived statuses are supported; runtime executes only active definitions.
- In the account, an owner/admin can validate JSON on the server, save an immutable draft, submit it for review, and activate it separately; draft and review do not affect runtime and can be archived without losing history.
- An active tenant-scoped version overrides the code default without a Core release; if none exists, runtime uses the definition shipped with the pack.
- Each run stores an immutable definition snapshot and SHA-256 digest, the current step, role, and control version.
- Only safe step/answer keys and product/tariff signals enter the log; user text, tokens, and PII are not copied there.
- The server calculates the next step and role from the snapshot; the model cannot submit an arbitrary transition direction.
- A transition is recorded in one transaction with the allowed answer. A retry does not create a duplicate transition.
- Disabling, incompatibility, or a pack-version change cancels the active run fail-closed and records a cancelled event.
04
Account API
textKanyman docs
GET /api/projects/{project_id}/solution-packs/catalog
GET /api/projects/{project_id}/solution-packs
POST /api/projects/{project_id}/solution-packs/install
POST /api/projects/{project_id}/solution-packs/{installation_id}/refresh
POST /api/projects/{project_id}/solution-packs/{installation_id}/activate
POST /api/projects/{project_id}/solution-packs/{installation_id}/disable
POST /api/projects/{project_id}/solution-packs/{installation_id}/rollback
GET /api/projects/{project_id}/solution-packs/{installation_id}/scenarios
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/{scenario_key}/preview
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/{scenario_key}/drafts
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/submit
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/activate
POST /api/projects/{project_id}/solution-packs/{installation_id}/scenarios/versions/{version_id}/archive