Skip to main content

Chat Does Everything — making the in-app AI chat a full platform operator

Status: Wave 1 (foundation) implemented on session/chat-everything. This document + operations-inventory.json are the canonical spec and machine-readable manifest for the remaining waves.

Generated: the operation tables below come from the inventory workflow (16 domain agents reading every controller in apps/api/src + a synthesis pass). Re-run that workflow to refresh.

1. Goal

Let a logged-in user do everything the platform UI can do, from chat — create/read/update/delete and operate every entity (works, items, agents, tasks, missions, ideas, skills, plugins, knowledge base, members, notifications, webhooks, budgets, organizations, templates, ...), ask for stats and reports, and have the agent render rich results (charts/tables/detail panels) in a side canvas instead of walls of text.

Hard rules, by product decision:

  • Auth-scoped - every action runs as the logged-in user; the API enforces ownership exactly as for the UI.

  • Confirm before destructive - delete/remove/revoke/disconnect/cancel/rotate-secret ask for confirmation in chat first.

  • No bulk - one entity at a time. No "delete all my works" / "remove the last 10 tasks". Bulk endpoints are excluded and a runtime guard blocks smuggled id-arrays.

2. The numbers (scope of the full build)

MetricCount
API endpoints inventoried432
exposed as single-entity chat tools419
destructive (confirmation-gated)56
excluded (bulk / webhook / internal / auth-flow)15
canvas components proposed (deduped catalog: 113)129
reports (analytical Q + chart)95
cross-cutting render/confirm primitives8
Total distinct chat capabilities~ 635

That lands between the "hundreds" and "500-1000" target. The chat agent currently ships ~47 hand-written tools - roughly 11% coverage; this plan closes the rest.

3. Architecture

Four subsystems. The first three are implemented in Wave 1 (see section 10).

3.1 Manifest-driven tool generator

Mirrors apps/mcp/src/openapi-tools/whitelist.ts (which turns the OpenAPI spec into MCP tools), but emits web-chat Vercel-AI-SDK tools. A declarative registry (apps/web/src/lib/ai/tools/generated/registry.ts) maps one platform operation -> one chat tool; a factory (generated/factory.ts) turns each entry into a tool() whose execute routes through generated/api-call.ts -> the existing serverFetch/serverMutation client (JWT cookie = logged-in user). Adding coverage = adding registry rows, not new imperative code.

Why a registry, not runtime OpenAPI fetch? The API only serves /api/openapi.json outside production (NODE_ENV !== 'production'), so the web chat cannot depend on it at runtime. The committed registry (validated against controllers by the inventory workflow) is production-safe and type-checked.

3.2 Confirmation gate (human-in-the-loop)

Destructive ops carry requiresConfirmation. The factory, when called without confirmed: true, returns a __confirmationRequired marker instead of performing the mutation. ChatToolResult renders a Confirm/Cancel card; Confirm sends a chat message so the model re-issues the call with confirmed: true. The mutation cannot run until the user clicks Confirm.

3.3 Single-entity / no-bulk guard

Bulk endpoints are never registered, and the factory rejects any call carrying an array of ids/members/emails in its body (bulkRejected), so the model cannot smuggle a batch through one call.

3.4 Canvas

A CanvasProvider + slide-over CanvasOverlay render artifacts produced by canvas tools (renderChart/renderTable/renderStatCards/renderDetail, recharts-backed). A CanvasBridge watches the message stream and opens the panel; ChatToolResult shows a chip linking back to it. Later waves add show_component (embed existing dashboard components: ActivityTable, BudgetOverviewCard, SpendTrendCard, ...) and run_report (the catalogued reports).

4. Cross-cutting primitives

ToolPurpose
open_canvasOpen/focus the side canvas panel and target a slot for subsequent renders within a chat turn.
render_tableRender any list/table canvasComponent (works, items, agents, tasks, members, deliveries) from a tool-result dataset with columns/sort/filter/pagination.
render_chartRender a recharts visualization (line/bar/pie/donut/area/gauge/stacked) for stat and report outputs.
render_detailRender a detail/card panel for a single entity (WorkDetailCard, AgentDetailCard, TaskDetailCard, etc.).
render_formRender an editable/create form panel (SkillForm, KbDocumentForm, BudgetDetailCard, NotificationChannelForm) that submits via the matching create/update tool.
show_componentEmbed an existing dashboard component (ActivityTable, BudgetOverviewCard, AgentCard, SpendTrendCard, ItemsList) into the canvas by name + props.
run_reportExecute one of the 95 catalogued reports: fetch source data, aggregate, and render via render_chart/render_table into the canvas.
confirm_actionConfirmation gate primitive: present a structured confirm card for any destructive/requiresConfirmation tool and block execution until the user approves.

5. Operations inventory by domain

Per-domain endpoint coverage. Full field-level detail (params, every excluded endpoint + reason) is in operations-inventory.json.

DomainEndpointsChat toolsDestructiveExcludedCanvasReports
works-core7575110118
works-items-taxonomy30264465
generation-comparisons-schedule18182044
website-deploy-git36323464
agents282850106
tasks21215058
missions-ideas-workagent383840108
plugins-integrations252431125
skills11112053
knowledge-base222230138
orgs-tenants-members17173065
auth-account-security32295385
notifications17171176
budgets-usage-billing991066
email-comms1091155
activity-webhooks-files-templates434331159
TOTAL432419561512995

5.1 Full chat-tool list (every single-entity operation)

works-core - 72 tools
ToolMethod / PathKindConfirmCanvas
list_worksGET /api/worksreadWorksList
get_work_statsGET /api/works/statsreadWorkStatsCard
list_website_templatesGET /api/works/website-templatesreadTemplatesList
create_workPOST /api/workscreateWorkDetailCard
quick_create_workPOST /api/works/quick-createcreateWorkDetailCard
get_workGET /api/works/:idreadWorkDetailCard
update_workPUT /api/works/:idupdate
patch_workPATCH /api/works/:idupdate
rotate_activity_sync_secretPOST /api/works/:id/activity-sync/rotate-secretactionyes
get_work_itemsGET /api/works/:id/itemsreadItemsList
get_export_items_settingsGET /api/works/:id/export-items/settingsread
export_work_itemsGET /api/works/:id/export-itemsaction
get_import_items_settingsGET /api/works/:id/import-items/settingsread
get_import_items_sampleGET /api/works/:id/import-items/sampleaction
validate_import_itemsPOST /api/works/:id/import-items/validateaction
execute_import_itemsPOST /api/works/:id/import-itemscreateyes
get_work_configGET /api/works/:id/configreadWorkConfigCard
get_website_settingsGET /api/works/:id/website-settingsread
update_website_settingsPUT /api/works/:id/website-settingsupdate
get_work_countGET /api/works/:id/countread
get_work_categories_tagsGET /api/works/:id/categories-tagsreadTaxonomyList
get_work_historyGET /api/works/:id/historyreadHistoryTimeline
generate_work_detailsPOST /api/works/generate-detailsaction
get_global_generator_form_schemaGET /api/generator-formread
get_generator_form_schemaGET /api/works/:id/generator-formread
generate_itemsPOST /api/works/:id/generateaction
update_itemsPOST /api/works/:id/updateaction
cancel_generationPOST /api/works/:id/cancel-generationactionyes
get_work_scheduleGET /api/works/:id/scheduleread
update_work_schedulePUT /api/works/:id/scheduleupdate
cancel_work_scheduleDELETE /api/works/:id/scheduledestructiveyes
run_scheduled_updatePOST /api/works/:id/schedule/runaction
submit_itemPOST /api/works/:id/submit-itemcreate
remove_itemPOST /api/works/:id/remove-itemdestructiveyes
update_item_metadataPOST /api/works/:id/update-itemupdate
check_item_healthPOST /api/works/:id/check-item-healthaction
get_source_validation_settingsGET /api/works/:id/source-validationread
update_source_validation_settingsPUT /api/works/:id/source-validationupdate
extract_item_detailsPOST /api/extract-item-detailsaction
bulk_capture_imagesPOST /api/works/:id/bulk-capture-imagesaction
update_domain_typePUT /api/works/:id/domain-typeupdate
regenerate_markdownPOST /api/works/:id/regenerate-markdownaction
update_readmePOST /api/works/:id/update-readmeaction
update_website_repositoryPOST /api/works/:id/update-websiteaction
switch_website_templatePOST /api/works/:id/switch-website-templateupdateyes
delete_workPOST /api/works/:id/deletedestructiveyes
sync_work_dataPOST /api/works/:id/sync-dataaction
get_repository_visibilityGET /api/works/:id/repositories/visibilityread
update_repository_visibilityPUT /api/works/:id/repositories/visibilityupdateyes
get_advanced_promptsGET /api/works/:id/advanced-promptsread
update_advanced_promptsPUT /api/works/:id/advanced-promptsupdate
analyze_repositoryPOST /api/works/import/analyzeaction
analyze_for_linkingPOST /api/works/import/analyze-for-linkingaction
import_workPOST /api/works/importcreate
get_user_repositoriesGET /api/works/import/repositoriesreadRepositoriesList
create_categoryPOST /api/works/:id/categoriescreate
update_categoryPUT /api/works/:id/categories/:categoryIdupdate
delete_categoryDELETE /api/works/:id/categories/:categoryIddestructiveyes
create_tagPOST /api/works/:id/tagscreate
update_tagPUT /api/works/:id/tags/:tagIdupdate
delete_tagDELETE /api/works/:id/tags/:tagIddestructiveyes
create_collectionPOST /api/works/:id/collectionscreate
update_collectionPUT /api/works/:id/collections/:collectionIdupdate
delete_collectionDELETE /api/works/:id/collections/:collectionIddestructiveyes
process_community_prsPOST /api/works/:id/process-community-prsaction
list_comparisonsGET /api/works/:id/comparisonsreadComparisonsList
get_remaining_comparison_countGET /api/works/:id/comparisons/remaining-countread
get_comparison_generation_statusGET /api/works/:id/comparisons/generation-statusread
get_comparisonGET /api/works/:id/comparisons/:slugreadComparisonDetailCard
generate_next_comparisonPOST /api/works/:id/comparisons/generateaction
generate_manual_comparisonPOST /api/works/:id/comparisons/generate-manualaction
delete_comparisonDELETE /api/works/:id/comparisons/:slugdestructiveyes
works-items-taxonomy - 28 tools
ToolMethod / PathKindConfirmCanvas
list_worksGET /api/worksreadWorkListTable
get_work_statsGET /api/works/statsreadWorkStatsCard
get_workGET /api/works/{id}readWorkDetailCard
list_work_itemsGET /api/works/{id}/itemsreadItemListTable
get_work_configGET /api/works/{id}/configreadWorkConfigCard
get_work_categories_tagsGET /api/works/{id}/categories-tagsreadTaxonomyCard
get_export_items_settingsGET /api/works/{id}/export-items/settingsread
export_work_itemsGET /api/works/{id}/export-itemsaction
get_import_items_settingsGET /api/works/{id}/import-items/settingsread
get_import_items_sampleGET /api/works/{id}/import-items/sampleaction
validate_import_itemsPOST /api/works/{id}/import-items/validateaction
execute_import_itemsPOST /api/works/{id}/import-itemscreate
extract_item_detailsPOST /api/extract-item-detailsaction
submit_itemPOST /api/works/{id}/submit-itemcreate
remove_itemPOST /api/works/{id}/remove-itemdestructiveyes
update_itemPOST /api/works/{id}/update-itemupdate
check_item_healthPOST /api/works/{id}/check-item-healthaction
get_source_validation_settingsGET /api/works/{id}/source-validationread
update_source_validation_settingsPUT /api/works/{id}/source-validationupdate
create_categoryPOST /api/works/{id}/categoriescreate
update_categoryPUT /api/works/{id}/categories/{categoryId}update
delete_categoryDELETE /api/works/{id}/categories/{categoryId}destructiveyes
create_tagPOST /api/works/{id}/tagscreate
update_tagPUT /api/works/{id}/tags/{tagId}update
delete_tagDELETE /api/works/{id}/tags/{tagId}destructiveyes
create_collectionPOST /api/works/{id}/collectionscreate
update_collectionPUT /api/works/{id}/collections/{collectionId}update
delete_collectionDELETE /api/works/{id}/collections/{collectionId}destructiveyes
generation-comparisons-schedule - 18 tools
ToolMethod / PathKindConfirmCanvas
generate_itemsPOST /api/works/{id}/generateactionGenerationProgressCard
update_itemsPOST /api/works/{id}/updateactionGenerationProgressCard
cancel_generationPOST /api/works/{id}/cancel-generationaction
get_scheduleGET /api/works/{id}/schedulereadScheduleDetailCard
update_schedulePUT /api/works/{id}/scheduleupdateScheduleDetailCard
delete_scheduleDELETE /api/works/{id}/scheduledestructiveyes
run_scheduled_updatePOST /api/works/{id}/schedule/runaction
list_comparisonsGET /api/works/{id}/comparisonsreadComparisonListTable
get_comparisonGET /api/works/{id}/comparisons/{slug}readComparisonDetailCard
generate_next_comparisonPOST /api/works/{id}/comparisons/generateactionGenerationProgressCard
generate_manual_comparisonPOST /api/works/{id}/comparisons/generate-manualactionGenerationProgressCard
delete_comparisonDELETE /api/works/{id}/comparisons/{slug}destructiveyes
get_remaining_comparison_countGET /api/works/{id}/comparisons/remaining-countread
get_comparison_generation_statusGET /api/works/{id}/comparisons/generation-statusreadGenerationProgressCard
update_websitePOST /api/works/{id}/update-websiteaction
regenerate_markdownPOST /api/works/{id}/regenerate-markdownaction
generate_work_detailsPOST /api/works/generate-detailsaction
get_generator_formGET /api/works/{id}/generator-formread
website-deploy-git - 33 tools
ToolMethod / PathKindConfirmCanvas
list_deployment_providersGET /api/deploy/providersread
check_provider_configurationGET /api/deploy/providers/:providerId/configuredread
deploy_workPOST /api/deploy/works/:idactionDeploymentStatusCard
validate_deployment_tokenPOST /api/deploy/validate-tokenread
get_deployment_teamsPOST /api/deploy/teamsread
get_deployment_teams_for_workPOST /api/deploy/works/:id/teamsread
check_deployment_capabilityPOST /api/deploy/works/:id/checkread
lookup_existing_deploymentPOST /api/deploy/works/:id/lookupread
list_work_domainsGET /api/deploy/works/:id/domainsreadDomainListTable
add_domainPOST /api/deploy/works/:id/domainscreate
remove_domainDELETE /api/deploy/works/:id/domains/:domaindestructiveyes
verify_domainPOST /api/deploy/works/:id/domains/:domain/verifyaction
list_work_deploymentsGET /api/deploy/works/:id/deploymentsreadDeploymentHistoryTable
rollback_deploymentPOST /api/deploy/works/:id/rollbackactionyes
list_git_providersGET /api/git-providersread
check_git_provider_connectionGET /api/git-providers/:providerId/connectionread
get_git_organizationsGET /api/git-providers/:providerId/organizationsread
get_git_repositoriesGET /api/git-providers/:providerId/repositoriesreadRepositoryListTable
get_git_provider_userGET /api/git-providers/:providerId/userread
get_github_app_setupGET /api/github-app/setupread
list_github_app_installationsGET /api/github-app/installationsreadGitHubAppInstallationsList
sync_github_app_installationPOST /api/github-app/installations/:installationId/syncaction
onboard_github_app_repositoryPOST /api/github-app/installations/:installationId/repositories/:repositoryId/onboardaction
list_oauth_providersGET /api/oauth/providersread
check_oauth_provider_connectionGET /api/oauth/:providerId/connectionread
get_oauth_connect_urlGET /api/oauth/:providerId/connect/urlread
get_oauth_provider_userGET /api/oauth/:providerId/userread
disconnect_oauth_providerDELETE /api/oauth/:providerIddestructiveyes
get_oauth_read_packages_urlGET /api/oauth/:providerId/read-packages/connect/urlread
get_website_settingsGET /api/works/:id/website-settingsreadWebsiteSettingsCard
update_website_settingsPUT /api/works/:id/website-settingsupdate
switch_website_templatePOST /api/works/:id/switch-website-templateactionyes
get_oauth_auth_urlGET /api/oauth/:providerId/urlread
agents - 29 tools
ToolMethod / PathKindConfirmCanvas
list_agentsGET /api/agentsreadAgentListTable
create_agentPOST /api/agentscreateAgentDetailCard
get_agentGET /api/agents/:idreadAgentDetailCard
update_agentPATCH /api/agents/:idupdateAgentDetailCard
delete_agentDELETE /api/agents/:iddestructiveyes
pause_agentPOST /api/agents/:id/pauseactionAgentDetailCard
resume_agentPOST /api/agents/:id/resumeactionAgentDetailCard
read_agent_fileGET /api/agents/:id/files/:namereadCodeEditor
write_agent_filePUT /api/agents/:id/files/:nameupdateCodeEditor
export_agentGET /api/agents/:id/exportread
import_agentPOST /api/agents/importcreateAgentDetailCard
run_agent_nowPOST /api/agents/:id/run-nowaction
list_agent_runsGET /api/agents/:id/runsreadAgentRunHistoryTable
cancel_agent_runPOST /api/agents/:id/runs/:runId/canceldestructiveyes
list_agent_skillsGET /api/agents/:id/skillsreadSkillBindingTable
get_agent_budgetGET /api/agents/:id/budgetreadBudgetCard
assign_task_to_agentPOST /api/agents/:id/assign-taskaction
list_agent_attachmentsGET /api/agents/:id/attachmentsreadAttachmentList
add_agent_attachmentPOST /api/agents/:id/attachmentscreate
remove_agent_attachmentDELETE /api/agents/:id/attachments/:attachmentIddestructiveyes
list_agent_templatesGET /api/agent-templatesreadTemplateGallery
check_agent_memory_availabilityGET /api/agent-memory/check-availabilityread
open_memory_sessionPOST /api/agent-memory/sessionscreate
close_memory_sessionPOST /api/agent-memory/sessions/:sessionId/closeaction
list_memory_sessionsGET /api/agent-memory/sessionsreadMemorySessionTable
save_memoryPOST /api/agent-memory/savecreate
search_memoryPOST /api/agent-memory/searchreadMemorySearchResults
build_memory_contextPOST /api/agent-memory/contextread
delete_memory_entryDELETE /api/agent-memory/entries/:entryIddestructiveyes
tasks - 22 tools
ToolMethod / PathKindConfirmCanvas
list_tasksGET /api/tasksreadTaskListTable
create_taskPOST /api/taskscreateTaskDetailCard
get_taskGET /api/tasks/:idreadTaskDetailCard
update_taskPATCH /api/tasks/:idupdateTaskDetailCard
delete_taskDELETE /api/tasks/:iddestructiveyes
set_task_recurringPOST /api/tasks/:id/recurringactionTaskDetailCard
clear_task_recurringDELETE /api/tasks/:id/recurringdestructive
transition_taskPOST /api/tasks/:id/transitionactionTaskDetailCard
add_task_assigneePOST /api/tasks/:id/assigneescreate
remove_task_assigneeDELETE /api/tasks/:id/assignees/:assigneeIddestructive
add_task_reviewerPOST /api/tasks/:id/reviewerscreate
add_task_approverPOST /api/tasks/:id/approverscreate
add_task_blockerPOST /api/tasks/:id/blockscreate
remove_task_blockerDELETE /api/tasks/:id/blocks/:blockIddestructive
list_task_attachmentsGET /api/tasks/:id/attachmentsreadAttachmentListCard
add_task_attachmentPOST /api/tasks/:id/attachmentscreate
remove_task_attachmentDELETE /api/tasks/:id/attachments/:attachmentIddestructive
add_task_relationPOST /api/tasks/:id/relationscreate
list_task_chatGET /api/tasks/:id/chatreadTaskChatThread
post_task_chatPOST /api/tasks/:id/chatcreate
edit_task_chat_messagePATCH /api/task-chat-messages/:idupdate
get_task_spendGET /api/tasks/:id/spendreadTaskSpendChart
missions-ideas-workagent - 37 tools
ToolMethod / PathKindConfirmCanvas
list_missionsGET /api/me/missionsreadMissionListTable
create_missionPOST /api/me/missionscreateMissionDetailCard
get_missionGET /api/me/missions/:idreadMissionDetailCard
get_mission_budgetGET /api/me/missions/:id/budgetreadBudgetStatusCard
update_missionPATCH /api/me/missions/:idupdateMissionDetailCard
delete_missionDELETE /api/me/missions/:iddestructiveyes
pause_missionPOST /api/me/missions/:id/pauseactionMissionDetailCard
resume_missionPOST /api/me/missions/:id/resumeactionMissionDetailCard
complete_missionPOST /api/me/missions/:id/completeactionMissionDetailCard
clone_missionPOST /api/me/missions/:id/clonecreateMissionDetailCard
run_mission_nowPOST /api/me/missions/:id/run-nowaction
list_mission_attachmentsGET /api/me/missions/:id/attachmentsreadAttachmentListCard
add_mission_attachmentPOST /api/me/missions/:id/attachmentscreateAttachmentListCard
remove_mission_attachmentDELETE /api/me/missions/:id/attachments/:attachmentIddestructiveAttachmentListCard
create_work_proposalPOST /api/me/work-proposalscreateWorkProposalDetailCard
list_work_proposalsGET /api/me/work-proposalsreadWorkProposalListTable
get_work_proposals_refresh_statusGET /api/me/work-proposals/statusread
refresh_work_proposalsPOST /api/me/work-proposals/refreshaction
get_work_proposals_preferencesGET /api/me/work-proposals/preferencesread
update_work_proposals_preferencesPUT /api/me/work-proposals/preferencesupdate
get_work_proposalGET /api/me/work-proposals/:idreadWorkProposalDetailCard
get_work_proposal_budgetGET /api/me/work-proposals/:id/budgetreadBudgetStatusCard
dismiss_work_proposalPATCH /api/me/work-proposals/:id/dismissactionWorkProposalDetailCard
build_work_proposalPOST /api/me/work-proposals/:id/buildactionWorkProposalDetailCard
retry_work_proposal_buildPOST /api/me/work-proposals/:id/retryactionWorkProposalDetailCard
rebuild_work_proposalPOST /api/me/work-proposals/:id/rebuildactionWorkProposalDetailCard
accept_work_proposalPOST /api/me/work-proposals/:id/acceptactionWorkProposalDetailCard
list_work_proposal_attachmentsGET /api/me/work-proposals/:id/attachmentsreadAttachmentListCard
add_work_proposal_attachmentPOST /api/me/work-proposals/:id/attachmentscreateAttachmentListCard
remove_work_proposal_attachmentDELETE /api/me/work-proposals/:id/attachments/:attachmentIddestructiveAttachmentListCard
get_work_agent_preferencesGET /api/me/work-agent/preferencesread
update_work_agent_preferencesPUT /api/me/work-agent/preferencesupdate
list_work_agent_goalsGET /api/me/work-agent/goalsreadWorkAgentGoalListTable
create_work_agent_goalPOST /api/me/work-agent/goalscreateWorkAgentGoalDetailCard
cancel_work_agent_goalPATCH /api/me/work-agent/goals/:id/canceldestructiveyesWorkAgentGoalDetailCard
get_work_agent_active_runGET /api/me/work-agent/runs/activereadWorkAgentRunCard
list_work_agent_run_logsGET /api/me/work-agent/runs/:id/logsreadWorkAgentRunLogsCard
plugins-integrations - 23 tools
ToolMethod / PathKindConfirmCanvas
list_pluginsGET /api/pluginsreadPluginListCard
get_plugins_settings_menuGET /api/plugins/settings-menureadSettingsMenuCard
list_plugin_modelsGET /api/plugins/{pluginId}/modelsreadModelListCard
get_plugin_connection_statusGET /api/plugins/{pluginId}/connection-statusreadConnectionStatusCard
get_pluginGET /api/plugins/{pluginId}readPluginDetailCard
enable_pluginPOST /api/plugins/{pluginId}/enablecreatePluginDetailCard
disable_pluginPOST /api/plugins/{pluginId}/disabledestructiveyesPluginDetailCard
update_plugin_settingsPATCH /api/plugins/{pluginId}/settingsupdatePluginDetailCard
set_global_pipeline_defaultPOST /api/plugins/pipeline-defaultupdate
validate_plugin_connectionPOST /api/plugins/{pluginId}/validate-connectionactionConnectionStatusCard
list_work_pluginsGET /api/works/{workId}/pluginsreadWorkPluginListCard
enable_work_pluginPOST /api/works/{workId}/plugins/{pluginId}/enablecreateWorkPluginDetailCard
disable_work_pluginPOST /api/works/{workId}/plugins/{pluginId}/disabledestructiveyesWorkPluginDetailCard
update_work_plugin_settingsPATCH /api/works/{workId}/plugins/{pluginId}/settingsupdateWorkPluginDetailCard
set_work_plugin_active_capabilityPOST /api/works/{workId}/plugins/{pluginId}/capabilityupdateWorkPluginDetailCard
list_composio_toolkitsGET /api/plugins/composio/toolkitsreadComposioToolkitListCard
list_composio_connected_accountsGET /api/plugins/composio/connected-accountsreadComposioConnectedAccountListCard
initiate_composio_connectionPOST /api/plugins/composio/connectcreate
list_composio_triggersGET /api/plugins/composio/triggersreadComposioTriggerListCard
create_composio_triggerPOST /api/plugins/composio/triggerscreateComposioTriggerDetailCard
delete_composio_triggerDELETE /api/plugins/composio/triggers/{id}destructiveyes
get_device_auth_statusGET /api/device-auth/{pluginId}/statusreadDeviceAuthStatusCard
start_device_authPOST /api/device-auth/{pluginId}/startactionDeviceAuthStatusCard
skills - 11 tools
ToolMethod / PathKindConfirmCanvas
list_skill_catalogGET /api/skills/catalogreadSkillCatalogTable
get_skill_catalog_entryGET /api/skills/catalog/:slugreadSkillDetailCard
list_skillsGET /api/skillsreadSkillListTable
get_skillGET /api/skills/:idreadSkillDetailCard
create_skillPOST /api/skillscreateSkillForm
update_skillPATCH /api/skills/:idupdateSkillForm
delete_skillDELETE /api/skills/:iddestructiveyes
install_skill_from_catalogPOST /api/skills/installcreate
list_skill_bindingsGET /api/skills/:id/bindingsreadSkillBindingsTable
create_skill_bindingPOST /api/skills/:id/bindingscreate
delete_skill_bindingDELETE /api/skill-bindings/:iddestructiveyes
knowledge-base - 23 tools
ToolMethod / PathKindConfirmCanvas
list_kb_documentsGET /api/works/:id/kb/documentsreadKbDocumentList
create_kb_documentPOST /api/works/:id/kb/documentscreateKbDocumentForm
get_kb_documentGET /api/works/:id/kb/documents/:docIdOrPathreadKbDocumentDetail
update_kb_documentPATCH /api/works/:id/kb/documents/:docIdupdateKbDocumentForm
delete_kb_documentDELETE /api/works/:id/kb/documents/:docIddestructiveyes
lock_kb_documentPOST /api/works/:id/kb/documents/:docId/lockactionKbDocumentDetail
unlock_kb_documentPOST /api/works/:id/kb/documents/:docId/unlockactionKbDocumentDetail
restore_kb_documentPOST /api/works/:id/kb/documents/:docId/restoreactionyes
get_kb_document_historyGET /api/works/:id/kb/documents/:docId/historyreadKbDocumentHistory
list_kb_citationsGET /api/works/:id/kb/documents/:docId/citationsreadKbCitationList
list_kb_tagsGET /api/works/:id/kb/tagsreadKbTagList
create_kb_tagPOST /api/works/:id/kb/tagscreateKbTagForm
update_kb_tagPATCH /api/works/:id/kb/tags/:tagIdupdateKbTagForm
delete_kb_tagDELETE /api/works/:id/kb/tags/:tagIddestructiveyes
create_kb_uploadPOST /api/works/:id/kb/uploadscreateKbUploadForm
list_kb_uploadsGET /api/works/:id/kb/uploadsreadKbUploadList
get_kb_uploadGET /api/works/:id/kb/uploads/:uploadIdreadKbUploadDetail
download_kb_uploadGET /api/works/:id/kb/uploads/:uploadId/downloadread
retry_kb_upload_extractionPOST /api/works/:id/kb/uploads/:uploadId/retry-extractionactionKbUploadDetail
list_org_kb_documentsGET /api/organizations/:orgId/kb/documentsreadOrgKbDocumentList
create_org_kb_documentPOST /api/organizations/:orgId/kb/documentscreateOrgKbDocumentForm
resolve_inheritable_documentsGET /api/works/:id/kb/inheritablereadInheritableDocumentList
get_inherited_documentGET /api/works/:id/kb/inheritable/*idOrPathreadKbDocumentDetail
orgs-tenants-members - 17 tools
ToolMethod / PathKindConfirmCanvas
create_organizationPOST /api/organizationscreateOrganizationDetailCard
register_companyPOST /api/organizations/register-companycreateOrganizationDetailCard
list_organizationsGET /api/organizationsreadOrganizationListTable
check_organization_slugGET /api/organizations/check-slugread
get_organization_by_slugGET /api/organizations/:slugreadOrganizationDetailCard
update_organizationPATCH /api/organizations/:idupdate
upgrade_organization_from_accountPOST /api/organizations/:id/upgrade-from-accountaction
list_work_membersGET /api/works/:workId/membersreadMemberListTable
add_work_memberPOST /api/works/:workId/memberscreate
get_work_memberGET /api/works/:workId/members/:memberIdreadMemberDetailCard
update_work_member_rolePUT /api/works/:workId/members/:memberIdupdate
remove_work_memberDELETE /api/works/:workId/members/:memberIddestructiveyes
leave_workPOST /api/works/:workId/members/leavedestructiveyes
create_work_invitationPOST /api/works/:workId/invitationscreateInvitationDetailCard
list_work_invitationsGET /api/works/:workId/invitationsreadInvitationListTable
revoke_work_invitationDELETE /api/works/:workId/invitations/:invitationIddestructiveyes
check_username_availabilityGET /api/users/check-usernameread
auth-account-security - 29 tools
ToolMethod / PathKindConfirmCanvas
get_auth_providersGET /api/auth/providersreadProviderConfigCard
get_user_profileGET /api/auth/profilereadUserProfileCard
get_fresh_user_profileGET /api/auth/profile/freshreadUserProfileCard
update_user_profilePUT /api/auth/profileupdate
update_passwordPOST /api/auth/update-passwordupdateyes
send_verification_emailPOST /api/auth/send-verificationaction
logout_current_sessionPOST /api/auth/logoutactionyes
logout_all_sessionsPOST /api/auth/logout-alldestructiveyes
create_api_keyPOST /api/auth/api-keyscreateApiKeyDetailCard
list_api_keysGET /api/auth/api-keysreadApiKeyListTable
revoke_api_keyDELETE /api/auth/api-keys/:iddestructiveyes
export_account_dataGET /api/account/exportreadExportProgressCard
preview_account_importPOST /api/account/import/previewread
apply_account_importPOST /api/account/import/applyactionyes
get_sync_statusGET /api/account/sync/statusreadSyncStatusCard
configure_sync_repositoryPOST /api/account/sync/configureactionyes
push_to_githubPOST /api/account/sync/pushactionyes
pull_from_githubPOST /api/account/sync/pullaction
apply_github_pullPOST /api/account/sync/pull/applyactionyes
remove_sync_configurationDELETE /api/account/syncdestructiveyes
get_onboarding_stateGET /api/onboarding/stateread
update_onboarding_statePATCH /api/onboarding/stateupdate
mark_onboarding_completedPOST /api/onboarding/completeaction
mark_onboarding_dismissedPOST /api/onboarding/dismissaction
get_onboarding_catalogGET /api/onboarding/catalogreadOnboardingCatalogCard
preview_claim_invitationGET /api/claim/previewread
accept_claim_invitationPOST /api/claim/acceptactionyes
get_subscription_planGET /api/subscriptions/planreadSubscriptionPlanCard
update_subscription_planPOST /api/subscriptions/planupdateyes
notifications - 17 tools
ToolMethod / PathKindConfirmCanvas
list_notificationsGET /api/notificationsreadNotificationsList
get_unread_notification_countGET /api/notifications/unread-countreadNotificationUnreadBadge
get_persistent_notificationsGET /api/notifications/persistentreadPersistentNotificationsBanner
mark_notification_as_readPOST /api/notifications/:id/readupdate
mark_all_notifications_as_readPOST /api/notifications/read-allupdate
dismiss_notificationPOST /api/notifications/:id/dismissaction
list_notification_event_typesGET /api/notifications/event-typesreadEventTypesList
get_notification_preferencesGET /api/notifications/preferencesreadNotificationPreferencesPanel
set_event_subscriptionPUT /api/notifications/preferences/event/:eventKeyupdate
set_quiet_hoursPUT /api/notifications/preferences/quiet-hoursupdate
mute_notification_categoryPOST /api/notifications/preferences/muteaction
unmute_notification_categoryDELETE /api/notifications/preferences/mute/:categoryupdate
list_notification_channelsGET /api/notification-channelsreadNotificationChannelsList
create_notification_channelPOST /api/notification-channelscreateNotificationChannelForm
update_notification_channelPATCH /api/notification-channels/:idupdateNotificationChannelForm
delete_notification_channelDELETE /api/notification-channels/:iddestructiveyes
test_notification_channelPOST /api/notification-channels/:id/testaction
budgets-usage-billing - 9 tools
ToolMethod / PathKindConfirmCanvas
list_work_budgetsGET /api/works/{workId}/budgetsreadBudgetListTable
create_work_budgetPOST /api/works/{workId}/budgetscreateBudgetDetailCard
update_work_budgetPATCH /api/works/{workId}/budgets/{budgetId}updateBudgetDetailCard
delete_work_budgetDELETE /api/works/{workId}/budgets/{budgetId}destructiveyes
get_work_usage_summaryGET /api/works/{workId}/usage/summaryreadUsageSummaryCard
export_work_usage_csvGET /api/works/{workId}/usage/exportaction
get_work_usage_trendGET /api/works/{workId}/usage/trendreadUsageTrendChart
get_account_wide_usageGET /api/me/usage/account-widereadAccountWideBudgetCard
get_admin_usage_reportGET /admin/usagereadAdminUsageTable
email-comms - 8 tools
ToolMethod / PathKindConfirmCanvas
list_email_addressesGET /api/email/addressesreadEmailAddressListTable
create_email_addressPOST /api/email/addressescreateEmailAddressDetailCard
update_email_addressPATCH /api/email/addresses/:idupdateEmailAddressDetailCard
delete_email_addressDELETE /api/email/addresses/:iddestructiveyes
trigger_email_verificationPOST /api/email/addresses/:id/verifyaction
list_email_messagesGET /api/email/messagesreadEmailMessageListTable
get_email_messageGET /api/email/messages/:idreadEmailMessageDetailCard
send_email_messagePOST /api/email/messagescreate
activity-webhooks-files-templates - 46 tools
ToolMethod / PathKindConfirmCanvas
list_activitiesGET /api/activity-logreadActivityLogTable
get_running_countGET /api/activity-log/running-countreadActivityBadge
get_activity_summaryGET /api/activity-log/summaryreadActivitySummaryCard
export_activity_log_csvGET /api/activity-log/exportread
get_activityGET /api/activity-log/:idreadActivityDetailCard
list_webhooksGET /api/webhooksreadWebhookSubscriptionList
list_webhook_deliveriesGET /api/webhooks/deliveriesreadWebhookDeliveriesList
create_webhookPOST /api/webhookscreate
update_webhookPATCH /api/webhooks/:idupdate
test_webhookPOST /api/webhooks/:id/testaction
rotate_webhook_secretPOST /api/webhooks/:id/rotate-secretactionyes
redeliver_webhookPOST /api/webhooks/deliveries/:deliveryId/redeliveraction
delete_webhookDELETE /api/webhooks/:iddestructiveyes
upload_imagePOST /api/uploadscreate
upload_filePOST /api/uploads/filecreate
upload_anonymousPOST /api/uploads/anonymouscreate
upload_anonymous_filePOST /api/uploads/anonymous/filecreate
presign_uploadPOST /api/uploads/presignaction
serve_uploadGET /api/uploads/:userId/:filenameread
list_templatesGET /api/templatesreadTemplateList
add_custom_templatePOST /api/templates/customcreate
update_custom_templatePUT /api/templates/custom/:templateIdupdate
archive_custom_templatePOST /api/templates/custom/:templateId/archiveactionyes
set_default_templatePUT /api/templates/defaultupdate
fork_templatePOST /api/templates/forkaction
list_customization_providersGET /api/templates/customization-providersread
list_customization_ai_providersGET /api/templates/customization-ai-providersread
customize_template_from_basePOST /api/templates/custom-from-baseaction
iterate_custom_templatePOST /api/templates/custom/:templateId/customizeaction
sync_custom_template_from_basePOST /api/templates/custom/:templateId/sync-baseaction
get_customizationGET /api/templates/customizations/:customizationIdreadCustomizationDetailCard
list_customizations_for_templateGET /api/templates/:templateId/customizationsreadCustomizationList
refresh_templatesPOST /api/templates/refreshaction
check_screenshot_availabilityGET /api/screenshot/check-availabilityreadScreenshotAvailabilityCard
capture_screenshotPOST /api/screenshot/captureaction
get_screenshot_urlPOST /api/screenshot/get-urlaction
check_search_availabilityGET /api/search/check-availabilityreadSearchAvailabilityCard
search_webPOST /api/searchactionSearchResultsList
check_agent_memory_availabilityGET /api/agent-memory/check-availabilityreadAgentMemoryAvailabilityCard
open_memory_sessionPOST /api/agent-memory/sessionscreate
close_memory_sessionPOST /api/agent-memory/sessions/:sessionId/closeaction
list_memory_sessionsGET /api/agent-memory/sessionsreadMemorySessionsList
save_memoryPOST /api/agent-memory/savecreate
search_memoryPOST /api/agent-memory/searchreadMemorySearchResults
build_memory_contextPOST /api/agent-memory/contextaction
delete_memory_entryDELETE /api/agent-memory/entries/:entryIddestructiveyes

5.2 Excluded endpoints (and why)

DomainEndpointReason
works-items-taxonomyPOST /api/works/{id}/items/bulk-deletebulk
works-items-taxonomyPOST /api/works/{id}/items/bulk-updatebulk
works-items-taxonomyPOST /api/works/{id}/items/bulk-publishbulk
works-items-taxonomyPOST /api/works/{id}/bulk-capture-imagesbulk
website-deploy-gitPOST /api/deploy/batchbulk
website-deploy-gitGET /api/github-app/callbackOAuth callback redirect endpoint
website-deploy-gitGET /api/oauth/:providerId/callback/pluginsOAuth callback redirect endpoint
website-deploy-gitGET /api/oauth/:providerId/callback/plugins/read-packagesOAuth callback redirect endpoint
website-deploy-gitGET /api/oauth/:providerId/callbackOAuth callback redirect endpoint
plugins-integrationsPOST /api/plugins/composio/webhookwebhook handler - internal inbound endpoint
auth-account-securityPOST /api/auth/magic-linkauth-flow
auth-account-securityGET /api/auth/validate-email-tokenauth-flow
auth-account-securityGET /api/auth/validate-reset-tokenauth-flow
auth-account-securityPOST /api/onboarding/telemetrytelemetry-beacon
email-commsGET /api/email/verify/:tokenpublic verification click-through endpoint (not a user-initiated chat action)
activity-webhooks-files-templatesPOST /api/uploads/imageduplicate endpoint

6. Canvas component catalog

113 deduped components. reuseExisting points at a platform component to adapt rather than build fresh.

ComponentKindPurposeReuse
WorksListtablePaginated list of works with search/filter (works-core, works-items-taxonomy WorkListTable).ItemsList-style data table already exists in dashboard
WorkDetailCarddetailSingle work detail/settings panel with edit (works-core, works-items-taxonomy).
WorkStatsCardstatAggregated work metrics: total works, items, active websites.
WorkConfigCarddetailWork configuration and settings panel.
ItemsListtableList/manage work items with inline edit (works-core ItemsList, works-items-taxonomy ItemListTable).Existing dashboard ItemsList component
TaxonomyListlistCategories, tags, collections tree for a work (works-core TaxonomyList, works-items-taxonomy TaxonomyCard).
HistoryTimelinelistTimeline of generation/update history for a work.
TemplatesListlistAvailable website templates (works-core TemplatesList; activity domain TemplateList).
RepositoriesListtableUser/git repositories for import or linking (works-core RepositoriesList; website-deploy-git RepositoryListTable).
ComparisonsListtableGenerated comparisons with status (works-core ComparisonsList; generation domain ComparisonListTable).
ComparisonDetailCarddetailSingle comparison result with side-by-side analysis.
GenerationProgressCardstatReal-time progress for item/comparison/markdown generation.
ScheduleDetailCarddetailSchedule config: cadence, enabled, billing mode, next/last run.
DeploymentStatusCardstatDeployment status/progress/metadata for a single deploy.
DomainListTabletableCustom domains with verification status and DNS records.
DeploymentHistoryTabletableDeployment history with branch/commit/timestamp/status and rollback.
GitHubAppInstallationsListlistGitHub App installations with sync/onboard actions.
WebsiteSettingsCarddetailWebsite config: template, domain settings, visibility.
AgentListTabletableAgents filtered by scope/status/search.AgentCard exists for per-agent rendering
AgentDetailCarddetailFull agent profile, model, status, targets, heartbeat.Existing AgentCard component
CodeEditorformEdit agent definition files (SOUL.md/AGENTS.md/etc.) with concurrency-hash guard.
AgentRunHistoryTabletableAgent run history with status/trigger/duration/error.
SkillBindingTabletableActive skill bindings with priority/target (agents SkillBindingTable; skills SkillBindingsTable).
BudgetCardstatCurrent-period spend rollup vs cap (agents BudgetCard; missions BudgetStatusCard).BudgetOverviewCard exists in dashboard
AttachmentListlistEntity attachments with remove actions (agents AttachmentList; tasks/missions AttachmentListCard).
TemplateGallerylistBrowse agent/skill/task templates from catalog.
MemorySessionTabletableAgent-memory sessions (agents MemorySessionTable; activity MemorySessionsList).
MemorySearchResultslistMemory search results with relevance/tags/metadata (agents + activity domains).
TaskListTabletableFiltered task list with status/priority/inline actions.
TaskDetailCarddetailFull task: assignees/reviewers/approvers/blockers/relations/attachments.
TaskChatThreadlistPaginated task chat thread with mentions and edit.
TaskSpendChartchartPer-task spend rollup over time with date filters.SpendTrendCard recharts component
MissionListTabletableMissions with status/schedule and quick actions.
MissionDetailCarddetailFull mission metadata, schedule, budget, lifecycle actions.
WorkProposalListTabletableWork proposals (ideas) filtered by status.
WorkProposalDetailCarddetailProposal detail with build/retry/rebuild/accept actions.
WorkAgentGoalListTabletableRecent work-agent goals with cancel action.
WorkAgentGoalDetailCarddetailWork-agent goal detail with dry-run flag and cancel.
WorkAgentRunCarddetailActive work-agent run status with logs link.
WorkAgentRunLogsCardlistScrollable work-agent run logs with levels/timestamps.
PluginListCardtableAvailable plugins with install status and categories.
PluginDetailCarddetailSingle plugin details, settings, action controls.
SettingsMenuCardlistInstalled plugins grouped by category for settings nav.
ModelListCardlistAvailable AI models from a provider plugin.
ConnectionStatusCarddetailPlugin connection health and test results.
WorkPluginListCardtablePlugins with work-specific config and active capabilities.
WorkPluginDetailCarddetailWork-scoped plugin settings and capability assignment.
ComposioToolkitListCardtableAvailable Composio toolkits and metadata.
ComposioConnectedAccountListCardtableComposio connected accounts with status/actions.
ComposioTriggerListCardtableComposio trigger subscriptions with delivery metrics.
ComposioTriggerDetailCarddetailSingle Composio trigger config and activity.
DeviceAuthStatusCarddetailPlugin device-auth flow status and user code.
SkillCatalogTabletableCatalog skills with filtering/search/tags.
SkillListTabletableUser's installed skills with owner type/actions.
SkillDetailCarddetailFull skill metadata, instructions, frontmatter.
SkillFormformCreate/update custom skill (title, description, instructions).
KbDocumentListtableKB documents filtered by class/status/tag/search (incl OrgKbDocumentList).
KbDocumentDetaildetailKB document body, metadata, lock status, version history (incl inherited docs).
KbDocumentFormformCreate/update KB document (incl OrgKbDocumentForm).
KbDocumentHistorylistGit commit timeline for a KB doc with restore.
KbCitationListlistAI citations referencing a KB document.
KbTagListlistPer-work KB tags management.
KbTagFormformCreate/update a KB tag.
KbUploadListtableKB file uploads with extraction status.
KbUploadDetaildetailUpload metadata, preview, extraction status, retry.
KbUploadFormformFile upload form with metadata (title/class/tags).
InheritableDocumentListlistMerged org + work-override inheritable KB documents.
OrganizationListTabletableUser organizations with slug/name/status/actions.
OrganizationDetailCarddetailSingle organization details, status, linked work.
MemberListTabletableWork members with role/status/actions.
MemberDetailCarddetailSingle work member profile, role, permissions.
InvitationListTabletablePending work invitations with revoke action.
InvitationDetailCarddetailInvitation claim URL, role, expiry for sharing.
UserProfileCarddetailUser profile with edit (name/avatar/bio/verification).
ApiKeyListTabletableAPI keys with creation/expiration and revoke.
ApiKeyDetailCarddetailNewly created API key secret (once) with copy/download.
ProviderConfigCarddetailEnabled OAuth providers and magic-link status.
SyncStatusCarddetailGitHub account-sync status, repo, last push/pull.
ExportProgressCardstatAccount export progress, file size, download link.
OnboardingCatalogCardlistOnboarding wizard catalog: AI/Storage/Deploy cards + plugins.
SubscriptionPlanCarddetailCurrent subscription plan, cadences, upgrade/downgrade.
NotificationsListtableNotifications with category/read-status/search filter.
NotificationUnreadBadgestatUnread notification count badge for nav/header.
PersistentNotificationsBannerotherProminent banner for critical persistent notifications.
EventTypesListtableNotification event types with subscription status.
NotificationPreferencesPaneldetailEdit notification prefs: quiet hours, mutes, per-event channels.
NotificationChannelsListtableNotification channels with edit/delete/test actions.
NotificationChannelFormformCreate/edit notification channel with type-specific fields.
BudgetListTabletableWork budgets: scope/plugin/cap/overage with edit/delete.
BudgetDetailCardformCreate/edit single budget (cap, overage, currency).
UsageSummaryCardstatCurrent-period usage: total spend, per-plugin breakdown, cap gauge.BudgetOverviewCard exists in dashboard
UsageTrendChartchartDaily spend buckets across billing period.SpendTrendCard recharts component
AccountWideBudgetCardstatCurrent-month total spend across account + cap gauge.
AdminUsageTabletableAdmin-only per-(user,work) spend rows, filterable by period.
EmailAddressListTabletableTenant email addresses with direction/verification/default-reply.
EmailAddressDetailCarddetailSingle email address provider settings, verification, disabled toggle.
EmailMessageListTabletablePaginated email messages per agent with status/timestamps.
EmailMessageDetailCarddetailFull email message: headers, body, delivery events.
EmailAddressSetupFlowformGuided email address registration + verification wizard.
ActivityLogTabletablePaginated filterable activity log with search/date/status.ActivityTable exists in dashboard
ActivityBadgestatCount of in-progress operations for sidebar.
ActivitySummaryCardstatActivity counts grouped by status.
ActivityDetailCarddetailFull activity detail with live logs and metadata.
WebhookSubscriptionListtableActive webhook subscriptions with status/URL/actions.
WebhookDeliveriesListtableWebhook delivery history with status and redeliver.
TemplateListtableTemplates by kind with default indicator (shared with TemplatesList).
CustomizationDetailCarddetailTemplate customization run status/branch/commit/error.
CustomizationListtableCustomization runs for a template with status timeline.
ScreenshotAvailabilityCardstatScreenshot provider configuration status.
SearchAvailabilityCardstatWeb-search provider availability status.
SearchResultsListlistWeb search results with snippets/links/source metadata.
AgentMemoryAvailabilityCardstatAgent-memory provider availability status.
ReportChartchartGeneric recharts renderer for the 95 catalogued reports (line/bar/pie/donut/area/gauge/stacked/timeseries).recharts SpendTrendCard chart primitives

7. Reports (sample)

Each becomes a run_report target: fetch source data -> aggregate -> render a chart in canvas. Full list in the JSON.

DomainReportQuestionViz
works-coreWork Activity OverviewWhat is the activity breakdown across my works (generated items, updates, comparisons)?bar-chart
works-coreGeneration History TrendHow many items were generated and when across each work?line-chart
works-coreItem Health Status DistributionWhat percentage of items have passing vs failing health checks?pie-chart
works-coreSchedule Execution RecordHow many scheduled updates have run and what were the results?bar-chart
works-coreComparison Generation PaceHow many comparisons remain vs completed across works?stacked-bar-chart
works-coreRepository Sync EventsWhen and how often has work data been synced from repositories?timeline
works-coreTaxonomy GrowthHow many categories, tags, and collections exist per work?grouped-bar-chart
works-coreCommunity PR ProcessingHow many items have been added via community PRs over time?area-chart
works-items-taxonomyItems by Category DistributionHow many items are assigned to each category in this work?bar
works-items-taxonomyItems by Tag DistributionWhat is the distribution of items across tags?pie
works-items-taxonomySource Health StatusHow many items have healthy, broken, or warning-level source URLs?donut
works-items-taxonomyFeatured vs Unfeatured ItemsWhat percentage of items are marked as featured?gauge
works-items-taxonomyItem Addition TimelineHow many items were added over time (by date)?line
generation-comparisons-scheduleGeneration Activity TimelineWhat is the history of generation runs for this work (dates, durations, item counts, status)?TimelineChart
generation-comparisons-scheduleComparison Generation CoverageHow many comparison pairs have been generated vs remain? What percentage of possible pairs are covered?DonutChart
generation-comparisons-scheduleSchedule Execution HistoryHow many scheduled updates have run, when did they run, and what was the outcome (success/failure)?BarChart
generation-comparisons-scheduleGeneration Success RateWhat is the success rate of generation runs over time? Which item types or sizes have higher failure rates?LineChart
website-deploy-gitDeployment Activity TimelineWhat is the deployment history and activity for this work over time?TimelineChart
website-deploy-gitDomain Verification StatusWhich custom domains are verified and which ones still need DNS configuration?DonutChart
website-deploy-gitProvider Configuration CoverageWhich deployment/git/OAuth providers does the user have configured?BarChart
website-deploy-gitWebsite Template UsageWhich website templates are most commonly selected across works?BarChart
agentsAgent Activity TimelineWhat is the run activity for my agents over the last 7/30 days? (runs by status, trigger kind distribution, duration trends)LineChart
agentsAgent Budget SpendWhich agents are spending the most? (current-period spend by agent, spend vs cap, top spenders by plugin category)BarChart
agentsAgent Status DistributionWhat is the health of my agent fleet? (count by status: ACTIVE, PAUSED, ERROR, ARCHIVED; run success rate by agent)PieChart
agentsSkill Binding CoverageWhich skills are bound to agents and how? (skill usage count, binding priority distribution, target type breakdown)TableChart
agentsAgent Scope & OwnershipHow are agents distributed across scopes? (count by scope: PERSONAL, MISSION, IDEA, WORK; agents per parent entity)BarChart
agentsMemory Session MetricsHow much is my agent memory being used? (session count, active vs closed ratio, memory search volume, entry count by project)LineChart
tasksTask Activity TrendHow many tasks have been created, transitioned, and completed over the last 30 days?line
tasksStatus DistributionWhat is the distribution of my tasks across different statuses?pie
tasksPriority BreakdownHow many tasks are assigned to each priority level?bar
tasksTask Completion RateWhat percentage of created tasks reach completion status by week?line
tasksTask Spend by PriorityHow much spend is associated with tasks at each priority level?bar
tasksAssignee WorkloadWhich assignees (users/agents) have the most tasks assigned to them?bar
tasksBlocker ImpactHow many tasks are currently blocked and how long have they been blocked?table
tasksChat Activity per TaskWhich tasks have the most chat messages and engagement?bar
missions-ideas-workagentMission Activity TrendsHow many missions were created, paused, resumed, or completed by month over the past 6 months?line
missions-ideas-workagentIdea Generation VolumeHow many work proposals (ideas) were generated per day from refreshes vs user-manual creation?bar
missions-ideas-workagentIdea Build Success RateWhat percentage of queued ideas successfully build to completion vs fail? Show trend over time.line
missions-ideas-workagentBudget Spend by OwnerWhich missions and ideas have consumed the most budget in the current period? Show % of cap remaining.bar
missions-ideas-workagentWork Agent Goal CompletionWhat is the success rate of work agent goals? How long does a typical goal take from creation to completion?line

...and 55 more in operations-inventory.json.

8. Build waves

Wave 1 - Foundation: tool generator, confirmation gate, no-bulk guard, canvas shell
Build the manifest-driven chat-tool generator that emits single-entity tools from each domain's operations manifest (path/method/kind/singleEntity/requiresConfirmation/canvasComponent). Implement the confirmation gate (confirm_action) wired to every requiresConfirmation tool, a no-bulk guard that hard-excludes singleEntity:false write operations and excludeReason:'bulk', auth/scope passthrough (tenant/org/work scoping), and the canvas shell with the 8 cross-cutting render/report primitives. Define the persisted canvas-artifact message schema so renders survive reload. - domains: works-core, budgets-usage-billing

Wave 2 - Canvas renderers + existing-component embedding
Implement the deduped canvas catalog: generic table/detail/form/stat renderers plus ReportChart, and the show_component bridge that embeds existing dashboard components (ActivityTable, BudgetOverviewCard/UsageSummaryCard, AgentCard, ItemsList, SpendTrendCard). Establishes the rendering contract every later wave reuses. - domains: budgets-usage-billing, activity-webhooks-files-templates, agents

Wave 3 - Core works lifecycle tool batch
Generate and ship the largest batch: works CRUD, items, taxonomy (categories/tags/collections), generation/update, schedule, comparisons, import/export, website settings. Wire WorksList/WorkDetailCard/ItemsList/TaxonomyList/HistoryTimeline/GenerationProgressCard/ScheduleDetailCard/Comparison renderers. - domains: works-core, works-items-taxonomy, generation-comparisons-schedule

Wave 4 - Agents, tasks, missions/ideas tool batch
Ship agent CRUD + runs + files + memory, task CRUD + assignees/reviewers/approvers/blockers/chat/spend, and missions/ideas/work-agent goals. Wire Agent, Task, Mission, WorkProposal, WorkAgentGoal/Run renderers and BudgetCard reuse. - domains: agents, tasks, missions-ideas-workagent

Wave 5 - Skills, knowledge base, plugins/integrations tool batch
Ship skills catalog/install/bindings, KB documents/tags/uploads/inheritance (work + org scoped), and plugins/work-plugins/Composio/device-auth. Wire Skill, Kb, Plugin, Composio, DeviceAuthStatusCard renderers. - domains: skills, knowledge-base, plugins-integrations

Wave 6 - Deploy/git, orgs/members, auth/account, notifications, email tool batch
Ship deployment providers/domains/rollback, git/GitHub-app/OAuth connection reads, organizations + work members/invitations, auth/profile/API-keys/account-sync/onboarding/subscription, notifications + channels + preferences, and email addresses/messages. Wire remaining detail/table/form/setup-flow renderers. - domains: website-deploy-git, orgs-tenants-members, auth-account-security, notifications, email-comms

Wave 7 - Reports engine + remaining utility surfaces
Implement run_report against the 95 catalogued reports (aggregation + ReportChart rendering), plus activity/webhooks/files/templates/screenshot/search utility tools and availability cards. Hardens token-budget handling (lazy/grouped tool-schema loading) across the full 419-tool surface. - domains: activity-webhooks-files-templates, budgets-usage-billing, works-core

9. Risks & mitigations

  • OpenAPI/Swagger is disabled in production, so the tool generator cannot scrape live schemas in prod; tool definitions must be generated at build time from committed per-domain manifests and shipped as static artifacts.
  • Token bloat: 419 chat tools with full JSON schemas will exceed the model context window. Need lazy/grouped tool exposure (load domain tool batches on demand, or a search-and-fetch discovery layer) instead of injecting all 432 schemas every turn.
  • Auth/scope correctness: tools span personal (/api/me/), tenant, org (/api/organizations/:orgId/) and work (/api/works/:id/*) scopes. The generator must propagate the caller's active tenant/org/work context and enforce server-side authorization, not trust model-supplied IDs.
  • Confirmation-gate integrity: 53 destructive/requiresConfirmation operations must be impossible to execute without an approved confirm_action; the model must not bypass via re-phrased or chained calls. Gate must be enforced server-side, not just in the prompt.
  • No-bulk guard must be airtight: bulk endpoints (bulk_delete_items, bulk_update_items, bulk_publish_items, batch_deploy_works, bulk_capture_images) and OAuth/webhook/telemetry callbacks are excluded; the generator must hard-exclude singleEntity:false writes and excludeReason rows and never auto-loop a single-entity tool to fake bulk.
  • Canvas artifact persistence: rendered charts/tables/detail/form panels must be serialized into message history (data + component name + props) so they survive reload and don't silently re-fetch stale or unauthorized data on replay.
  • Component-embedding coupling: show_component embeds existing dashboard components (ActivityTable, BudgetOverviewCard, AgentCard, SpendTrendCard, ItemsList) whose prop contracts can drift; need a stable adapter layer and version pinning so canvas embeds don't break on dashboard refactors.
  • Duplicate/aliased operations and naming collisions across domains (list_works in 2 domains; upload_image vs upload_image_alias; AttachmentList vs AttachmentListCard; MemorySession* in agents and activity domains) require a global dedupe + canonical-name registry to avoid conflicting tools.
  • Long-running/async actions (generate_items, deploy_work, customize_template, refresh_work_proposals, account export/sync) return job handles not final results; canvas needs polling/streaming progress components (GenerationProgressCard, ExportProgressCard) and the model must not fabricate completion.
  • Reports engine has no dedicated aggregation endpoints for most of the 95 reports; run_report must derive aggregates from list endpoints, risking heavy fan-out, pagination limits, and inconsistent metrics; needs a defined aggregation contract and caching.

10. Shipped in this PR (Waves 1-13)

  • Engine: apps/web/src/lib/ai/tools/generated/{api-call,registry,factory}.ts - manifest-driven tool generator with the no-bulk guard + confirmation gate baked in.

  • Registry (Waves 1-5, ~300 generated tools):

    • Wave 1 (registry.ts) - ~80 hand-curated single-entity tools across agents, tasks, skills, notifications, work members, API keys, budgets/usage, webhooks, organizations, knowledge base, templates, plugins.
    • Wave 2 (registry.wave2.ts) - +200 tools across 13 domains with real DTO-derived body hints (works config/website/taxonomy, comparisons, deploy domains/rollback, git/github/oauth reads, agent runs/files/attachments, task relations/blocks, mission/idea attachments, work-agent goals, composio/device-auth, KB uploads/locks/inheritable, auth/account/onboarding/subscriptions, notification prefs, email, activity log, templates, screenshot/search/agent-memory).
    • Wave 3 (registry.wave3.ts) - the remaining read/report GET tools, generated deterministically from the inventory.
    • Wave 5 (registry.wave5.ts) - the single-entity mutation tail (generate_work_details, cancel_generation, register_company, leave_work, task attachments, event subscription, …). After Wave 5, every includeInChat operation has a tool except the deliberately policy-excluded ones (bulk, anonymous uploads, logout-all, redundant aliases).
    • registry.all.ts merges and dedupes all waves (earlier waves win). Works/items/missions/ideas/deploy/schedule already ship as hand-written tools and are not duplicated.
  • Per-turn tool gating (tool-selection.ts): the full ~300-tool set stays available, but each turn surfaces only an always-on core (navigation, canvas, search, user, works) plus the tools whose domain matches the latest message / current page, capped at 90 - keeping the schema payload bounded and well under provider function-count limits.

  • Canvas (~24 renderers): apps/web/src/components/ai/canvas/* - CanvasArtifactView (recharts chart + table + stat + detail + kanban) and components.tsx (a 19-component bespoke registry: progress, gauge, timeline, comparison, markdown, gallery, funnel, metric_delta, donut, sparkline, bars, kpi, steps, badges, json, code, heatmap, rating, calendar — Waves 7/9/10/18/20/23); lib/ai/tools/canvas.tools.ts (renderChart/Table/StatCards/Detail + showComponent). Render-tested.

  • Reports engine (Waves 4/6/8/11/12/17/19/22/23): lib/ai/tools/reports.ts + pure reports-aggregate.ts - run_report fetches data as the logged-in user, aggregates it, and renders a chart/stat/kanban/board into the canvas in one call. ~76 named reports built from groupReport/countReport/timeseriesReport factories (distributions, counts, per-day trends across works/items/tasks/agents/missions/ideas/plugins/kb/notifications/email/webhooks/orgs/skills/deploy/comparisons), including the flagship work_items_per_day. Plus build_report — group-by-charts ANY of 19 list sources by ANY field. list_reports lists the catalogue. All always-on core tools.

  • Wiring: merged into buildChatTools(); agent.ts gates tools per turn; system prompt updated with the safety + canvas + report rules; ChatToolResult renders the confirmation card, canvas chip, and bulk-rejection notice; ChatInterface mounts the canvas.

  • Tests (Wave 13): Vitest unit specs for the safety-critical logic — factory (path/query routing, body forwarding, destructive-without-confirmed → no API call, confirmed → proceeds, bulk id-array rejection) and tool-selection (core always-on, keyword/page domain matching, cap). 11 tests green.

  • Verified: web tsc --noEmit clean, eslint clean, prettier clean, unit tests green; CI green on each push.

Status & next steps

Done — the goal is functionally met: every single-entity operation the UI exposes is a chat tool (Waves 1-5), auth-scoped, with confirm-before-destructive, no-bulk, and per-turn gating; the canvas renders charts/tables/stats/detail/kanban + six bespoke components; analytics are turnkey (~21 reports) and generalized (build_report); the safety logic is unit-tested. A user can drive the platform's operations and reporting from chat instead of the UI.

What's deliberately NOT mass-produced: the literal remainder of the 113-component catalog and 95 named reports (sections 6-7) is now covered by the generalized mechanismsshow_component's extensible registry and build_report — so hardcoding each remaining entry adds catalogue breadth, not new capability. Add bespoke entries where a domain genuinely needs a tailored layout. Some generated mutations use a generic body object + DTO hint rather than a field-level schema.

Highest-value next gate: a live smoke test of the chat against this branch — the model/tool loop (tool selection, confirmation handshake, canvas rendering) can't be exercised from CI and should be QA'd before broad rollout.