{
	"generatedFrom": "chat-everything-inventory workflow (16 domain agents + synthesis)",
	"grandTotal": 432,
	"chatTotal": 419,
	"domains": [
		{
			"domain": "works-core",
			"operations": [
				{
					"toolName": "list_works",
					"method": "GET",
					"path": "/api/works",
					"summary": "List works",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorksList"
				},
				{
					"toolName": "get_work_stats",
					"method": "GET",
					"path": "/api/works/stats",
					"summary": "Get work statistics",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkStatsCard"
				},
				{
					"toolName": "list_website_templates",
					"method": "GET",
					"path": "/api/works/website-templates",
					"summary": "List website templates",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TemplatesList"
				},
				{
					"toolName": "create_work",
					"method": "POST",
					"path": "/api/works",
					"summary": "Create a new work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkDetailCard"
				},
				{
					"toolName": "quick_create_work",
					"method": "POST",
					"path": "/api/works/quick-create",
					"summary": "Quick-create and generate work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkDetailCard"
				},
				{
					"toolName": "get_work",
					"method": "GET",
					"path": "/api/works/:id",
					"summary": "Get work details",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkDetailCard"
				},
				{
					"toolName": "update_work",
					"method": "PUT",
					"path": "/api/works/:id",
					"summary": "Update work settings",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "patch_work",
					"method": "PATCH",
					"path": "/api/works/:id",
					"summary": "Partially update work (alias for PUT)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "rotate_activity_sync_secret",
					"method": "POST",
					"path": "/api/works/:id/activity-sync/rotate-secret",
					"summary": "Rotate activity sync HMAC secret",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_work_items",
					"method": "GET",
					"path": "/api/works/:id/items",
					"summary": "Get work items",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ItemsList"
				},
				{
					"toolName": "get_export_items_settings",
					"method": "GET",
					"path": "/api/works/:id/export-items/settings",
					"summary": "Get export feature flag",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "export_work_items",
					"method": "GET",
					"path": "/api/works/:id/export-items",
					"summary": "Export work items as CSV or Excel",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_import_items_settings",
					"method": "GET",
					"path": "/api/works/:id/import-items/settings",
					"summary": "Get import feature flag and max rows",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_import_items_sample",
					"method": "GET",
					"path": "/api/works/:id/import-items/sample",
					"summary": "Download item import template",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "validate_import_items",
					"method": "POST",
					"path": "/api/works/:id/import-items/validate",
					"summary": "Validate bulk item import file",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "execute_import_items",
					"method": "POST",
					"path": "/api/works/:id/import-items",
					"summary": "Execute validated bulk item import",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_work_config",
					"method": "GET",
					"path": "/api/works/:id/config",
					"summary": "Get work configuration",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkConfigCard"
				},
				{
					"toolName": "get_website_settings",
					"method": "GET",
					"path": "/api/works/:id/website-settings",
					"summary": "Get website settings",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_website_settings",
					"method": "PUT",
					"path": "/api/works/:id/website-settings",
					"summary": "Update website settings",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_work_count",
					"method": "GET",
					"path": "/api/works/:id/count",
					"summary": "Get work item count",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_work_categories_tags",
					"method": "GET",
					"path": "/api/works/:id/categories-tags",
					"summary": "Get categories and tags",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaxonomyList"
				},
				{
					"toolName": "get_work_history",
					"method": "GET",
					"path": "/api/works/:id/history",
					"summary": "Get work generation and update history",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "HistoryTimeline"
				},
				{
					"toolName": "generate_work_details",
					"method": "POST",
					"path": "/api/works/generate-details",
					"summary": "AI-generate work details",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_global_generator_form_schema",
					"method": "GET",
					"path": "/api/generator-form",
					"summary": "Get global generator form schema",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_generator_form_schema",
					"method": "GET",
					"path": "/api/works/:id/generator-form",
					"summary": "Get generator form schema for work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "generate_items",
					"method": "POST",
					"path": "/api/works/:id/generate",
					"summary": "Start AI item generation",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_items",
					"method": "POST",
					"path": "/api/works/:id/update",
					"summary": "Update existing items using AI",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "cancel_generation",
					"method": "POST",
					"path": "/api/works/:id/cancel-generation",
					"summary": "Cancel active generation",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_work_schedule",
					"method": "GET",
					"path": "/api/works/:id/schedule",
					"summary": "Get scheduled update configuration",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_work_schedule",
					"method": "PUT",
					"path": "/api/works/:id/schedule",
					"summary": "Update scheduled update configuration",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "cancel_work_schedule",
					"method": "DELETE",
					"path": "/api/works/:id/schedule",
					"summary": "Cancel scheduled updates",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "run_scheduled_update",
					"method": "POST",
					"path": "/api/works/:id/schedule/run",
					"summary": "Manually trigger scheduled update",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "submit_item",
					"method": "POST",
					"path": "/api/works/:id/submit-item",
					"summary": "Add single item to work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "remove_item",
					"method": "POST",
					"path": "/api/works/:id/remove-item",
					"summary": "Remove item from work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "update_item_metadata",
					"method": "POST",
					"path": "/api/works/:id/update-item",
					"summary": "Update item metadata (featured status, order)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_item_health",
					"method": "POST",
					"path": "/api/works/:id/check-item-health",
					"summary": "Check item source health",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_source_validation_settings",
					"method": "GET",
					"path": "/api/works/:id/source-validation",
					"summary": "Get source validation settings",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_source_validation_settings",
					"method": "PUT",
					"path": "/api/works/:id/source-validation",
					"summary": "Update source validation settings",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "extract_item_details",
					"method": "POST",
					"path": "/api/extract-item-details",
					"summary": "Extract item details from URL",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "bulk_capture_images",
					"method": "POST",
					"path": "/api/works/:id/bulk-capture-images",
					"summary": "Bulk capture item images",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_domain_type",
					"method": "PUT",
					"path": "/api/works/:id/domain-type",
					"summary": "Update domain type classification",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "regenerate_markdown",
					"method": "POST",
					"path": "/api/works/:id/regenerate-markdown",
					"summary": "Regenerate markdown for all items",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_readme",
					"method": "POST",
					"path": "/api/works/:id/update-readme",
					"summary": "Update README file",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_website_repository",
					"method": "POST",
					"path": "/api/works/:id/update-website",
					"summary": "Trigger website rebuild",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "switch_website_template",
					"method": "POST",
					"path": "/api/works/:id/switch-website-template",
					"summary": "Switch website template",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "delete_work",
					"method": "POST",
					"path": "/api/works/:id/delete",
					"summary": "Delete work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "sync_work_data",
					"method": "POST",
					"path": "/api/works/:id/sync-data",
					"summary": "Sync work data from repository",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_repository_visibility",
					"method": "GET",
					"path": "/api/works/:id/repositories/visibility",
					"summary": "Get repository visibility settings",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_repository_visibility",
					"method": "PUT",
					"path": "/api/works/:id/repositories/visibility",
					"summary": "Update repository public/private status",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_advanced_prompts",
					"method": "GET",
					"path": "/api/works/:id/advanced-prompts",
					"summary": "Get advanced prompts",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_advanced_prompts",
					"method": "PUT",
					"path": "/api/works/:id/advanced-prompts",
					"summary": "Update advanced prompts",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "analyze_repository",
					"method": "POST",
					"path": "/api/works/import/analyze",
					"summary": "Analyze repository for import",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "analyze_for_linking",
					"method": "POST",
					"path": "/api/works/import/analyze-for-linking",
					"summary": "Analyze repository for linking",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "import_work",
					"method": "POST",
					"path": "/api/works/import",
					"summary": "Initiate work import",
					"kind": "create",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_user_repositories",
					"method": "GET",
					"path": "/api/works/import/repositories",
					"summary": "List user repositories",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "RepositoriesList"
				},
				{
					"toolName": "create_category",
					"method": "POST",
					"path": "/api/works/:id/categories",
					"summary": "Create category",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_category",
					"method": "PUT",
					"path": "/api/works/:id/categories/:categoryId",
					"summary": "Update category",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_category",
					"method": "DELETE",
					"path": "/api/works/:id/categories/:categoryId",
					"summary": "Delete category",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_tag",
					"method": "POST",
					"path": "/api/works/:id/tags",
					"summary": "Create tag",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_tag",
					"method": "PUT",
					"path": "/api/works/:id/tags/:tagId",
					"summary": "Update tag",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_tag",
					"method": "DELETE",
					"path": "/api/works/:id/tags/:tagId",
					"summary": "Delete tag",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_collection",
					"method": "POST",
					"path": "/api/works/:id/collections",
					"summary": "Create collection",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_collection",
					"method": "PUT",
					"path": "/api/works/:id/collections/:collectionId",
					"summary": "Update collection",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_collection",
					"method": "DELETE",
					"path": "/api/works/:id/collections/:collectionId",
					"summary": "Delete collection",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "process_community_prs",
					"method": "POST",
					"path": "/api/works/:id/process-community-prs",
					"summary": "Process community pull requests",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_comparisons",
					"method": "GET",
					"path": "/api/works/:id/comparisons",
					"summary": "List comparisons",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComparisonsList"
				},
				{
					"toolName": "get_remaining_comparison_count",
					"method": "GET",
					"path": "/api/works/:id/comparisons/remaining-count",
					"summary": "Get remaining comparison count",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_comparison_generation_status",
					"method": "GET",
					"path": "/api/works/:id/comparisons/generation-status",
					"summary": "Get comparison generation status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_comparison",
					"method": "GET",
					"path": "/api/works/:id/comparisons/:slug",
					"summary": "Get single comparison",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComparisonDetailCard"
				},
				{
					"toolName": "generate_next_comparison",
					"method": "POST",
					"path": "/api/works/:id/comparisons/generate",
					"summary": "Generate next comparison",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "generate_manual_comparison",
					"method": "POST",
					"path": "/api/works/:id/comparisons/generate-manual",
					"summary": "Generate manual comparison",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_comparison",
					"method": "DELETE",
					"path": "/api/works/:id/comparisons/:slug",
					"summary": "Delete comparison",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				}
			],
			"counts": {
				"total": 75,
				"chatIncluded": 75,
				"destructive": 11,
				"excluded": 0
			},
			"canvasComponents": [
				{
					"name": "WorksList",
					"purpose": "Display paginated list of works with search/filter",
					"viz": "table",
					"dataSource": "list_works"
				},
				{
					"name": "WorkDetailCard",
					"purpose": "Show single work details with edit capability",
					"viz": "detail-panel",
					"dataSource": "get_work"
				},
				{
					"name": "WorkStatsCard",
					"purpose": "Display work statistics (count, totals, active websites)",
					"viz": "card",
					"dataSource": "get_work_stats"
				},
				{
					"name": "WorkConfigCard",
					"purpose": "Show work configuration and settings",
					"viz": "detail-panel",
					"dataSource": "get_work_config"
				},
				{
					"name": "ItemsList",
					"purpose": "List and manage work items with inline edit",
					"viz": "table",
					"dataSource": "get_work_items"
				},
				{
					"name": "TaxonomyList",
					"purpose": "Display and manage categories, tags, collections",
					"viz": "tree",
					"dataSource": "get_work_categories_tags"
				},
				{
					"name": "HistoryTimeline",
					"purpose": "Timeline view of generation and update history",
					"viz": "timeline",
					"dataSource": "get_work_history"
				},
				{
					"name": "TemplatesList",
					"purpose": "Display available website templates",
					"viz": "grid",
					"dataSource": "list_website_templates"
				},
				{
					"name": "RepositoriesList",
					"purpose": "List user repositories for import linking",
					"viz": "table",
					"dataSource": "get_user_repositories"
				},
				{
					"name": "ComparisonsList",
					"purpose": "List generated comparisons with status",
					"viz": "table",
					"dataSource": "list_comparisons"
				},
				{
					"name": "ComparisonDetailCard",
					"purpose": "Display single comparison result",
					"viz": "detail-panel",
					"dataSource": "get_comparison"
				}
			],
			"reports": [
				{
					"name": "Work Activity Overview",
					"question": "What is the activity breakdown across my works (generated items, updates, comparisons)?",
					"viz": "bar-chart"
				},
				{
					"name": "Generation History Trend",
					"question": "How many items were generated and when across each work?",
					"viz": "line-chart"
				},
				{
					"name": "Item Health Status Distribution",
					"question": "What percentage of items have passing vs failing health checks?",
					"viz": "pie-chart"
				},
				{
					"name": "Schedule Execution Record",
					"question": "How many scheduled updates have run and what were the results?",
					"viz": "bar-chart"
				},
				{
					"name": "Comparison Generation Pace",
					"question": "How many comparisons remain vs completed across works?",
					"viz": "stacked-bar-chart"
				},
				{
					"name": "Repository Sync Events",
					"question": "When and how often has work data been synced from repositories?",
					"viz": "timeline"
				},
				{
					"name": "Taxonomy Growth",
					"question": "How many categories, tags, and collections exist per work?",
					"viz": "grouped-bar-chart"
				},
				{
					"name": "Community PR Processing",
					"question": "How many items have been added via community PRs over time?",
					"viz": "area-chart"
				}
			]
		},
		{
			"domain": "works-items-taxonomy",
			"operations": [
				{
					"toolName": "list_works",
					"method": "GET",
					"path": "/api/works",
					"summary": "List works accessible to the authenticated user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkListTable"
				},
				{
					"toolName": "get_work_stats",
					"method": "GET",
					"path": "/api/works/stats",
					"summary": "Get aggregated stats (total works, total items, active websites) for the user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkStatsCard"
				},
				{
					"toolName": "get_work",
					"method": "GET",
					"path": "/api/works/{id}",
					"summary": "Get a specific work by ID",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkDetailCard"
				},
				{
					"toolName": "list_work_items",
					"method": "GET",
					"path": "/api/works/{id}/items",
					"summary": "Get all items in a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ItemListTable"
				},
				{
					"toolName": "get_work_config",
					"method": "GET",
					"path": "/api/works/{id}/config",
					"summary": "Get work configuration and metadata",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkConfigCard"
				},
				{
					"toolName": "get_work_categories_tags",
					"method": "GET",
					"path": "/api/works/{id}/categories-tags",
					"summary": "Get categories and tags for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaxonomyCard"
				},
				{
					"toolName": "get_export_items_settings",
					"method": "GET",
					"path": "/api/works/{id}/export-items/settings",
					"summary": "Get export-items feature flag and enablement status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "export_work_items",
					"method": "GET",
					"path": "/api/works/{id}/export-items",
					"summary": "Download all items of a work as CSV or XLSX file",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_import_items_settings",
					"method": "GET",
					"path": "/api/works/{id}/import-items/settings",
					"summary": "Get import-items feature flag and per-directory max-rows cap",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_import_items_sample",
					"method": "GET",
					"path": "/api/works/{id}/import-items/sample",
					"summary": "Download an item import template (sample CSV/XLSX)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "validate_import_items",
					"method": "POST",
					"path": "/api/works/{id}/import-items/validate",
					"summary": "Parse, validate an item import file (dry-run, no writes)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "execute_import_items",
					"method": "POST",
					"path": "/api/works/{id}/import-items",
					"summary": "Execute a validated bulk item import from rows",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "extract_item_details",
					"method": "POST",
					"path": "/api/extract-item-details",
					"summary": "Extract item details from a URL using AI",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "submit_item",
					"method": "POST",
					"path": "/api/works/{id}/submit-item",
					"summary": "Add a single item to a work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "remove_item",
					"method": "POST",
					"path": "/api/works/{id}/remove-item",
					"summary": "Remove an item from a work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "update_item",
					"method": "POST",
					"path": "/api/works/{id}/update-item",
					"summary": "Update item metadata (featured status, display order)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_item_health",
					"method": "POST",
					"path": "/api/works/{id}/check-item-health",
					"summary": "Run a source URL health check for a single item",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_source_validation_settings",
					"method": "GET",
					"path": "/api/works/{id}/source-validation",
					"summary": "Get source validation settings and cadence configuration",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_source_validation_settings",
					"method": "PUT",
					"path": "/api/works/{id}/source-validation",
					"summary": "Update source validation settings (cadence, enabled status)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "bulk_delete_items",
					"method": "POST",
					"path": "/api/works/{id}/items/bulk-delete",
					"summary": "Bulk-delete up to 100 items from a work per batch",
					"kind": "destructive",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": true,
					"excludeReason": "bulk"
				},
				{
					"toolName": "bulk_update_items",
					"method": "POST",
					"path": "/api/works/{id}/items/bulk-update",
					"summary": "Bulk-update item metadata (featured/published) for up to 100 items per batch",
					"kind": "update",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "bulk"
				},
				{
					"toolName": "bulk_publish_items",
					"method": "POST",
					"path": "/api/works/{id}/items/bulk-publish",
					"summary": "Bulk-publish or unpublish up to 100 items by setting featured flag",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "bulk"
				},
				{
					"toolName": "create_category",
					"method": "POST",
					"path": "/api/works/{id}/categories",
					"summary": "Create a new category in a work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_category",
					"method": "PUT",
					"path": "/api/works/{id}/categories/{categoryId}",
					"summary": "Update a category by ID",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_category",
					"method": "DELETE",
					"path": "/api/works/{id}/categories/{categoryId}",
					"summary": "Delete a category by ID",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_tag",
					"method": "POST",
					"path": "/api/works/{id}/tags",
					"summary": "Create a new tag in a work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_tag",
					"method": "PUT",
					"path": "/api/works/{id}/tags/{tagId}",
					"summary": "Update a tag by ID",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_tag",
					"method": "DELETE",
					"path": "/api/works/{id}/tags/{tagId}",
					"summary": "Delete a tag by ID",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_collection",
					"method": "POST",
					"path": "/api/works/{id}/collections",
					"summary": "Create a new collection in a work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_collection",
					"method": "PUT",
					"path": "/api/works/{id}/collections/{collectionId}",
					"summary": "Update a collection by ID",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "delete_collection",
					"method": "DELETE",
					"path": "/api/works/{id}/collections/{collectionId}",
					"summary": "Delete a collection by ID",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "bulk_capture_images",
					"method": "POST",
					"path": "/api/works/{id}/bulk-capture-images",
					"summary": "Bulk capture images for multiple items",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "bulk"
				}
			],
			"counts": {
				"total": 30,
				"chatIncluded": 26,
				"destructive": 4,
				"excluded": 4
			},
			"canvasComponents": [
				{
					"name": "WorkListTable",
					"purpose": "Display paginated list of works with search/filter and stats",
					"viz": "table"
				},
				{
					"name": "WorkStatsCard",
					"purpose": "Show aggregated metrics (total works, items, active websites)",
					"viz": "metric"
				},
				{
					"name": "WorkDetailCard",
					"purpose": "Display detailed work information including name, description, config",
					"viz": "detail"
				},
				{
					"name": "ItemListTable",
					"purpose": "Display paginated list of items in a work with sorting and filtering",
					"viz": "table",
					"dataSource": "list_work_items"
				},
				{
					"name": "WorkConfigCard",
					"purpose": "Show work configuration settings and metadata",
					"viz": "detail",
					"dataSource": "get_work_config"
				},
				{
					"name": "TaxonomyCard",
					"purpose": "Display categories, tags, and collections for a work",
					"viz": "list",
					"dataSource": "get_work_categories_tags"
				}
			],
			"reports": [
				{
					"name": "Items by Category Distribution",
					"question": "How many items are assigned to each category in this work?",
					"viz": "bar"
				},
				{
					"name": "Items by Tag Distribution",
					"question": "What is the distribution of items across tags?",
					"viz": "pie"
				},
				{
					"name": "Source Health Status",
					"question": "How many items have healthy, broken, or warning-level source URLs?",
					"viz": "donut"
				},
				{
					"name": "Featured vs Unfeatured Items",
					"question": "What percentage of items are marked as featured?",
					"viz": "gauge"
				},
				{
					"name": "Item Addition Timeline",
					"question": "How many items were added over time (by date)?",
					"viz": "line"
				}
			]
		},
		{
			"domain": "generation-comparisons-schedule",
			"operations": [
				{
					"toolName": "generate_items",
					"method": "POST",
					"path": "/api/works/{id}/generate",
					"summary": "Start AI-powered item generation for a work",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GenerationProgressCard"
				},
				{
					"toolName": "update_items",
					"method": "POST",
					"path": "/api/works/{id}/update",
					"summary": "Update existing items in a work using AI",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GenerationProgressCard"
				},
				{
					"toolName": "cancel_generation",
					"method": "POST",
					"path": "/api/works/{id}/cancel-generation",
					"summary": "Request cancellation of the active generation for a work",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_schedule",
					"method": "GET",
					"path": "/api/works/{id}/schedule",
					"summary": "Get scheduled update configuration for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ScheduleDetailCard"
				},
				{
					"toolName": "update_schedule",
					"method": "PUT",
					"path": "/api/works/{id}/schedule",
					"summary": "Update scheduled update configuration (cadence, enable/disable, billing mode)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ScheduleDetailCard"
				},
				{
					"toolName": "delete_schedule",
					"method": "DELETE",
					"path": "/api/works/{id}/schedule",
					"summary": "Cancel and remove scheduled updates for a work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "run_scheduled_update",
					"method": "POST",
					"path": "/api/works/{id}/schedule/run",
					"summary": "Manually trigger a scheduled update now",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_comparisons",
					"method": "GET",
					"path": "/api/works/{id}/comparisons",
					"summary": "List all generated comparisons for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComparisonListTable"
				},
				{
					"toolName": "get_comparison",
					"method": "GET",
					"path": "/api/works/{id}/comparisons/{slug}",
					"summary": "Get a single comparison by slug",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComparisonDetailCard"
				},
				{
					"toolName": "generate_next_comparison",
					"method": "POST",
					"path": "/api/works/{id}/comparisons/generate",
					"summary": "Auto-pick the next best pair and generate a comparison",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GenerationProgressCard"
				},
				{
					"toolName": "generate_manual_comparison",
					"method": "POST",
					"path": "/api/works/{id}/comparisons/generate-manual",
					"summary": "Generate a comparison between two specific items",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GenerationProgressCard"
				},
				{
					"toolName": "delete_comparison",
					"method": "DELETE",
					"path": "/api/works/{id}/comparisons/{slug}",
					"summary": "Remove a generated comparison",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_remaining_comparison_count",
					"method": "GET",
					"path": "/api/works/{id}/comparisons/remaining-count",
					"summary": "Count how many un-generated comparison pairs remain",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_comparison_generation_status",
					"method": "GET",
					"path": "/api/works/{id}/comparisons/generation-status",
					"summary": "Check the current progress of an in-flight comparison generation",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GenerationProgressCard"
				},
				{
					"toolName": "update_website",
					"method": "POST",
					"path": "/api/works/{id}/update-website",
					"summary": "Trigger a website rebuild and update",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "regenerate_markdown",
					"method": "POST",
					"path": "/api/works/{id}/regenerate-markdown",
					"summary": "Regenerate markdown files for all items in a work",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "generate_work_details",
					"method": "POST",
					"path": "/api/works/generate-details",
					"summary": "AI-generate work name, description, and categories from a prompt",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_generator_form",
					"method": "GET",
					"path": "/api/works/{id}/generator-form",
					"summary": "Get the dynamic form schema for the generator based on the selected pipeline plugin",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				}
			],
			"counts": {
				"total": 18,
				"chatIncluded": 18,
				"destructive": 2,
				"excluded": 0
			},
			"canvasComponents": [
				{
					"name": "GenerationProgressCard",
					"purpose": "Display real-time progress of item generation, comparison generation, or markdown regeneration with status indicators, item counts, and estimated time remaining"
				},
				{
					"name": "ScheduleDetailCard",
					"purpose": "Show and edit schedule configuration including cadence, enabled status, billing mode, next run time, and last run results"
				},
				{
					"name": "ComparisonListTable",
					"purpose": "Table view of all comparisons for a work, sortable by creation date, item pair, with status badges and action buttons (view, delete, generate related)"
				},
				{
					"name": "ComparisonDetailCard",
					"purpose": "Display full comparison result with side-by-side item analysis, similarity metrics, key differences, and delete/regenerate actions"
				}
			],
			"reports": [
				{
					"name": "Generation Activity Timeline",
					"question": "What is the history of generation runs for this work (dates, durations, item counts, status)?",
					"viz": "TimelineChart"
				},
				{
					"name": "Comparison Generation Coverage",
					"question": "How many comparison pairs have been generated vs remain? What percentage of possible pairs are covered?",
					"viz": "DonutChart"
				},
				{
					"name": "Schedule Execution History",
					"question": "How many scheduled updates have run, when did they run, and what was the outcome (success/failure)?",
					"viz": "BarChart"
				},
				{
					"name": "Generation Success Rate",
					"question": "What is the success rate of generation runs over time? Which item types or sizes have higher failure rates?",
					"viz": "LineChart"
				}
			]
		},
		{
			"domain": "website-deploy-git",
			"operations": [
				{
					"toolName": "list_deployment_providers",
					"method": "GET",
					"path": "/api/deploy/providers",
					"summary": "List available deployment providers",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_provider_configuration",
					"method": "GET",
					"path": "/api/deploy/providers/:providerId/configured",
					"summary": "Check if user has configured a deployment provider",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "deploy_work",
					"method": "POST",
					"path": "/api/deploy/works/:id",
					"summary": "Deploy a work to its configured provider",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "DeploymentStatusCard"
				},
				{
					"toolName": "validate_deployment_token",
					"method": "POST",
					"path": "/api/deploy/validate-token",
					"summary": "Validate user's deployment token",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_deployment_teams",
					"method": "POST",
					"path": "/api/deploy/teams",
					"summary": "Get deployment teams from user token",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_deployment_teams_for_work",
					"method": "POST",
					"path": "/api/deploy/works/:id/teams",
					"summary": "Get deployment teams for a specific work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_deployment_capability",
					"method": "POST",
					"path": "/api/deploy/works/:id/check",
					"summary": "Check if deployment is configured for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "lookup_existing_deployment",
					"method": "POST",
					"path": "/api/deploy/works/:id/lookup",
					"summary": "Check if a work has an existing deployment",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "batch_deploy_works",
					"method": "POST",
					"path": "/api/deploy/batch",
					"summary": "Deploy multiple works",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "bulk"
				},
				{
					"toolName": "list_work_domains",
					"method": "GET",
					"path": "/api/deploy/works/:id/domains",
					"summary": "List custom domains for a deployed work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "DomainListTable"
				},
				{
					"toolName": "add_domain",
					"method": "POST",
					"path": "/api/deploy/works/:id/domains",
					"summary": "Add a custom domain to a deployed work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "remove_domain",
					"method": "DELETE",
					"path": "/api/deploy/works/:id/domains/:domain",
					"summary": "Remove a custom domain from a deployed work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "verify_domain",
					"method": "POST",
					"path": "/api/deploy/works/:id/domains/:domain/verify",
					"summary": "Trigger DNS verification for a domain",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_work_deployments",
					"method": "GET",
					"path": "/api/deploy/works/:id/deployments",
					"summary": "List deployment history for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "DeploymentHistoryTable"
				},
				{
					"toolName": "rollback_deployment",
					"method": "POST",
					"path": "/api/deploy/works/:id/rollback",
					"summary": "Redeploy a previous production deployment",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "list_git_providers",
					"method": "GET",
					"path": "/api/git-providers",
					"summary": "List available git providers",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_git_provider_connection",
					"method": "GET",
					"path": "/api/git-providers/:providerId/connection",
					"summary": "Check git provider connection status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_git_organizations",
					"method": "GET",
					"path": "/api/git-providers/:providerId/organizations",
					"summary": "Get organizations from git provider",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_git_repositories",
					"method": "GET",
					"path": "/api/git-providers/:providerId/repositories",
					"summary": "Get repositories from git provider",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "RepositoryListTable"
				},
				{
					"toolName": "get_git_provider_user",
					"method": "GET",
					"path": "/api/git-providers/:providerId/user",
					"summary": "Get authenticated user info from git provider",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_github_app_setup",
					"method": "GET",
					"path": "/api/github-app/setup",
					"summary": "Begin GitHub App installation setup",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "handle_github_app_callback",
					"method": "GET",
					"path": "/api/github-app/callback",
					"summary": "Handle GitHub App OAuth callback",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "OAuth callback redirect endpoint"
				},
				{
					"toolName": "list_github_app_installations",
					"method": "GET",
					"path": "/api/github-app/installations",
					"summary": "List GitHub App installations for user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "GitHubAppInstallationsList"
				},
				{
					"toolName": "sync_github_app_installation",
					"method": "POST",
					"path": "/api/github-app/installations/:installationId/sync",
					"summary": "Sync GitHub App installation",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "onboard_github_app_repository",
					"method": "POST",
					"path": "/api/github-app/installations/:installationId/repositories/:repositoryId/onboard",
					"summary": "Onboard a repository via GitHub App",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_oauth_providers",
					"method": "GET",
					"path": "/api/oauth/providers",
					"summary": "List available OAuth providers",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "check_oauth_provider_connection",
					"method": "GET",
					"path": "/api/oauth/:providerId/connection",
					"summary": "Check OAuth provider connection status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_oauth_connect_url",
					"method": "GET",
					"path": "/api/oauth/:providerId/connect/url",
					"summary": "Get OAuth authorization URL",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "handle_oauth_callback",
					"method": "GET",
					"path": "/api/oauth/:providerId/callback/plugins",
					"summary": "Handle OAuth callback for provider connection",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "OAuth callback redirect endpoint"
				},
				{
					"toolName": "get_oauth_provider_user",
					"method": "GET",
					"path": "/api/oauth/:providerId/user",
					"summary": "Get authenticated user info from OAuth provider",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "disconnect_oauth_provider",
					"method": "DELETE",
					"path": "/api/oauth/:providerId",
					"summary": "Disconnect an OAuth provider",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_oauth_read_packages_url",
					"method": "GET",
					"path": "/api/oauth/:providerId/read-packages/connect/url",
					"summary": "Get OAuth URL for read:packages + write:packages scopes",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "handle_oauth_read_packages_callback",
					"method": "GET",
					"path": "/api/oauth/:providerId/callback/plugins/read-packages",
					"summary": "Handle OAuth callback for read-packages PAT",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "OAuth callback redirect endpoint"
				},
				{
					"toolName": "get_website_settings",
					"method": "GET",
					"path": "/api/works/:id/website-settings",
					"summary": "Get website settings for a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WebsiteSettingsCard"
				},
				{
					"toolName": "update_website_settings",
					"method": "PUT",
					"path": "/api/works/:id/website-settings",
					"summary": "Update website settings for a work",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "switch_website_template",
					"method": "POST",
					"path": "/api/works/:id/switch-website-template",
					"summary": "Switch website template and apply to existing repository",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_oauth_auth_url",
					"method": "GET",
					"path": "/api/oauth/:providerId/url",
					"summary": "Generate OAuth authorization URL for user login",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "handle_oauth_auth_callback",
					"method": "GET",
					"path": "/api/oauth/:providerId/callback",
					"summary": "Exchange OAuth code for authenticated session",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "OAuth callback redirect endpoint"
				}
			],
			"counts": {
				"total": 36,
				"chatIncluded": 32,
				"destructive": 3,
				"excluded": 4
			},
			"canvasComponents": [
				{
					"name": "DeploymentStatusCard",
					"purpose": "Display deployment status, progress, and metadata for a single deployment"
				},
				{
					"name": "DomainListTable",
					"purpose": "Render list of custom domains with verification status, DNS records, and actions"
				},
				{
					"name": "DeploymentHistoryTable",
					"purpose": "Display paginated deployment history with branch, commit, timestamp, status, and rollback controls"
				},
				{
					"name": "RepositoryListTable",
					"purpose": "Display paginated git repositories with owner, visibility, language, and selection controls"
				},
				{
					"name": "GitHubAppInstallationsList",
					"purpose": "List GitHub App installations with status, repositories, and sync/onboard actions"
				},
				{
					"name": "WebsiteSettingsCard",
					"purpose": "Display and edit website configuration (template, domain settings, visibility)"
				}
			],
			"reports": [
				{
					"name": "Deployment Activity Timeline",
					"question": "What is the deployment history and activity for this work over time?",
					"viz": "TimelineChart"
				},
				{
					"name": "Domain Verification Status",
					"question": "Which custom domains are verified and which ones still need DNS configuration?",
					"viz": "DonutChart"
				},
				{
					"name": "Provider Configuration Coverage",
					"question": "Which deployment/git/OAuth providers does the user have configured?",
					"viz": "BarChart"
				},
				{
					"name": "Website Template Usage",
					"question": "Which website templates are most commonly selected across works?",
					"viz": "BarChart"
				}
			]
		},
		{
			"domain": "agents",
			"operations": [
				{
					"toolName": "list_agents",
					"method": "GET",
					"path": "/api/agents",
					"summary": "List my Agents (filter by scope/status/target/search)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentListTable"
				},
				{
					"toolName": "create_agent",
					"method": "POST",
					"path": "/api/agents",
					"summary": "Create a new Agent",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "get_agent",
					"method": "GET",
					"path": "/api/agents/:id",
					"summary": "Get one Agent",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "update_agent",
					"method": "PATCH",
					"path": "/api/agents/:id",
					"summary": "Update Agent fields (partial)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "delete_agent",
					"method": "DELETE",
					"path": "/api/agents/:id",
					"summary": "Archive Agent (soft-delete). Pass ?hard=true to permanently delete + cascade.",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "pause_agent",
					"method": "POST",
					"path": "/api/agents/:id/pause",
					"summary": "Pause an active Agent (ACTIVE \u2192 PAUSED)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "resume_agent",
					"method": "POST",
					"path": "/api/agents/:id/resume",
					"summary": "Resume a paused/errored Agent (\u2192 ACTIVE)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "read_agent_file",
					"method": "GET",
					"path": "/api/agents/:id/files/:name",
					"summary": "Read one Agent definition file (SOUL.md / AGENTS.md / HEARTBEAT.md / TOOLS.md / agent.yml)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "CodeEditor"
				},
				{
					"toolName": "write_agent_file",
					"method": "PUT",
					"path": "/api/agents/:id/files/:name",
					"summary": "Replace one Agent definition file body. Optimistic concurrency: pass `expectedHash` to guard against concurrent edits.",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "CodeEditor"
				},
				{
					"toolName": "export_agent",
					"method": "GET",
					"path": "/api/agents/:id/export",
					"summary": "Export one Agent as a JSON envelope (identity, files, runtime, avatar, skill bindings, budget).",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "import_agent",
					"method": "POST",
					"path": "/api/agents/import",
					"summary": "Import an Agent envelope. Conflict mode: skip | overwrite | rename (default rename \u2014 appends -2, -3, etc.).",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentDetailCard"
				},
				{
					"toolName": "run_agent_now",
					"method": "POST",
					"path": "/api/agents/:id/run-now",
					"summary": "Manually trigger an agent-heartbeat run NOW, bypassing the heartbeatCadence schedule.",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_agent_runs",
					"method": "GET",
					"path": "/api/agents/:id/runs",
					"summary": "Paginated AgentRun history for this Agent.",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentRunHistoryTable"
				},
				{
					"toolName": "cancel_agent_run",
					"method": "POST",
					"path": "/api/agents/:id/runs/:runId/cancel",
					"summary": "Cancel a queued / running AgentRun. No-op for already-terminal runs.",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "list_agent_skills",
					"method": "GET",
					"path": "/api/agents/:id/skills",
					"summary": "Active Skill bindings for this Agent (Skill + binding priority + targetType, lowest priority first).",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillBindingTable"
				},
				{
					"toolName": "get_agent_budget",
					"method": "GET",
					"path": "/api/agents/:id/budget",
					"summary": "Current-period spend rollup for this Agent (from PluginUsageEvent rows attributed via ownerType=agent).",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetCard"
				},
				{
					"toolName": "assign_task_to_agent",
					"method": "POST",
					"path": "/api/agents/:id/assign-task",
					"summary": "Assign a Task to this Agent \u2014 pre-creates an AgentRun for the (taskId, agentId) pair and enqueues `agent-task-execute`.",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_agent_attachments",
					"method": "GET",
					"path": "/api/agents/:id/attachments",
					"summary": "List an Agent's attached uploads",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentList"
				},
				{
					"toolName": "add_agent_attachment",
					"method": "POST",
					"path": "/api/agents/:id/attachments",
					"summary": "Attach an uploaded file to an Agent",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "remove_agent_attachment",
					"method": "DELETE",
					"path": "/api/agents/:id/attachments/:attachmentId",
					"summary": "Detach an upload from an Agent",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "list_agent_templates",
					"method": "GET",
					"path": "/api/agent-templates",
					"summary": "List agent templates from the ever-works/agents catalog",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TemplateGallery"
				},
				{
					"toolName": "check_agent_memory_availability",
					"method": "GET",
					"path": "/api/agent-memory/check-availability",
					"summary": "Check agent-memory availability",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "open_memory_session",
					"method": "POST",
					"path": "/api/agent-memory/sessions",
					"summary": "Open a memory session",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "close_memory_session",
					"method": "POST",
					"path": "/api/agent-memory/sessions/:sessionId/close",
					"summary": "Close an open memory session",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_memory_sessions",
					"method": "GET",
					"path": "/api/agent-memory/sessions",
					"summary": "List recent memory sessions",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemorySessionTable"
				},
				{
					"toolName": "save_memory",
					"method": "POST",
					"path": "/api/agent-memory/save",
					"summary": "Persist a memory observation",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "search_memory",
					"method": "POST",
					"path": "/api/agent-memory/search",
					"summary": "Search persisted memories",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemorySearchResults"
				},
				{
					"toolName": "build_memory_context",
					"method": "POST",
					"path": "/api/agent-memory/context",
					"summary": "Build a context payload for a prompt",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "delete_memory_entry",
					"method": "DELETE",
					"path": "/api/agent-memory/entries/:entryId",
					"summary": "Forget a single memory record",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				}
			],
			"counts": {
				"total": 28,
				"chatIncluded": 28,
				"destructive": 5,
				"excluded": 0
			},
			"canvasComponents": [
				{
					"name": "AgentListTable",
					"purpose": "Display paginated list of agents with filtering by scope, status, search; sortable by name, status, creation date"
				},
				{
					"name": "AgentDetailCard",
					"purpose": "Show full agent profile including name, title, capabilities, AI provider/model, status, permissions, targets, avatar, heartbeat cadence, and idle behavior"
				},
				{
					"name": "CodeEditor",
					"purpose": "Edit agent definition files (SOUL.md, AGENTS.md, HEARTBEAT.md, TOOLS.md, agent.yml) with syntax highlighting and optimistic concurrency hash validation"
				},
				{
					"name": "AgentRunHistoryTable",
					"purpose": "Display paginated run history with status, trigger kind, duration, summary, error message, task association"
				},
				{
					"name": "SkillBindingTable",
					"purpose": "List active skill bindings for an agent with priority ordering, target type, skill metadata (id, slug, title, version)"
				},
				{
					"name": "BudgetCard",
					"purpose": "Show current-period spend in cents, cap (if set), period window (30-day rolling), and currency"
				},
				{
					"name": "AttachmentList",
					"purpose": "Display agent attachments (uploaded files/specs) with remove actions"
				},
				{
					"name": "TemplateGallery",
					"purpose": "Browse available agent templates from the catalog filterable by entity type (agent, skill, task)"
				},
				{
					"name": "MemorySessionTable",
					"purpose": "List active and closed memory sessions with metadata, project association, session timestamps"
				},
				{
					"name": "MemorySearchResults",
					"purpose": "Display memory search results with relevance scoring, tags, metadata, associated session/project context"
				}
			],
			"reports": [
				{
					"name": "Agent Activity Timeline",
					"question": "What is the run activity for my agents over the last 7/30 days? (runs by status, trigger kind distribution, duration trends)",
					"viz": "LineChart"
				},
				{
					"name": "Agent Budget Spend",
					"question": "Which agents are spending the most? (current-period spend by agent, spend vs cap, top spenders by plugin category)",
					"viz": "BarChart"
				},
				{
					"name": "Agent Status Distribution",
					"question": "What is the health of my agent fleet? (count by status: ACTIVE, PAUSED, ERROR, ARCHIVED; run success rate by agent)",
					"viz": "PieChart"
				},
				{
					"name": "Skill Binding Coverage",
					"question": "Which skills are bound to agents and how? (skill usage count, binding priority distribution, target type breakdown)",
					"viz": "TableChart"
				},
				{
					"name": "Agent Scope & Ownership",
					"question": "How are agents distributed across scopes? (count by scope: PERSONAL, MISSION, IDEA, WORK; agents per parent entity)",
					"viz": "BarChart"
				},
				{
					"name": "Memory Session Metrics",
					"question": "How much is my agent memory being used? (session count, active vs closed ratio, memory search volume, entry count by project)",
					"viz": "LineChart"
				}
			]
		},
		{
			"domain": "tasks",
			"operations": [
				{
					"toolName": "list_tasks",
					"method": "GET",
					"path": "/api/tasks",
					"summary": "List user's tasks with filters (status, priority, scope, label, search)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskListTable"
				},
				{
					"toolName": "create_task",
					"method": "POST",
					"path": "/api/tasks",
					"summary": "Create a new task with title, description, priority, labels, and scope (mission/idea/work/parent)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskDetailCard"
				},
				{
					"toolName": "get_task",
					"method": "GET",
					"path": "/api/tasks/:id",
					"summary": "Get one task by ID",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskDetailCard"
				},
				{
					"toolName": "update_task",
					"method": "PATCH",
					"path": "/api/tasks/:id",
					"summary": "Update task fields (title, description, priority, labels, parentTaskId, requireAllApprovers)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskDetailCard"
				},
				{
					"toolName": "delete_task",
					"method": "DELETE",
					"path": "/api/tasks/:id",
					"summary": "Delete a task (cascades to related rows)",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "set_task_recurring",
					"method": "POST",
					"path": "/api/tasks/:id/recurring",
					"summary": "Make task recurring or update recurrence rule (RFC 5545 RRULE, timezone, end date, max occurrences)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskDetailCard"
				},
				{
					"toolName": "clear_task_recurring",
					"method": "DELETE",
					"path": "/api/tasks/:id/recurring",
					"summary": "Stop recurrence on a task template (existing spawned instances are kept)",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "transition_task",
					"method": "POST",
					"path": "/api/tasks/:id/transition",
					"summary": "State-machine transition to new status (with optional force flag)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskDetailCard"
				},
				{
					"toolName": "add_task_assignee",
					"method": "POST",
					"path": "/api/tasks/:id/assignees",
					"summary": "Add an assignee (user or agent) to a task",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "remove_task_assignee",
					"method": "DELETE",
					"path": "/api/tasks/:id/assignees/:assigneeId",
					"summary": "Remove an assignee from a task",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "add_task_reviewer",
					"method": "POST",
					"path": "/api/tasks/:id/reviewers",
					"summary": "Add a reviewer (user or agent) to a task",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "add_task_approver",
					"method": "POST",
					"path": "/api/tasks/:id/approvers",
					"summary": "Add an approver (user or agent) to a task",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "add_task_blocker",
					"method": "POST",
					"path": "/api/tasks/:id/blocks",
					"summary": "Add a blocker (task that blocks this task from completion)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "remove_task_blocker",
					"method": "DELETE",
					"path": "/api/tasks/:id/blocks/:blockId",
					"summary": "Remove a blocker relationship",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_task_attachments",
					"method": "GET",
					"path": "/api/tasks/:id/attachments",
					"summary": "List task attachments (FK pointers to work_knowledge_upload rows)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "add_task_attachment",
					"method": "POST",
					"path": "/api/tasks/:id/attachments",
					"summary": "Attach an existing work_knowledge_upload to a task (upload via KB pipeline first)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "remove_task_attachment",
					"method": "DELETE",
					"path": "/api/tasks/:id/attachments/:attachmentId",
					"summary": "Detach an attachment from task (upload row is preserved)",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "add_task_relation",
					"method": "POST",
					"path": "/api/tasks/:id/relations",
					"summary": "Add a related/duplicates/follow-up edge to another task",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_task_chat",
					"method": "GET",
					"path": "/api/tasks/:id/chat",
					"summary": "Paginated chat thread for a task",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskChatThread"
				},
				{
					"toolName": "post_task_chat",
					"method": "POST",
					"path": "/api/tasks/:id/chat",
					"summary": "Post a chat message to task (parses @mentions and [[kb]] tokens, drops unknown ones)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "edit_task_chat_message",
					"method": "PATCH",
					"path": "/api/task-chat-messages/:id",
					"summary": "Edit a chat message within 5-min window (only original author can edit, past window returns 403)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_task_spend",
					"method": "GET",
					"path": "/api/tasks/:id/spend",
					"summary": "Per-task spend rollup in cents (supports since/until date filters and currency)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TaskSpendChart"
				}
			],
			"canvasComponents": [
				{
					"name": "TaskListTable",
					"purpose": "Display filtered list of user's tasks with pagination, status indicators, priorities, and inline actions",
					"viz": "table",
					"dataSource": "list_tasks"
				},
				{
					"name": "TaskDetailCard",
					"purpose": "Show complete task details including title, description, status, priority, assignees, reviewers, approvers, blockers, relations, attachments, and metadata",
					"viz": "detail",
					"dataSource": "get_task"
				},
				{
					"name": "TaskChatThread",
					"purpose": "Render paginated chat conversation for a task with message history, mentions, attachments, and edit capability",
					"viz": "thread",
					"dataSource": "list_task_chat"
				},
				{
					"name": "AttachmentListCard",
					"purpose": "Display task's attached knowledge base uploads with remove actions",
					"viz": "list",
					"dataSource": "list_task_attachments"
				},
				{
					"name": "TaskSpendChart",
					"purpose": "Show per-task spend rollup over time with date range filters and currency options",
					"viz": "chart",
					"dataSource": "get_task_spend"
				}
			],
			"reports": [
				{
					"name": "Task Activity Trend",
					"question": "How many tasks have been created, transitioned, and completed over the last 30 days?",
					"viz": "line"
				},
				{
					"name": "Status Distribution",
					"question": "What is the distribution of my tasks across different statuses?",
					"viz": "pie"
				},
				{
					"name": "Priority Breakdown",
					"question": "How many tasks are assigned to each priority level?",
					"viz": "bar"
				},
				{
					"name": "Task Completion Rate",
					"question": "What percentage of created tasks reach completion status by week?",
					"viz": "line"
				},
				{
					"name": "Task Spend by Priority",
					"question": "How much spend is associated with tasks at each priority level?",
					"viz": "bar"
				},
				{
					"name": "Assignee Workload",
					"question": "Which assignees (users/agents) have the most tasks assigned to them?",
					"viz": "bar"
				},
				{
					"name": "Blocker Impact",
					"question": "How many tasks are currently blocked and how long have they been blocked?",
					"viz": "table"
				},
				{
					"name": "Chat Activity per Task",
					"question": "Which tasks have the most chat messages and engagement?",
					"viz": "bar"
				}
			],
			"counts": {
				"total": 21,
				"chatIncluded": 21,
				"destructive": 5,
				"excluded": 0
			}
		},
		{
			"domain": "missions-ideas-workagent",
			"operations": [
				{
					"toolName": "list_missions",
					"method": "GET",
					"path": "/api/me/missions",
					"summary": "List all missions for the current user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionListTable"
				},
				{
					"toolName": "create_mission",
					"method": "POST",
					"path": "/api/me/missions",
					"summary": "Create a new mission with title, description, type, schedule, and settings",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "get_mission",
					"method": "GET",
					"path": "/api/me/missions/:id",
					"summary": "Retrieve a specific mission by ID",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "get_mission_budget",
					"method": "GET",
					"path": "/api/me/missions/:id/budget",
					"summary": "Get current period spend and cap status for a mission",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetStatusCard"
				},
				{
					"toolName": "update_mission",
					"method": "PATCH",
					"path": "/api/me/missions/:id",
					"summary": "Update mission fields: title, description, type, schedule, autoBuildWorks, caps, guardrails, template",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "delete_mission",
					"method": "DELETE",
					"path": "/api/me/missions/:id",
					"summary": "Delete a mission (allowed from any status)",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "pause_mission",
					"method": "POST",
					"path": "/api/me/missions/:id/pause",
					"summary": "Pause a mission (ACTIVE \u2192 PAUSED)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "resume_mission",
					"method": "POST",
					"path": "/api/me/missions/:id/resume",
					"summary": "Resume a paused mission (PAUSED \u2192 ACTIVE)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "complete_mission",
					"method": "POST",
					"path": "/api/me/missions/:id/complete",
					"summary": "Mark a mission as complete (ACTIVE|PAUSED \u2192 COMPLETED)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "clone_mission",
					"method": "POST",
					"path": "/api/me/missions/:id/clone",
					"summary": "Full-fork clone: metadata + non-dismissed ideas as pending, with sourceMissionId backlink. Works not cloned",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MissionDetailCard"
				},
				{
					"toolName": "run_mission_now",
					"method": "POST",
					"path": "/api/me/missions/:id/run-now",
					"summary": "Manually trigger a mission tick, bypassing cron and enforcing outstanding-ideas cap",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_mission_attachments",
					"method": "GET",
					"path": "/api/me/missions/:id/attachments",
					"summary": "List all attached uploads for a mission",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "add_mission_attachment",
					"method": "POST",
					"path": "/api/me/missions/:id/attachments",
					"summary": "Attach an uploaded file to a mission",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "remove_mission_attachment",
					"method": "DELETE",
					"path": "/api/me/missions/:id/attachments/:attachmentId",
					"summary": "Detach an upload from a mission",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "create_work_proposal",
					"method": "POST",
					"path": "/api/me/work-proposals",
					"summary": "Create a user-typed idea with description and optional title (USER_MANUAL source)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "list_work_proposals",
					"method": "GET",
					"path": "/api/me/work-proposals",
					"summary": "List work proposals filtered by status (default: PENDING) and optional mission ID",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalListTable"
				},
				{
					"toolName": "get_work_proposals_refresh_status",
					"method": "GET",
					"path": "/api/me/work-proposals/status",
					"summary": "Check whether a refresh run is in flight and if caller can start a new one",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "refresh_work_proposals",
					"method": "POST",
					"path": "/api/me/work-proposals/refresh",
					"summary": "Trigger a fresh research and proposal-generation run",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_work_proposals_preferences",
					"method": "GET",
					"path": "/api/me/work-proposals/preferences",
					"summary": "Retrieve user-research preferences and email notification settings",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "update_work_proposals_preferences",
					"method": "PUT",
					"path": "/api/me/work-proposals/preferences",
					"summary": "Update user-research preferences: optOut (canonical) or emailNotifications (inverse)",
					"kind": "update",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_work_proposal",
					"method": "GET",
					"path": "/api/me/work-proposals/:id",
					"summary": "Retrieve a specific work proposal by ID (any status)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "get_work_proposal_budget",
					"method": "GET",
					"path": "/api/me/work-proposals/:id/budget",
					"summary": "Get current period spend and cap status for an idea (proposal)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetStatusCard"
				},
				{
					"toolName": "dismiss_work_proposal",
					"method": "PATCH",
					"path": "/api/me/work-proposals/:id/dismiss",
					"summary": "Dismiss a pending proposal",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "build_work_proposal",
					"method": "POST",
					"path": "/api/me/work-proposals/:id/build",
					"summary": "Queue an idea for build via the Work Agent goal pipeline (PENDING \u2192 QUEUED)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "retry_work_proposal_build",
					"method": "POST",
					"path": "/api/me/work-proposals/:id/retry",
					"summary": "Manually retry a failed idea build (FAILED \u2192 QUEUED with fresh goal)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "rebuild_work_proposal",
					"method": "POST",
					"path": "/api/me/work-proposals/:id/rebuild",
					"summary": "Re-build a done idea: produces a new work, original is preserved (DONE \u2192 QUEUED)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "accept_work_proposal",
					"method": "POST",
					"path": "/api/me/work-proposals/:id/accept",
					"summary": "Mark a proposal as accepted after user creates a work from it",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkProposalDetailCard"
				},
				{
					"toolName": "list_work_proposal_attachments",
					"method": "GET",
					"path": "/api/me/work-proposals/:id/attachments",
					"summary": "List all attached uploads for an idea (work proposal)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "add_work_proposal_attachment",
					"method": "POST",
					"path": "/api/me/work-proposals/:id/attachments",
					"summary": "Attach an uploaded file to an idea (work proposal)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "remove_work_proposal_attachment",
					"method": "DELETE",
					"path": "/api/me/work-proposals/:id/attachments/:attachmentId",
					"summary": "Detach an upload from an idea (work proposal)",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AttachmentListCard"
				},
				{
					"toolName": "get_work_agent_preferences",
					"method": "GET",
					"path": "/api/me/work-agent/preferences",
					"summary": "Retrieve work agent preferences and guardrails",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "update_work_agent_preferences",
					"method": "PUT",
					"path": "/api/me/work-agent/preferences",
					"summary": "Update work agent preferences and guardrails",
					"kind": "update",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_work_agent_goals",
					"method": "GET",
					"path": "/api/me/work-agent/goals",
					"summary": "List recent work agent goals",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkAgentGoalListTable"
				},
				{
					"toolName": "create_work_agent_goal",
					"method": "POST",
					"path": "/api/me/work-agent/goals",
					"summary": "Queue a high-level goal for the work agent",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkAgentGoalDetailCard"
				},
				{
					"toolName": "cancel_work_agent_goal",
					"method": "PATCH",
					"path": "/api/me/work-agent/goals/:id/cancel",
					"summary": "Cancel a pending or active work agent goal",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": "WorkAgentGoalDetailCard"
				},
				{
					"toolName": "get_work_agent_active_run",
					"method": "GET",
					"path": "/api/me/work-agent/runs/active",
					"summary": "Get the current active work agent run",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkAgentRunCard"
				},
				{
					"toolName": "list_work_agent_run_logs",
					"method": "GET",
					"path": "/api/me/work-agent/runs/:id/logs",
					"summary": "List logs for a specific work agent run",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkAgentRunLogsCard"
				}
			],
			"canvasComponents": [
				{
					"name": "MissionListTable",
					"purpose": "Display paginated table of all missions with status, title, schedule, and quick-action buttons",
					"viz": "table",
					"dataSource": "list_missions"
				},
				{
					"name": "MissionDetailCard",
					"purpose": "Show full mission details: metadata, status, schedule config, budget, and action buttons (pause/resume/complete/clone/delete)",
					"viz": "detail",
					"dataSource": "get_mission"
				},
				{
					"name": "WorkProposalListTable",
					"purpose": "Display paginated table of work proposals filtered by status with title, description, generation date, and action buttons",
					"viz": "table",
					"dataSource": "list_work_proposals"
				},
				{
					"name": "WorkProposalDetailCard",
					"purpose": "Show full proposal details: metadata, status, suggested categories/fields, reasoning, and build/retry/rebuild/accept action buttons",
					"viz": "detail",
					"dataSource": "get_work_proposal"
				},
				{
					"name": "BudgetStatusCard",
					"purpose": "Display current period spend, cap, remaining budget, and usage percentage for missions or ideas",
					"viz": "chart",
					"dataSource": "get_mission_budget"
				},
				{
					"name": "AttachmentListCard",
					"purpose": "List attached files with remove buttons; support add new attachment workflow",
					"viz": "list",
					"dataSource": "list_mission_attachments"
				},
				{
					"name": "WorkAgentGoalListTable",
					"purpose": "Display recent work agent goals with instruction, status, creation date, and cancel button if pending/active",
					"viz": "table",
					"dataSource": "list_work_agent_goals"
				},
				{
					"name": "WorkAgentGoalDetailCard",
					"purpose": "Show work agent goal details: instruction, status, dry-run flag, and cancel option",
					"viz": "detail",
					"dataSource": "create_work_agent_goal"
				},
				{
					"name": "WorkAgentRunCard",
					"purpose": "Display current active work agent run status, progress, and link to full logs",
					"viz": "detail",
					"dataSource": "get_work_agent_active_run"
				},
				{
					"name": "WorkAgentRunLogsCard",
					"purpose": "Show scrollable/paginated work agent run logs with timestamps, log levels, and context",
					"viz": "logs",
					"dataSource": "list_work_agent_run_logs"
				}
			],
			"reports": [
				{
					"name": "Mission Activity Trends",
					"question": "How many missions were created, paused, resumed, or completed by month over the past 6 months?",
					"viz": "line"
				},
				{
					"name": "Idea Generation Volume",
					"question": "How many work proposals (ideas) were generated per day from refreshes vs user-manual creation?",
					"viz": "bar"
				},
				{
					"name": "Idea Build Success Rate",
					"question": "What percentage of queued ideas successfully build to completion vs fail? Show trend over time.",
					"viz": "line"
				},
				{
					"name": "Budget Spend by Owner",
					"question": "Which missions and ideas have consumed the most budget in the current period? Show % of cap remaining.",
					"viz": "bar"
				},
				{
					"name": "Work Agent Goal Completion",
					"question": "What is the success rate of work agent goals? How long does a typical goal take from creation to completion?",
					"viz": "line"
				},
				{
					"name": "Attachment Usage",
					"question": "How many missions and ideas have attachments? What are the most common file types uploaded?",
					"viz": "pie"
				},
				{
					"name": "Idea Status Distribution",
					"question": "Current breakdown of work proposals by status: PENDING, QUEUED, DONE, FAILED, DISMISSED",
					"viz": "pie"
				},
				{
					"name": "Mission Pause/Resume Pattern",
					"question": "Do users pause missions? How long do they typically stay paused before resume or completion?",
					"viz": "bar"
				}
			],
			"counts": {
				"total": 38,
				"chatIncluded": 38,
				"destructive": 4,
				"excluded": 0
			}
		},
		{
			"domain": "plugins-integrations",
			"operations": [
				{
					"toolName": "list_plugins",
					"method": "GET",
					"path": "/api/plugins",
					"summary": "List available plugins with user installation status",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "PluginListCard"
				},
				{
					"toolName": "get_plugins_settings_menu",
					"method": "GET",
					"path": "/api/plugins/settings-menu",
					"summary": "Get user-installed plugins grouped by category for settings navigation",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SettingsMenuCard"
				},
				{
					"toolName": "list_plugin_models",
					"method": "GET",
					"path": "/api/plugins/{pluginId}/models",
					"summary": "List available models for an AI provider plugin",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ModelListCard"
				},
				{
					"toolName": "get_plugin_connection_status",
					"method": "GET",
					"path": "/api/plugins/{pluginId}/connection-status",
					"summary": "Probe plugin connection status on demand",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ConnectionStatusCard"
				},
				{
					"toolName": "get_plugin",
					"method": "GET",
					"path": "/api/plugins/{pluginId}",
					"summary": "Get plugin details",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "PluginDetailCard"
				},
				{
					"toolName": "enable_plugin",
					"method": "POST",
					"path": "/api/plugins/{pluginId}/enable",
					"summary": "Enable/install a plugin for the current user",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "PluginDetailCard"
				},
				{
					"toolName": "disable_plugin",
					"method": "POST",
					"path": "/api/plugins/{pluginId}/disable",
					"summary": "Disable a plugin for the current user",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": "PluginDetailCard"
				},
				{
					"toolName": "update_plugin_settings",
					"method": "PATCH",
					"path": "/api/plugins/{pluginId}/settings",
					"summary": "Update user-specific settings for a plugin",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "PluginDetailCard"
				},
				{
					"toolName": "set_global_pipeline_default",
					"method": "POST",
					"path": "/api/plugins/pipeline-default",
					"summary": "Set or clear the global default pipeline for the current user",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "validate_plugin_connection",
					"method": "POST",
					"path": "/api/plugins/{pluginId}/validate-connection",
					"summary": "Verify plugin credentials can connect successfully",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ConnectionStatusCard"
				},
				{
					"toolName": "list_work_plugins",
					"method": "GET",
					"path": "/api/works/{workId}/plugins",
					"summary": "Get all plugins with work-specific configuration",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkPluginListCard"
				},
				{
					"toolName": "enable_work_plugin",
					"method": "POST",
					"path": "/api/works/{workId}/plugins/{pluginId}/enable",
					"summary": "Enable a plugin for a specific work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkPluginDetailCard"
				},
				{
					"toolName": "disable_work_plugin",
					"method": "POST",
					"path": "/api/works/{workId}/plugins/{pluginId}/disable",
					"summary": "Disable a plugin for a specific work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": "WorkPluginDetailCard"
				},
				{
					"toolName": "update_work_plugin_settings",
					"method": "PATCH",
					"path": "/api/works/{workId}/plugins/{pluginId}/settings",
					"summary": "Update work-specific settings for a plugin",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkPluginDetailCard"
				},
				{
					"toolName": "set_work_plugin_active_capability",
					"method": "POST",
					"path": "/api/works/{workId}/plugins/{pluginId}/capability",
					"summary": "Set this plugin as active provider for a capability in a work",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WorkPluginDetailCard"
				},
				{
					"toolName": "list_composio_toolkits",
					"method": "GET",
					"path": "/api/plugins/composio/toolkits",
					"summary": "List Composio toolkits accessible to the user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComposioToolkitListCard"
				},
				{
					"toolName": "list_composio_connected_accounts",
					"method": "GET",
					"path": "/api/plugins/composio/connected-accounts",
					"summary": "List the caller's Composio connected accounts",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComposioConnectedAccountListCard"
				},
				{
					"toolName": "initiate_composio_connection",
					"method": "POST",
					"path": "/api/plugins/composio/connect",
					"summary": "Initiate a Composio OAuth connection",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_composio_triggers",
					"method": "GET",
					"path": "/api/plugins/composio/triggers",
					"summary": "List the caller's Composio trigger subscriptions",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComposioTriggerListCard"
				},
				{
					"toolName": "create_composio_trigger",
					"method": "POST",
					"path": "/api/plugins/composio/triggers",
					"summary": "Create a Composio trigger subscription",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ComposioTriggerDetailCard"
				},
				{
					"toolName": "delete_composio_trigger",
					"method": "DELETE",
					"path": "/api/plugins/composio/triggers/{id}",
					"summary": "Delete a Composio trigger subscription",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "receive_composio_webhook",
					"method": "POST",
					"path": "/api/plugins/composio/webhook",
					"summary": "Composio webhook receiver for trigger deliveries",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "webhook handler - internal inbound endpoint"
				},
				{
					"toolName": "get_device_auth_status",
					"method": "GET",
					"path": "/api/device-auth/{pluginId}/status",
					"summary": "Get plugin device auth status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "DeviceAuthStatusCard"
				},
				{
					"toolName": "start_device_auth",
					"method": "POST",
					"path": "/api/device-auth/{pluginId}/start",
					"summary": "Start plugin device authentication flow",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "DeviceAuthStatusCard"
				}
			],
			"counts": {
				"total": 25,
				"chatIncluded": 24,
				"destructive": 3,
				"excluded": 1
			},
			"canvasComponents": [
				{
					"name": "PluginListCard",
					"purpose": "Display all available plugins with user installation status and categories",
					"viz": "table",
					"dataSource": "list_plugins"
				},
				{
					"name": "PluginDetailCard",
					"purpose": "Display single plugin details with settings, status, and action controls",
					"viz": "detail",
					"dataSource": "get_plugin"
				},
				{
					"name": "SettingsMenuCard",
					"purpose": "Hierarchical navigation of installed plugins grouped by category",
					"viz": "tree",
					"dataSource": "get_plugins_settings_menu"
				},
				{
					"name": "ModelListCard",
					"purpose": "List available AI models from a provider plugin",
					"viz": "list",
					"dataSource": "list_plugin_models"
				},
				{
					"name": "ConnectionStatusCard",
					"purpose": "Display plugin connection health status and test results",
					"viz": "detail",
					"dataSource": "get_plugin_connection_status"
				},
				{
					"name": "WorkPluginListCard",
					"purpose": "Display all plugins with work-specific configurations and active capabilities",
					"viz": "table",
					"dataSource": "list_work_plugins"
				},
				{
					"name": "WorkPluginDetailCard",
					"purpose": "Display work-scoped plugin settings and capability assignments",
					"viz": "detail",
					"dataSource": "list_work_plugins"
				},
				{
					"name": "ComposioToolkitListCard",
					"purpose": "List available Composio toolkits and their metadata",
					"viz": "table",
					"dataSource": "list_composio_toolkits"
				},
				{
					"name": "ComposioConnectedAccountListCard",
					"purpose": "Display Composio connected accounts with status and actions",
					"viz": "table",
					"dataSource": "list_composio_connected_accounts"
				},
				{
					"name": "ComposioTriggerListCard",
					"purpose": "Display user's Composio trigger subscriptions with delivery metrics",
					"viz": "table",
					"dataSource": "list_composio_triggers"
				},
				{
					"name": "ComposioTriggerDetailCard",
					"purpose": "Show individual trigger details with configuration and activity",
					"viz": "detail",
					"dataSource": "create_composio_trigger"
				},
				{
					"name": "DeviceAuthStatusCard",
					"purpose": "Display device auth flow status and user code",
					"viz": "detail",
					"dataSource": "get_device_auth_status"
				}
			],
			"reports": [
				{
					"name": "Plugin Usage Distribution",
					"question": "Which plugins are most enabled across users?",
					"viz": "bar"
				},
				{
					"name": "Plugin Connection Health",
					"question": "What is the overall connection status distribution of enabled plugins?",
					"viz": "pie"
				},
				{
					"name": "Composio Integration Activity",
					"question": "How many trigger deliveries are being received and what is the success rate?",
					"viz": "line"
				},
				{
					"name": "Device Auth Flow Adoption",
					"question": "How many users are actively using device authentication flows?",
					"viz": "bar"
				},
				{
					"name": "Work Plugin Configuration Coverage",
					"question": "What percentage of works have at least one plugin enabled?",
					"viz": "gauge"
				}
			]
		},
		{
			"domain": "skills",
			"operations": [
				{
					"toolName": "list_skill_catalog",
					"method": "GET",
					"path": "/api/skills/catalog",
					"summary": "List available catalog skills from enabled skills-provider plugins with pagination and filtering",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillCatalogTable"
				},
				{
					"toolName": "get_skill_catalog_entry",
					"method": "GET",
					"path": "/api/skills/catalog/:slug",
					"summary": "Get one catalog skill entry by slug",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillDetailCard"
				},
				{
					"toolName": "list_skills",
					"method": "GET",
					"path": "/api/skills",
					"summary": "List user's installed skills with filtering by ownerType, ownerId, and search",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillListTable"
				},
				{
					"toolName": "get_skill",
					"method": "GET",
					"path": "/api/skills/:id",
					"summary": "Get one installed skill by ID",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillDetailCard"
				},
				{
					"toolName": "create_skill",
					"method": "POST",
					"path": "/api/skills",
					"summary": "Create a custom skill with title, description, instructions, and optional metadata",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillForm"
				},
				{
					"toolName": "update_skill",
					"method": "PATCH",
					"path": "/api/skills/:id",
					"summary": "Update skill body, metadata, or frontmatter",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillForm"
				},
				{
					"toolName": "delete_skill",
					"method": "DELETE",
					"path": "/api/skills/:id",
					"summary": "Delete a skill and cascade-delete all associated bindings",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "install_skill_from_catalog",
					"method": "POST",
					"path": "/api/skills/install",
					"summary": "Install a catalog skill at the requested scope (tenant/mission/idea/work/agent)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_skill_bindings",
					"method": "GET",
					"path": "/api/skills/:id/bindings",
					"summary": "List all bindings for a skill",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SkillBindingsTable"
				},
				{
					"toolName": "create_skill_binding",
					"method": "POST",
					"path": "/api/skills/:id/bindings",
					"summary": "Create a binding for a skill to target entity with optional priority and injection settings",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "delete_skill_binding",
					"method": "DELETE",
					"path": "/api/skill-bindings/:id",
					"summary": "Remove one skill binding by ID",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				}
			],
			"canvasComponents": [
				{
					"name": "SkillCatalogTable",
					"purpose": "Display paginated list of available catalog skills with filtering, search, and tags",
					"viz": "table",
					"dataSource": "list_skill_catalog"
				},
				{
					"name": "SkillListTable",
					"purpose": "Display user's installed skills with owner type/ID, title, and action buttons",
					"viz": "table",
					"dataSource": "list_skills"
				},
				{
					"name": "SkillDetailCard",
					"purpose": "Display full skill metadata including title, description, instructions, and frontmatter",
					"viz": "detail",
					"dataSource": "get_skill"
				},
				{
					"name": "SkillBindingsTable",
					"purpose": "Display skill bindings with target entity, type, priority, and injection settings",
					"viz": "table",
					"dataSource": "list_skill_bindings"
				},
				{
					"name": "SkillForm",
					"purpose": "Form editor for creating or updating custom skills with title, description, instructions markdown",
					"viz": "form",
					"dataSource": ""
				}
			],
			"reports": [
				{
					"name": "Skills by Owner Type",
					"question": "How many installed skills are scoped to each owner type (tenant, mission, idea, work, agent)?",
					"viz": "pie"
				},
				{
					"name": "Catalog Coverage",
					"question": "What percentage of catalog skills have been installed vs remain available?",
					"viz": "bar"
				},
				{
					"name": "Bindings Activity",
					"question": "Which skills have the most active bindings across different target types?",
					"viz": "bar"
				}
			],
			"counts": {
				"total": 11,
				"chatIncluded": 11,
				"destructive": 2,
				"excluded": 0
			}
		},
		{
			"domain": "knowledge-base",
			"operations": [
				{
					"toolName": "list_kb_documents",
					"method": "GET",
					"path": "/api/works/:id/kb/documents",
					"summary": "List KB documents for a Work",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentList"
				},
				{
					"toolName": "create_kb_document",
					"method": "POST",
					"path": "/api/works/:id/kb/documents",
					"summary": "Create a KB document",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentForm"
				},
				{
					"toolName": "get_kb_document",
					"method": "GET",
					"path": "/api/works/:id/kb/documents/:docIdOrPath",
					"summary": "Get a KB document by id or path",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentDetail"
				},
				{
					"toolName": "update_kb_document",
					"method": "PATCH",
					"path": "/api/works/:id/kb/documents/:docId",
					"summary": "Update a KB document",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentForm"
				},
				{
					"toolName": "delete_kb_document",
					"method": "DELETE",
					"path": "/api/works/:id/kb/documents/:docId",
					"summary": "Delete a KB document",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "lock_kb_document",
					"method": "POST",
					"path": "/api/works/:id/kb/documents/:docId/lock",
					"summary": "Lock a KB document",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentDetail"
				},
				{
					"toolName": "unlock_kb_document",
					"method": "POST",
					"path": "/api/works/:id/kb/documents/:docId/unlock",
					"summary": "Unlock a KB document",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentDetail"
				},
				{
					"toolName": "restore_kb_document",
					"method": "POST",
					"path": "/api/works/:id/kb/documents/:docId/restore",
					"summary": "Restore a KB document to a prior Git commit",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_kb_document_history",
					"method": "GET",
					"path": "/api/works/:id/kb/documents/:docId/history",
					"summary": "List Git commits that touched a KB document",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentHistory"
				},
				{
					"toolName": "list_kb_citations",
					"method": "GET",
					"path": "/api/works/:id/kb/documents/:docId/citations",
					"summary": "List citations referencing a KB document",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbCitationList"
				},
				{
					"toolName": "list_kb_tags",
					"method": "GET",
					"path": "/api/works/:id/kb/tags",
					"summary": "List per-Work KB tags",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbTagList"
				},
				{
					"toolName": "create_kb_tag",
					"method": "POST",
					"path": "/api/works/:id/kb/tags",
					"summary": "Create a KB tag",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbTagForm"
				},
				{
					"toolName": "update_kb_tag",
					"method": "PATCH",
					"path": "/api/works/:id/kb/tags/:tagId",
					"summary": "Update a KB tag",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbTagForm"
				},
				{
					"toolName": "delete_kb_tag",
					"method": "DELETE",
					"path": "/api/works/:id/kb/tags/:tagId",
					"summary": "Delete a KB tag",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_kb_upload",
					"method": "POST",
					"path": "/api/works/:id/kb/uploads",
					"summary": "Upload a source file to the Knowledge Base",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbUploadForm"
				},
				{
					"toolName": "list_kb_uploads",
					"method": "GET",
					"path": "/api/works/:id/kb/uploads",
					"summary": "List KB uploads for a Work",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbUploadList"
				},
				{
					"toolName": "get_kb_upload",
					"method": "GET",
					"path": "/api/works/:id/kb/uploads/:uploadId",
					"summary": "Get a single KB upload row",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbUploadDetail"
				},
				{
					"toolName": "download_kb_upload",
					"method": "GET",
					"path": "/api/works/:id/kb/uploads/:uploadId/download",
					"summary": "Stream the persisted bytes for a KB upload",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "retry_kb_upload_extraction",
					"method": "POST",
					"path": "/api/works/:id/kb/uploads/:uploadId/retry-extraction",
					"summary": "Re-run extraction for a failed or skipped KB upload",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbUploadDetail"
				},
				{
					"toolName": "list_org_kb_documents",
					"method": "GET",
					"path": "/api/organizations/:orgId/kb/documents",
					"summary": "List organization-level KB documents",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrgKbDocumentList"
				},
				{
					"toolName": "create_org_kb_document",
					"method": "POST",
					"path": "/api/organizations/:orgId/kb/documents",
					"summary": "Create an organization-level KB document",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrgKbDocumentForm"
				},
				{
					"toolName": "resolve_inheritable_documents",
					"method": "GET",
					"path": "/api/works/:id/kb/inheritable",
					"summary": "Resolve effective inheritable documents for a Work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "InheritableDocumentList"
				},
				{
					"toolName": "get_inherited_document",
					"method": "GET",
					"path": "/api/works/:id/kb/inheritable/*idOrPath",
					"summary": "Read the body of one inherited (org-scope) KB document",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "KbDocumentDetail"
				}
			],
			"counts": {
				"total": 22,
				"chatIncluded": 22,
				"destructive": 3,
				"excluded": 0
			},
			"canvasComponents": [
				{
					"name": "KbDocumentList",
					"purpose": "Display paginated list of KB documents with filtering by class, status, tag, and search query",
					"viz": "table",
					"dataSource": "GET /api/works/:id/kb/documents"
				},
				{
					"name": "KbDocumentDetail",
					"purpose": "Display full KB document with body, metadata, lock status, and version history",
					"viz": "detail",
					"dataSource": "GET /api/works/:id/kb/documents/:docId"
				},
				{
					"name": "KbDocumentForm",
					"purpose": "Form to create or update a KB document with title, class, body, description, tags",
					"viz": "form",
					"dataSource": "POST/PATCH /api/works/:id/kb/documents"
				},
				{
					"name": "KbDocumentHistory",
					"purpose": "Timeline of Git commits for a KB document with ability to restore to prior versions",
					"viz": "timeline",
					"dataSource": "GET /api/works/:id/kb/documents/:docId/history"
				},
				{
					"name": "KbCitationList",
					"purpose": "List of AI conversation citations that reference a KB document",
					"viz": "list",
					"dataSource": "GET /api/works/:id/kb/documents/:docId/citations"
				},
				{
					"name": "KbTagList",
					"purpose": "Display and manage KB tags for a Work",
					"viz": "list",
					"dataSource": "GET /api/works/:id/kb/tags"
				},
				{
					"name": "KbTagForm",
					"purpose": "Form to create or update a KB tag",
					"viz": "form",
					"dataSource": "POST/PATCH /api/works/:id/kb/tags"
				},
				{
					"name": "KbUploadList",
					"purpose": "Display paginated list of file uploads with extraction status and progress",
					"viz": "table",
					"dataSource": "GET /api/works/:id/kb/uploads"
				},
				{
					"name": "KbUploadDetail",
					"purpose": "Display upload metadata, file preview/viewer, extraction status, and retry option",
					"viz": "detail",
					"dataSource": "GET /api/works/:id/kb/uploads/:uploadId"
				},
				{
					"name": "KbUploadForm",
					"purpose": "File upload form with metadata (title, description, target class, tags)",
					"viz": "form",
					"dataSource": "POST /api/works/:id/kb/uploads"
				},
				{
					"name": "OrgKbDocumentList",
					"purpose": "Display organization-level inheritable KB documents (legal, style, seo)",
					"viz": "table",
					"dataSource": "GET /api/organizations/:orgId/kb/documents"
				},
				{
					"name": "OrgKbDocumentForm",
					"purpose": "Form to create organization-level inheritable KB documents",
					"viz": "form",
					"dataSource": "POST /api/organizations/:orgId/kb/documents"
				},
				{
					"name": "InheritableDocumentList",
					"purpose": "Display merged set of org-level and Work-override inheritable documents",
					"viz": "tree",
					"dataSource": "GET /api/works/:id/kb/inheritable"
				}
			],
			"reports": [
				{
					"name": "KB Document Activity",
					"question": "How many KB documents have been created, updated, and accessed over time?",
					"viz": "line"
				},
				{
					"name": "Document Class Distribution",
					"question": "What is the breakdown of KB documents by class (article, tutorial, reference, faq, etc.)?",
					"viz": "pie"
				},
				{
					"name": "Upload Extraction Status",
					"question": "What is the current status of uploaded files (completed, pending, failed, skipped)?",
					"viz": "bar"
				},
				{
					"name": "Most Referenced Documents",
					"question": "Which KB documents are cited most frequently in conversations?",
					"viz": "bar"
				},
				{
					"name": "Tag Usage",
					"question": "Which tags are applied to the most documents?",
					"viz": "bar"
				},
				{
					"name": "Document Locks Timeline",
					"question": "When and for how long are documents locked, and by which users?",
					"viz": "timeline"
				},
				{
					"name": "Upload File Types",
					"question": "What file types are being uploaded and what is their extraction success rate?",
					"viz": "bar"
				},
				{
					"name": "Org KB Inheritance Coverage",
					"question": "How many Works in the organization have enabled inheritance for each document class (legal, style, seo)?",
					"viz": "bar"
				}
			]
		},
		{
			"domain": "orgs-tenants-members",
			"operations": [
				{
					"toolName": "create_organization",
					"method": "POST",
					"path": "/api/organizations",
					"summary": "Create an Organization",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrganizationDetailCard"
				},
				{
					"toolName": "register_company",
					"method": "POST",
					"path": "/api/organizations/register-company",
					"summary": "Register a Company with backing Work lifecycle",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrganizationDetailCard"
				},
				{
					"toolName": "list_organizations",
					"method": "GET",
					"path": "/api/organizations",
					"summary": "List Organizations for the current user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrganizationListTable"
				},
				{
					"toolName": "check_organization_slug",
					"method": "GET",
					"path": "/api/organizations/check-slug",
					"summary": "Check Organization slug availability (public, throttled)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_organization_by_slug",
					"method": "GET",
					"path": "/api/organizations/:slug",
					"summary": "Fetch an Organization by slug",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OrganizationDetailCard"
				},
				{
					"toolName": "update_organization",
					"method": "PATCH",
					"path": "/api/organizations/:id",
					"summary": "Update Organization fields (displayName, legalName, countryCode)",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "upgrade_organization_from_account",
					"method": "POST",
					"path": "/api/organizations/:id/upgrade-from-account",
					"summary": "Upgrade bare-Tenant data into this Organization (first-org guard)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "list_work_members",
					"method": "GET",
					"path": "/api/works/:workId/members",
					"summary": "List members of a work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemberListTable"
				},
				{
					"toolName": "add_work_member",
					"method": "POST",
					"path": "/api/works/:workId/members",
					"summary": "Invite a user to join the work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_work_member",
					"method": "GET",
					"path": "/api/works/:workId/members/:memberId",
					"summary": "Get a specific work member",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemberDetailCard"
				},
				{
					"toolName": "update_work_member_role",
					"method": "PUT",
					"path": "/api/works/:workId/members/:memberId",
					"summary": "Update the role of a work member",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "remove_work_member",
					"method": "DELETE",
					"path": "/api/works/:workId/members/:memberId",
					"summary": "Remove a member from the work",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "leave_work",
					"method": "POST",
					"path": "/api/works/:workId/members/leave",
					"summary": "Leave a work you are a member of",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_work_invitation",
					"method": "POST",
					"path": "/api/works/:workId/invitations",
					"summary": "Issue a tokenised invitation to join a work",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "InvitationDetailCard"
				},
				{
					"toolName": "list_work_invitations",
					"method": "GET",
					"path": "/api/works/:workId/invitations",
					"summary": "List pending invitations for the work",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "InvitationListTable"
				},
				{
					"toolName": "revoke_work_invitation",
					"method": "DELETE",
					"path": "/api/works/:workId/invitations/:invitationId",
					"summary": "Revoke a pending invitation",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "check_username_availability",
					"method": "GET",
					"path": "/api/users/check-username",
					"summary": "Check username availability with normalized form and suggestion",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				}
			],
			"counts": {
				"total": 17,
				"chatIncluded": 17,
				"destructive": 3,
				"excluded": 0
			},
			"canvasComponents": [
				{
					"name": "OrganizationListTable",
					"purpose": "Display a paginated list of the user's organizations with slug, display name, legal name, registration status, and action buttons",
					"viz": "table",
					"dataSource": "list_organizations"
				},
				{
					"name": "OrganizationDetailCard",
					"purpose": "Show full details of a single organization: name, slug, country, registration status, linked work, created/updated dates",
					"viz": "card",
					"dataSource": "get_organization_by_slug or create_organization"
				},
				{
					"name": "MemberListTable",
					"purpose": "Display all members of a work with username, email, role, status, and action buttons (update role, remove member)",
					"viz": "table",
					"dataSource": "list_work_members"
				},
				{
					"name": "MemberDetailCard",
					"purpose": "Show full profile of a single work member: name, email, role, joined date, permissions",
					"viz": "card",
					"dataSource": "get_work_member"
				},
				{
					"name": "InvitationListTable",
					"purpose": "Display pending invitations with email/username, role, expiry date, status, and action buttons (revoke)",
					"viz": "table",
					"dataSource": "list_work_invitations"
				},
				{
					"name": "InvitationDetailCard",
					"purpose": "Show invitation details including claim URL, role, expiry, and metadata for sharing",
					"viz": "card",
					"dataSource": "create_work_invitation"
				}
			],
			"reports": [
				{
					"name": "Organization Count by Status",
					"question": "How many organizations are registered vs in draft status, and what's the distribution by registration provider?",
					"viz": "bar"
				},
				{
					"name": "Member Activity by Work",
					"question": "Which works have the most members, and what are the role distributions (owner, manager, member)?",
					"viz": "table"
				},
				{
					"name": "Invitation Acceptance Rate",
					"question": "Of pending invitations, what percentage were claimed vs expired, and what's the average time-to-claim?",
					"viz": "line"
				},
				{
					"name": "Member Tenure",
					"question": "Distribution of member tenure across works\u2014how many members joined in the last 7/30/90 days?",
					"viz": "histogram"
				},
				{
					"name": "Organization Growth",
					"question": "Timeline of new organization creation and member onboarding over the last 30 days",
					"viz": "line"
				}
			]
		},
		{
			"domain": "auth-account-security",
			"operations": [
				{
					"toolName": "get_auth_providers",
					"method": "GET",
					"path": "/api/auth/providers",
					"summary": "Get configured authentication providers",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ProviderConfigCard"
				},
				{
					"toolName": "get_user_profile",
					"method": "GET",
					"path": "/api/auth/profile",
					"summary": "Get current user profile from JWT",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "UserProfileCard"
				},
				{
					"toolName": "get_fresh_user_profile",
					"method": "GET",
					"path": "/api/auth/profile/fresh",
					"summary": "Get fresh user profile from database",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "UserProfileCard"
				},
				{
					"toolName": "update_user_profile",
					"method": "PUT",
					"path": "/api/auth/profile",
					"summary": "Update user profile information",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_password",
					"method": "POST",
					"path": "/api/auth/update-password",
					"summary": "Change the user password",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "send_verification_email",
					"method": "POST",
					"path": "/api/auth/send-verification",
					"summary": "Send an email verification link to the user",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "request_magic_link",
					"method": "POST",
					"path": "/api/auth/magic-link",
					"summary": "Request a magic login link (public, no auth required)",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "auth-flow"
				},
				{
					"toolName": "validate_email_token",
					"method": "GET",
					"path": "/api/auth/validate-email-token",
					"summary": "Check if an email verification token is valid",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "auth-flow"
				},
				{
					"toolName": "validate_password_reset_token",
					"method": "GET",
					"path": "/api/auth/validate-reset-token",
					"summary": "Check if a password reset token is valid",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "auth-flow"
				},
				{
					"toolName": "logout_current_session",
					"method": "POST",
					"path": "/api/auth/logout",
					"summary": "Invalidate the current authenticated session",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "logout_all_sessions",
					"method": "POST",
					"path": "/api/auth/logout-all",
					"summary": "Invalidate all sessions for the user across all devices",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "create_api_key",
					"method": "POST",
					"path": "/api/auth/api-keys",
					"summary": "Create a new API key",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ApiKeyDetailCard"
				},
				{
					"toolName": "list_api_keys",
					"method": "GET",
					"path": "/api/auth/api-keys",
					"summary": "List all API keys for the current user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ApiKeyListTable"
				},
				{
					"toolName": "revoke_api_key",
					"method": "DELETE",
					"path": "/api/auth/api-keys/:id",
					"summary": "Revoke an API key",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "export_account_data",
					"method": "GET",
					"path": "/api/account/export",
					"summary": "Export account data as JSON file",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ExportProgressCard"
				},
				{
					"toolName": "preview_account_import",
					"method": "POST",
					"path": "/api/account/import/preview",
					"summary": "Preview the results of an account data import without applying",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "apply_account_import",
					"method": "POST",
					"path": "/api/account/import/apply",
					"summary": "Apply account data import with conflict resolution",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_sync_status",
					"method": "GET",
					"path": "/api/account/sync/status",
					"summary": "Get GitHub sync configuration status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SyncStatusCard"
				},
				{
					"toolName": "configure_sync_repository",
					"method": "POST",
					"path": "/api/account/sync/configure",
					"summary": "Configure or create a GitHub repository for account sync",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "push_to_github",
					"method": "POST",
					"path": "/api/account/sync/push",
					"summary": "Push account data to configured GitHub repository",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "pull_from_github",
					"method": "POST",
					"path": "/api/account/sync/pull",
					"summary": "Pull account data from configured GitHub repository",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "apply_github_pull",
					"method": "POST",
					"path": "/api/account/sync/pull/apply",
					"summary": "Apply GitHub pull with conflict resolution",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "remove_sync_configuration",
					"method": "DELETE",
					"path": "/api/account/sync",
					"summary": "Remove GitHub sync configuration",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_onboarding_state",
					"method": "GET",
					"path": "/api/onboarding/state",
					"summary": "Get the current user's onboarding wizard state",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "update_onboarding_state",
					"method": "PATCH",
					"path": "/api/onboarding/state",
					"summary": "Partially update the onboarding wizard state",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "mark_onboarding_completed",
					"method": "POST",
					"path": "/api/onboarding/complete",
					"summary": "Mark the onboarding wizard completed (idempotent)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "mark_onboarding_dismissed",
					"method": "POST",
					"path": "/api/onboarding/dismiss",
					"summary": "Mark the onboarding wizard dismissed (idempotent)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "get_onboarding_catalog",
					"method": "GET",
					"path": "/api/onboarding/catalog",
					"summary": "Get the onboarding wizard catalog (cards and plugins)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "OnboardingCatalogCard"
				},
				{
					"toolName": "submit_onboarding_telemetry",
					"method": "POST",
					"path": "/api/onboarding/telemetry",
					"summary": "Relay an onboarding wizard telemetry event",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "telemetry-beacon"
				},
				{
					"toolName": "preview_claim_invitation",
					"method": "GET",
					"path": "/api/claim/preview",
					"summary": "Preview a claim invitation without consuming it",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false
				},
				{
					"toolName": "accept_claim_invitation",
					"method": "POST",
					"path": "/api/claim/accept",
					"summary": "Accept a claim invitation (member role or owner claim)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				},
				{
					"toolName": "get_subscription_plan",
					"method": "GET",
					"path": "/api/subscriptions/plan",
					"summary": "Get the current subscription plan for the user",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SubscriptionPlanCard"
				},
				{
					"toolName": "update_subscription_plan",
					"method": "POST",
					"path": "/api/subscriptions/plan",
					"summary": "Update the subscription plan for the user",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true
				}
			],
			"counts": {
				"total": 32,
				"chatIncluded": 29,
				"destructive": 5,
				"excluded": 3
			},
			"canvasComponents": [
				{
					"name": "UserProfileCard",
					"purpose": "Display and edit user profile information (name, avatar, bio, email verification status)"
				},
				{
					"name": "ApiKeyListTable",
					"purpose": "List all API keys with expiration dates, creation timestamps, and quick-delete actions"
				},
				{
					"name": "ApiKeyDetailCard",
					"purpose": "Display newly created API key secret (once, non-retrievable) with copy/download options"
				},
				{
					"name": "ProviderConfigCard",
					"purpose": "Show enabled OAuth providers and magic-link availability status"
				},
				{
					"name": "SyncStatusCard",
					"purpose": "Display GitHub sync configuration status, repo name, last push/pull timestamps"
				},
				{
					"name": "ExportProgressCard",
					"purpose": "Show account export progress, file size, download link, included data categories"
				},
				{
					"name": "OnboardingCatalogCard",
					"purpose": "Display wizard catalog with AI/Storage/Deploy choice cards and plugins list"
				},
				{
					"name": "SubscriptionPlanCard",
					"purpose": "Display current subscription plan, allowed cadences, upgrade/downgrade options"
				}
			],
			"reports": [
				{
					"name": "LoginActivityReport",
					"question": "What is my login activity over the last 30 days by device and location?",
					"viz": "TimeSeriesChart with logout-all events, IP prefixes, User-Agent summaries"
				},
				{
					"name": "ApiKeyAudit",
					"question": "Which API keys are active, when were they created, and when do they expire?",
					"viz": "TableReport with key name, created date, expiration date, last used (if available)"
				},
				{
					"name": "AccountSyncTimeline",
					"question": "What is the history of my GitHub sync pushes and pulls with timestamps and change counts?",
					"viz": "TimelineChart showing push/pull events, conflicting items resolved, data categories synced"
				},
				{
					"name": "OnboardingProgress",
					"question": "What is my onboarding wizard completion status and which steps have been completed?",
					"viz": "ProgressBar with step names, timestamps, and completion percentage"
				},
				{
					"name": "SubscriptionHistory",
					"question": "What is my subscription plan history with dates of plan changes?",
					"viz": "TimelineChart showing plan upgrades/downgrades with effective dates"
				}
			]
		},
		{
			"domain": "notifications",
			"operations": [
				{
					"toolName": "list_notifications",
					"method": "GET",
					"path": "/api/notifications",
					"summary": "Get notifications for the current user with optional filtering",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationsList"
				},
				{
					"toolName": "get_unread_notification_count",
					"method": "GET",
					"path": "/api/notifications/unread-count",
					"summary": "Get count of unread notifications",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationUnreadBadge"
				},
				{
					"toolName": "get_persistent_notifications",
					"method": "GET",
					"path": "/api/notifications/persistent",
					"summary": "Get critical persistent notifications for prominent display",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "PersistentNotificationsBanner"
				},
				{
					"toolName": "mark_notification_as_read",
					"method": "POST",
					"path": "/api/notifications/:id/read",
					"summary": "Mark a specific notification as read",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "mark_all_notifications_as_read",
					"method": "POST",
					"path": "/api/notifications/read-all",
					"summary": "Mark all notifications as read",
					"kind": "update",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "dismiss_notification",
					"method": "POST",
					"path": "/api/notifications/:id/dismiss",
					"summary": "Dismiss a notification to hide it from view (persistent notifications cannot be dismissed)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_notification_event_types",
					"method": "GET",
					"path": "/api/notifications/event-types",
					"summary": "List all registered notification event types available for subscriptions",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EventTypesList"
				},
				{
					"toolName": "get_notification_preferences",
					"method": "GET",
					"path": "/api/notifications/preferences",
					"summary": "Get user notification preferences including subscriptions, quiet hours, and mutes",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationPreferencesPanel"
				},
				{
					"toolName": "set_event_subscription",
					"method": "PUT",
					"path": "/api/notifications/preferences/event/:eventKey",
					"summary": "Set which notification channels are used for a specific event type",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "set_quiet_hours",
					"method": "PUT",
					"path": "/api/notifications/preferences/quiet-hours",
					"summary": "Set quiet hours window (start/end times) and timezone for suppressing notifications",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "mute_notification_category",
					"method": "POST",
					"path": "/api/notifications/preferences/mute",
					"summary": "Mute a notification category until a specified time or indefinitely",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "unmute_notification_category",
					"method": "DELETE",
					"path": "/api/notifications/preferences/mute/:category",
					"summary": "Unmute a notification category",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_notification_channels",
					"method": "GET",
					"path": "/api/notification-channels",
					"summary": "List all notification channels for the current user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationChannelsList"
				},
				{
					"toolName": "create_notification_channel",
					"method": "POST",
					"path": "/api/notification-channels",
					"summary": "Add a new notification channel (email, SMS, webhook, etc.)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationChannelForm"
				},
				{
					"toolName": "update_notification_channel",
					"method": "PATCH",
					"path": "/api/notification-channels/:id",
					"summary": "Update an existing notification channel configuration",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "NotificationChannelForm"
				},
				{
					"toolName": "delete_notification_channel",
					"method": "DELETE",
					"path": "/api/notification-channels/:id",
					"summary": "Remove a notification channel",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "test_notification_channel",
					"method": "POST",
					"path": "/api/notification-channels/:id/test",
					"summary": "Send a test message via the specified notification channel",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				}
			],
			"counts": {
				"total": 17,
				"chatIncluded": 17,
				"destructive": 1,
				"excluded": 1
			},
			"canvasComponents": [
				{
					"name": "NotificationsList",
					"purpose": "Render paginated list of notifications with filtering by category, read status, and search",
					"viz": "table",
					"dataSource": "list_notifications"
				},
				{
					"name": "NotificationUnreadBadge",
					"purpose": "Display badge with unread notification count for nav/header",
					"viz": "stat",
					"dataSource": "get_unread_notification_count"
				},
				{
					"name": "PersistentNotificationsBanner",
					"purpose": "Render prominent banner for critical persistent notifications that require user attention",
					"viz": "banner",
					"dataSource": "get_persistent_notifications"
				},
				{
					"name": "EventTypesList",
					"purpose": "List all notification event types with descriptions and subscription status",
					"viz": "table",
					"dataSource": "list_notification_event_types"
				},
				{
					"name": "NotificationPreferencesPanel",
					"purpose": "Display and edit notification preferences including quiet hours, mutes, and channel subscriptions per event",
					"viz": "detail",
					"dataSource": "get_notification_preferences"
				},
				{
					"name": "NotificationChannelsList",
					"purpose": "List user's notification channels with edit/delete/test actions and channel type indicators",
					"viz": "table",
					"dataSource": "list_notification_channels"
				},
				{
					"name": "NotificationChannelForm",
					"purpose": "Form to create or edit notification channel with type-specific configuration fields",
					"viz": "form",
					"dataSource": ""
				}
			],
			"reports": [
				{
					"name": "Notification Activity Trend",
					"question": "How many notifications has the user received over time (daily/weekly breakdown)?",
					"viz": "line"
				},
				{
					"name": "Unread Notification Rate",
					"question": "What percentage of notifications remain unread by category?",
					"viz": "bar"
				},
				{
					"name": "Channel Usage Distribution",
					"question": "Which notification channels does the user receive notifications through most frequently?",
					"viz": "pie"
				},
				{
					"name": "Event Type Engagement",
					"question": "Which event types generate the most notifications and how are they distributed by category?",
					"viz": "bar"
				},
				{
					"name": "Quiet Hours Impact",
					"question": "How many notifications would be suppressed by the user's quiet hours settings?",
					"viz": "stat"
				},
				{
					"name": "Muted Categories Timeline",
					"question": "Which categories are currently muted and when will the mutes expire?",
					"viz": "table"
				}
			]
		},
		{
			"domain": "budgets-usage-billing",
			"operations": [
				{
					"toolName": "list_work_budgets",
					"method": "GET",
					"path": "/api/works/{workId}/budgets",
					"summary": "List all budgets configured for a Work",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetListTable"
				},
				{
					"toolName": "create_work_budget",
					"method": "POST",
					"path": "/api/works/{workId}/budgets",
					"summary": "Create a global or plugin-scoped monthly budget cap",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetDetailCard"
				},
				{
					"toolName": "update_work_budget",
					"method": "PATCH",
					"path": "/api/works/{workId}/budgets/{budgetId}",
					"summary": "Update budget cap, overage flag, or currency",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "BudgetDetailCard"
				},
				{
					"toolName": "delete_work_budget",
					"method": "DELETE",
					"path": "/api/works/{workId}/budgets/{budgetId}",
					"summary": "Delete a budget and remove its cap and future alerts",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "get_work_usage_summary",
					"method": "GET",
					"path": "/api/works/{workId}/usage/summary",
					"summary": "Per-Work usage summary for a billing period with per-plugin breakdown and global budget status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "UsageSummaryCard"
				},
				{
					"toolName": "export_work_usage_csv",
					"method": "GET",
					"path": "/api/works/{workId}/usage/export",
					"summary": "Download per-Work usage events as CSV for the billing period",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_work_usage_trend",
					"method": "GET",
					"path": "/api/works/{workId}/usage/trend",
					"summary": "Per-Work daily spend buckets across the billing period (time-series data)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "UsageTrendChart"
				},
				{
					"toolName": "get_account_wide_usage",
					"method": "GET",
					"path": "/api/me/usage/account-wide",
					"summary": "Current-month total spend across user account + account-wide cap status",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AccountWideBudgetCard"
				},
				{
					"toolName": "get_admin_usage_report",
					"method": "GET",
					"path": "/admin/usage",
					"summary": "Cross-user and cross-Work spend for self-hosted platform admins (requires platform admin role)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AdminUsageTable"
				}
			],
			"canvasComponents": [
				{
					"name": "BudgetListTable",
					"purpose": "Display all budgets for a Work in a sortable, filterable table with columns: scope, pluginId (if plugin), monthlyCapCents, allowOverage, currency, and actions (edit, delete)",
					"viz": "table",
					"dataSource": "list_work_budgets"
				},
				{
					"name": "BudgetDetailCard",
					"purpose": "Display or edit a single budget with form fields for monthlyCapCents, allowOverage toggle, and currency; shows validation errors",
					"viz": "form",
					"dataSource": "create_work_budget or update_work_budget"
				},
				{
					"name": "UsageSummaryCard",
					"purpose": "Card showing current period usage: totalSpendCents, currency, perPlugin breakdown (pluginId, capability, units, costCents), and global budget cap with percentUsed gauge",
					"viz": "card",
					"dataSource": "get_work_usage_summary"
				},
				{
					"name": "UsageTrendChart",
					"purpose": "Time-series line or bar chart showing daily spend buckets (date on X-axis, costCents on Y-axis) across the billing period; supports zooming and period selection",
					"viz": "chart",
					"dataSource": "get_work_usage_trend"
				},
				{
					"name": "AccountWideBudgetCard",
					"purpose": "Dashboard card showing user's current-month total spend across all Works, account-wide cap, percentUsed gauge, and link to /settings/work-agent#account-budgets",
					"viz": "card",
					"dataSource": "get_account_wide_usage"
				},
				{
					"name": "AdminUsageTable",
					"purpose": "Admin-only table showing per (user, work) rows with columns: username, email, workName, units, costCents; filterable by period; shows totalSpendCents for the period",
					"viz": "table",
					"dataSource": "get_admin_usage_report"
				}
			],
			"reports": [
				{
					"name": "Monthly Budget vs Actual Spend",
					"question": "How much of the monthly budget has been spent, and which plugins are the largest consumers?",
					"viz": "pie-or-stacked-bar"
				},
				{
					"name": "Daily Spend Trend",
					"question": "What is the trend of daily spending across the current billing period, and on which days was spending highest?",
					"viz": "line-chart"
				},
				{
					"name": "Account-Wide Usage Forecast",
					"question": "Given current spending rate, when will the account-wide monthly budget be exhausted?",
					"viz": "gauge-with-trend-arrow"
				},
				{
					"name": "Per-Plugin Cost Analysis",
					"question": "Which plugins are consuming the most budget this month, broken down by capability?",
					"viz": "horizontal-bar-chart"
				},
				{
					"name": "Cross-User Admin Spend",
					"question": "Which users and Works are generating the highest costs across the platform this month?",
					"viz": "sortable-table-with-highlights"
				},
				{
					"name": "Budget Overage Risk",
					"question": "Which Works are approaching or have exceeded their monthly budget caps?",
					"viz": "alert-list-with-percentages"
				}
			],
			"controllers": ["BudgetsController", "UsageController", "AccountUsageController", "AdminUsageController"],
			"counts": {
				"total": 9,
				"chatIncluded": 9,
				"destructive": 1,
				"excluded": 0
			}
		},
		{
			"domain": "email-comms",
			"operations": [
				{
					"toolName": "list_email_addresses",
					"method": "GET",
					"path": "/api/email/addresses",
					"summary": "List tenant email addresses with optional direction filter (inbound/outbound)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EmailAddressListTable"
				},
				{
					"toolName": "create_email_address",
					"method": "POST",
					"path": "/api/email/addresses",
					"summary": "Register a new tenant email address with plugin configuration",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EmailAddressDetailCard"
				},
				{
					"toolName": "update_email_address",
					"method": "PATCH",
					"path": "/api/email/addresses/:id",
					"summary": "Update email address provider settings, default reply status, or disabled flag",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EmailAddressDetailCard"
				},
				{
					"toolName": "delete_email_address",
					"method": "DELETE",
					"path": "/api/email/addresses/:id",
					"summary": "Delete a tenant email address",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "trigger_email_verification",
					"method": "POST",
					"path": "/api/email/addresses/:id/verify",
					"summary": "Trigger verification email for a new address",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_email_messages",
					"method": "GET",
					"path": "/api/email/messages",
					"summary": "List email messages for an agent with pagination (limit, offset)",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EmailMessageListTable"
				},
				{
					"toolName": "get_email_message",
					"method": "GET",
					"path": "/api/email/messages/:id",
					"summary": "Get a single email message by id",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "EmailMessageDetailCard"
				},
				{
					"toolName": "send_email_message",
					"method": "POST",
					"path": "/api/email/messages",
					"summary": "Compose and send an email from an agent outbound address with optional template rendering",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "confirm_email_verification",
					"method": "GET",
					"path": "/api/email/verify/:token",
					"summary": "Confirm an email address via verification token (public click-through)",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "public verification click-through endpoint (not a user-initiated chat action)"
				}
			],
			"counts": {
				"total": 10,
				"chatIncluded": 9,
				"destructive": 1,
				"excluded": 1
			},
			"canvasComponents": [
				{
					"name": "EmailAddressListTable",
					"purpose": "Display all tenant email addresses with direction, plugin, verification status, and default-for-replies flag; support filtering by direction (inbound/outbound)",
					"viz": "table",
					"dataSource": "list_email_addresses"
				},
				{
					"name": "EmailAddressDetailCard",
					"purpose": "Show single address details with provider settings, verification token status, disabled toggle; support inline editing of provider settings and reply default",
					"viz": "detail-card",
					"dataSource": "create_email_address, update_email_address"
				},
				{
					"name": "EmailMessageListTable",
					"purpose": "Display paginated email messages for selected agent with from/to, subject, status, received/sent timestamps; support pagination controls",
					"viz": "table",
					"dataSource": "list_email_messages"
				},
				{
					"name": "EmailMessageDetailCard",
					"purpose": "Show full email message with headers (from, to, cc, subject), body (text and HTML), delivery status (bounce, open, click events), provider ID",
					"viz": "detail-card",
					"dataSource": "get_email_message"
				},
				{
					"name": "EmailAddressSetupFlow",
					"purpose": "Guided step-by-step address registration: select plugin type, configure provider (API keys, OAuth), enter address, trigger verification, confirm click-through",
					"viz": "form-wizard",
					"dataSource": "create_email_address, trigger_email_verification, confirm_email_verification"
				}
			],
			"reports": [
				{
					"name": "Email Address Inventory",
					"question": "How many inbound vs outbound email addresses are configured, and which are currently verified and active?",
					"viz": "table"
				},
				{
					"name": "Message Volume Trend",
					"question": "What is the daily/weekly count of inbound and outbound messages by agent over the last 30 days?",
					"viz": "line-chart"
				},
				{
					"name": "Delivery Status Distribution",
					"question": "What percentage of sent messages result in bounces, opens, clicks, or remain delivered/untracked?",
					"viz": "pie-chart"
				},
				{
					"name": "Address Verification Status",
					"question": "Which addresses are pending verification, verified, or disabled, and when was each verified?",
					"viz": "table"
				},
				{
					"name": "Agent Email Activity",
					"question": "Which agents send and receive the most email, and how has their message volume changed over time?",
					"viz": "bar-chart"
				}
			]
		},
		{
			"domain": "activity-webhooks-files-templates",
			"operations": [
				{
					"toolName": "list_activities",
					"method": "GET",
					"path": "/api/activity-log",
					"summary": "List activity log entries paginated and filtered for current user",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ActivityLogTable"
				},
				{
					"toolName": "get_running_count",
					"method": "GET",
					"path": "/api/activity-log/running-count",
					"summary": "Get count of in-progress operations for sidebar badge",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ActivityBadge"
				},
				{
					"toolName": "get_activity_summary",
					"method": "GET",
					"path": "/api/activity-log/summary",
					"summary": "Get activity log summary counts grouped by status",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ActivitySummaryCard"
				},
				{
					"toolName": "export_activity_log_csv",
					"method": "GET",
					"path": "/api/activity-log/export",
					"summary": "Export activity log entries as CSV file",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_activity",
					"method": "GET",
					"path": "/api/activity-log/:id",
					"summary": "Get single activity log entry with full details and live logs",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ActivityDetailCard"
				},
				{
					"toolName": "list_webhooks",
					"method": "GET",
					"path": "/api/webhooks",
					"summary": "List active webhook subscriptions for current account",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WebhookSubscriptionList"
				},
				{
					"toolName": "list_webhook_deliveries",
					"method": "GET",
					"path": "/api/webhooks/deliveries",
					"summary": "List recent outbound deliveries against subscriptions",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "WebhookDeliveriesList"
				},
				{
					"toolName": "create_webhook",
					"method": "POST",
					"path": "/api/webhooks",
					"summary": "Create webhook subscription with HMAC signing secret",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "update_webhook",
					"method": "PATCH",
					"path": "/api/webhooks/:id",
					"summary": "Pause or resume a webhook subscription",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "test_webhook",
					"method": "POST",
					"path": "/api/webhooks/:id/test",
					"summary": "Fire test webhook to verify URL and signing behavior",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "rotate_webhook_secret",
					"method": "POST",
					"path": "/api/webhooks/:id/rotate-secret",
					"summary": "Generate new HMAC signing secret for subscription",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "redeliver_webhook",
					"method": "POST",
					"path": "/api/webhooks/deliveries/:deliveryId/redeliver",
					"summary": "Re-enqueue previous webhook delivery with original payload",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "delete_webhook",
					"method": "DELETE",
					"path": "/api/webhooks/:id",
					"summary": "Delete webhook subscription irreversibly",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "upload_image",
					"method": "POST",
					"path": "/api/uploads",
					"summary": "Upload image file (png/jpeg/gif/webp) with validation",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "upload_image_alias",
					"method": "POST",
					"path": "/api/uploads/image",
					"summary": "Upload image (alias of POST /api/uploads)",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": false,
					"requiresConfirmation": false,
					"excludeReason": "duplicate endpoint"
				},
				{
					"toolName": "upload_file",
					"method": "POST",
					"path": "/api/uploads/file",
					"summary": "Upload file (image/PDF/archive/text) with broader MIME acceptance",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "upload_anonymous",
					"method": "POST",
					"path": "/api/uploads/anonymous",
					"summary": "Upload from anonymous visitor with auto-minted anon user",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "upload_anonymous_file",
					"method": "POST",
					"path": "/api/uploads/anonymous/file",
					"summary": "Upload file from anonymous visitor with broader MIME types",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "presign_upload",
					"method": "POST",
					"path": "/api/uploads/presign",
					"summary": "Mint presigned upload URL for direct browser-to-cloud upload",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "serve_upload",
					"method": "GET",
					"path": "/api/uploads/:userId/:filename",
					"summary": "Serve previously uploaded file (owner-only access)",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_templates",
					"method": "GET",
					"path": "/api/templates",
					"summary": "List templates visible to current user for given kind",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "TemplateList"
				},
				{
					"toolName": "add_custom_template",
					"method": "POST",
					"path": "/api/templates/custom",
					"summary": "Add custom template from repository URL",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "update_custom_template",
					"method": "PUT",
					"path": "/api/templates/custom/:templateId",
					"summary": "Update editable metadata for custom template",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "archive_custom_template",
					"method": "POST",
					"path": "/api/templates/custom/:templateId/archive",
					"summary": "Archive custom template owned by current user",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				},
				{
					"toolName": "set_default_template",
					"method": "PUT",
					"path": "/api/templates/default",
					"summary": "Set default template for current user and kind",
					"kind": "update",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "fork_template",
					"method": "POST",
					"path": "/api/templates/fork",
					"summary": "Fork standard template to current user GitHub account/org",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_customization_providers",
					"method": "GET",
					"path": "/api/templates/customization-providers",
					"summary": "List installed code-edit providers for template customization",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_customization_ai_providers",
					"method": "GET",
					"path": "/api/templates/customization-ai-providers",
					"summary": "List installed AI providers for template customization",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "customize_template_from_base",
					"method": "POST",
					"path": "/api/templates/custom-from-base",
					"summary": "Create custom template from base with agent UI customization",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "iterate_custom_template",
					"method": "POST",
					"path": "/api/templates/custom/:templateId/customize",
					"summary": "Re-run agent customization on existing custom template",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "sync_custom_template_from_base",
					"method": "POST",
					"path": "/api/templates/custom/:templateId/sync-base",
					"summary": "Sync custom template repository from built-in base",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_customization",
					"method": "GET",
					"path": "/api/templates/customizations/:customizationId",
					"summary": "Get template customization status and details",
					"kind": "read",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "CustomizationDetailCard"
				},
				{
					"toolName": "list_customizations_for_template",
					"method": "GET",
					"path": "/api/templates/:templateId/customizations",
					"summary": "List customization runs for a custom template",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "CustomizationList"
				},
				{
					"toolName": "refresh_templates",
					"method": "POST",
					"path": "/api/templates/refresh",
					"summary": "Refresh discovered templates catalog",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "check_screenshot_availability",
					"method": "GET",
					"path": "/api/screenshot/check-availability",
					"summary": "Check if screenshot provider is configured and available",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "ScreenshotAvailabilityCard"
				},
				{
					"toolName": "capture_screenshot",
					"method": "POST",
					"path": "/api/screenshot/capture",
					"summary": "Capture screenshot of URL with customizable viewport and options",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "get_screenshot_url",
					"method": "POST",
					"path": "/api/screenshot/get-url",
					"summary": "Get cached screenshot URL without capturing new image",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "check_search_availability",
					"method": "GET",
					"path": "/api/search/check-availability",
					"summary": "Check if search provider is enabled and fully configured",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SearchAvailabilityCard"
				},
				{
					"toolName": "search_web",
					"method": "POST",
					"path": "/api/search",
					"summary": "Search the web using configured search provider",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "SearchResultsList"
				},
				{
					"toolName": "check_agent_memory_availability",
					"method": "GET",
					"path": "/api/agent-memory/check-availability",
					"summary": "Check if agent-memory provider is registered and loaded",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "AgentMemoryAvailabilityCard"
				},
				{
					"toolName": "open_memory_session",
					"method": "POST",
					"path": "/api/agent-memory/sessions",
					"summary": "Open a scoped memory session for storing observations",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "close_memory_session",
					"method": "POST",
					"path": "/api/agent-memory/sessions/:sessionId/close",
					"summary": "Close an open memory session",
					"kind": "action",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "list_memory_sessions",
					"method": "GET",
					"path": "/api/agent-memory/sessions",
					"summary": "List recent memory sessions with metadata",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemorySessionsList"
				},
				{
					"toolName": "save_memory",
					"method": "POST",
					"path": "/api/agent-memory/save",
					"summary": "Persist a memory observation with tags and metadata",
					"kind": "create",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "search_memory",
					"method": "POST",
					"path": "/api/agent-memory/search",
					"summary": "Search persisted memories by query and metadata",
					"kind": "read",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": "MemorySearchResults"
				},
				{
					"toolName": "build_memory_context",
					"method": "POST",
					"path": "/api/agent-memory/context",
					"summary": "Build context payload from memories for prompt injection",
					"kind": "action",
					"singleEntity": false,
					"includeInChat": true,
					"requiresConfirmation": false,
					"canvasComponent": ""
				},
				{
					"toolName": "delete_memory_entry",
					"method": "DELETE",
					"path": "/api/agent-memory/entries/:entryId",
					"summary": "Forget a single memory record",
					"kind": "destructive",
					"singleEntity": true,
					"includeInChat": true,
					"requiresConfirmation": true,
					"canvasComponent": ""
				}
			],
			"counts": {
				"total": 43,
				"chatIncluded": 43,
				"destructive": 3,
				"excluded": 1
			},
			"canvasComponents": [
				{
					"name": "ActivityLogTable",
					"purpose": "Display paginated, filterable activity log with search, date range, status filters",
					"viz": "table",
					"dataSource": "list_activities"
				},
				{
					"name": "ActivityBadge",
					"purpose": "Show count of in-progress operations in sidebar",
					"viz": "metric",
					"dataSource": "get_running_count"
				},
				{
					"name": "ActivitySummaryCard",
					"purpose": "Display activity counts grouped by status (completed, failed, in_progress, etc)",
					"viz": "stat",
					"dataSource": "get_activity_summary"
				},
				{
					"name": "ActivityDetailCard",
					"purpose": "Show full activity details including live logs and metadata",
					"viz": "detail",
					"dataSource": "get_activity"
				},
				{
					"name": "WebhookSubscriptionList",
					"purpose": "List active webhook subscriptions with status, URL, and actions",
					"viz": "table",
					"dataSource": "list_webhooks"
				},
				{
					"name": "WebhookDeliveriesList",
					"purpose": "Display webhook delivery history with status, timestamps, and redeliver actions",
					"viz": "table",
					"dataSource": "list_webhook_deliveries"
				},
				{
					"name": "TemplateList",
					"purpose": "Display available templates filtered by kind with default indicator",
					"viz": "table",
					"dataSource": "list_templates"
				},
				{
					"name": "CustomizationDetailCard",
					"purpose": "Show customization run status, branch, commit, and error details",
					"viz": "detail",
					"dataSource": "get_customization"
				},
				{
					"name": "CustomizationList",
					"purpose": "List all customization runs for a template with status timeline",
					"viz": "table",
					"dataSource": "list_customizations_for_template"
				},
				{
					"name": "ScreenshotAvailabilityCard",
					"purpose": "Show screenshot provider configuration status and active provider",
					"viz": "stat",
					"dataSource": "check_screenshot_availability"
				},
				{
					"name": "SearchAvailabilityCard",
					"purpose": "Display search provider availability and configuration status",
					"viz": "stat",
					"dataSource": "check_search_availability"
				},
				{
					"name": "SearchResultsList",
					"purpose": "Show web search results with snippets, links, and source metadata",
					"viz": "table",
					"dataSource": "search_web"
				},
				{
					"name": "AgentMemoryAvailabilityCard",
					"purpose": "Show agent-memory provider availability and active provider info",
					"viz": "stat",
					"dataSource": "check_agent_memory_availability"
				},
				{
					"name": "MemorySessionsList",
					"purpose": "List memory sessions with metadata and creation times",
					"viz": "table",
					"dataSource": "list_memory_sessions"
				},
				{
					"name": "MemorySearchResults",
					"purpose": "Display memory search results with tags, metadata, and timestamps",
					"viz": "table",
					"dataSource": "search_memory"
				}
			],
			"reports": [
				{
					"name": "Activity By Status Distribution",
					"question": "What is the breakdown of activities by completion status (completed, failed, in_progress, etc)?",
					"viz": "pie"
				},
				{
					"name": "Activity Trends Over Time",
					"question": "How many activities were completed each day over the last 30 days, broken down by action type?",
					"viz": "timeseries"
				},
				{
					"name": "Activity By Type",
					"question": "Which activity types are most common in my activity log?",
					"viz": "bar"
				},
				{
					"name": "Webhook Delivery Success Rate",
					"question": "What percentage of webhook deliveries succeeded vs failed over the last 7 days?",
					"viz": "stat"
				},
				{
					"name": "Webhook Deliveries Per Subscription",
					"question": "How many deliveries have been sent to each webhook subscription?",
					"viz": "bar"
				},
				{
					"name": "Upload Volume by Type",
					"question": "How many images vs files have been uploaded, and what is the total storage used?",
					"viz": "donut"
				},
				{
					"name": "Template Customization Success",
					"question": "What is the success rate of template customization runs, and how long do they typically take?",
					"viz": "stat"
				},
				{
					"name": "Memory Sessions Activity",
					"question": "How many memory sessions are currently open, and how much memory content has been saved?",
					"viz": "stat"
				},
				{
					"name": "Search Queries Over Time",
					"question": "What search queries have been performed most frequently?",
					"viz": "timeseries"
				}
			]
		}
	],
	"synthesis": {
		"totals": {
			"endpoints": 432,
			"chatTools": 419,
			"destructive": 53,
			"canvasComponents": 118,
			"reports": 95
		},
		"canvasCatalog": [
			{
				"name": "WorksList",
				"kind": "table",
				"purpose": "Paginated list of works with search/filter (works-core, works-items-taxonomy WorkListTable).",
				"reuseExisting": "ItemsList-style data table already exists in dashboard"
			},
			{
				"name": "WorkDetailCard",
				"kind": "detail",
				"purpose": "Single work detail/settings panel with edit (works-core, works-items-taxonomy)."
			},
			{
				"name": "WorkStatsCard",
				"kind": "stat",
				"purpose": "Aggregated work metrics: total works, items, active websites."
			},
			{
				"name": "WorkConfigCard",
				"kind": "detail",
				"purpose": "Work configuration and settings panel."
			},
			{
				"name": "ItemsList",
				"kind": "table",
				"purpose": "List/manage work items with inline edit (works-core ItemsList, works-items-taxonomy ItemListTable).",
				"reuseExisting": "Existing dashboard ItemsList component"
			},
			{
				"name": "TaxonomyList",
				"kind": "list",
				"purpose": "Categories, tags, collections tree for a work (works-core TaxonomyList, works-items-taxonomy TaxonomyCard)."
			},
			{
				"name": "HistoryTimeline",
				"kind": "list",
				"purpose": "Timeline of generation/update history for a work."
			},
			{
				"name": "TemplatesList",
				"kind": "list",
				"purpose": "Available website templates (works-core TemplatesList; activity domain TemplateList)."
			},
			{
				"name": "RepositoriesList",
				"kind": "table",
				"purpose": "User/git repositories for import or linking (works-core RepositoriesList; website-deploy-git RepositoryListTable)."
			},
			{
				"name": "ComparisonsList",
				"kind": "table",
				"purpose": "Generated comparisons with status (works-core ComparisonsList; generation domain ComparisonListTable)."
			},
			{
				"name": "ComparisonDetailCard",
				"kind": "detail",
				"purpose": "Single comparison result with side-by-side analysis."
			},
			{
				"name": "GenerationProgressCard",
				"kind": "stat",
				"purpose": "Real-time progress for item/comparison/markdown generation."
			},
			{
				"name": "ScheduleDetailCard",
				"kind": "detail",
				"purpose": "Schedule config: cadence, enabled, billing mode, next/last run."
			},
			{
				"name": "DeploymentStatusCard",
				"kind": "stat",
				"purpose": "Deployment status/progress/metadata for a single deploy."
			},
			{
				"name": "DomainListTable",
				"kind": "table",
				"purpose": "Custom domains with verification status and DNS records."
			},
			{
				"name": "DeploymentHistoryTable",
				"kind": "table",
				"purpose": "Deployment history with branch/commit/timestamp/status and rollback."
			},
			{
				"name": "GitHubAppInstallationsList",
				"kind": "list",
				"purpose": "GitHub App installations with sync/onboard actions."
			},
			{
				"name": "WebsiteSettingsCard",
				"kind": "detail",
				"purpose": "Website config: template, domain settings, visibility."
			},
			{
				"name": "AgentListTable",
				"kind": "table",
				"purpose": "Agents filtered by scope/status/search.",
				"reuseExisting": "AgentCard exists for per-agent rendering"
			},
			{
				"name": "AgentDetailCard",
				"kind": "detail",
				"purpose": "Full agent profile, model, status, targets, heartbeat.",
				"reuseExisting": "Existing AgentCard component"
			},
			{
				"name": "CodeEditor",
				"kind": "form",
				"purpose": "Edit agent definition files (SOUL.md/AGENTS.md/etc.) with concurrency-hash guard."
			},
			{
				"name": "AgentRunHistoryTable",
				"kind": "table",
				"purpose": "Agent run history with status/trigger/duration/error."
			},
			{
				"name": "SkillBindingTable",
				"kind": "table",
				"purpose": "Active skill bindings with priority/target (agents SkillBindingTable; skills SkillBindingsTable)."
			},
			{
				"name": "BudgetCard",
				"kind": "stat",
				"purpose": "Current-period spend rollup vs cap (agents BudgetCard; missions BudgetStatusCard).",
				"reuseExisting": "BudgetOverviewCard exists in dashboard"
			},
			{
				"name": "AttachmentList",
				"kind": "list",
				"purpose": "Entity attachments with remove actions (agents AttachmentList; tasks/missions AttachmentListCard)."
			},
			{
				"name": "TemplateGallery",
				"kind": "list",
				"purpose": "Browse agent/skill/task templates from catalog."
			},
			{
				"name": "MemorySessionTable",
				"kind": "table",
				"purpose": "Agent-memory sessions (agents MemorySessionTable; activity MemorySessionsList)."
			},
			{
				"name": "MemorySearchResults",
				"kind": "list",
				"purpose": "Memory search results with relevance/tags/metadata (agents + activity domains)."
			},
			{
				"name": "TaskListTable",
				"kind": "table",
				"purpose": "Filtered task list with status/priority/inline actions."
			},
			{
				"name": "TaskDetailCard",
				"kind": "detail",
				"purpose": "Full task: assignees/reviewers/approvers/blockers/relations/attachments."
			},
			{
				"name": "TaskChatThread",
				"kind": "list",
				"purpose": "Paginated task chat thread with mentions and edit."
			},
			{
				"name": "TaskSpendChart",
				"kind": "chart",
				"purpose": "Per-task spend rollup over time with date filters.",
				"reuseExisting": "SpendTrendCard recharts component"
			},
			{
				"name": "MissionListTable",
				"kind": "table",
				"purpose": "Missions with status/schedule and quick actions."
			},
			{
				"name": "MissionDetailCard",
				"kind": "detail",
				"purpose": "Full mission metadata, schedule, budget, lifecycle actions."
			},
			{
				"name": "WorkProposalListTable",
				"kind": "table",
				"purpose": "Work proposals (ideas) filtered by status."
			},
			{
				"name": "WorkProposalDetailCard",
				"kind": "detail",
				"purpose": "Proposal detail with build/retry/rebuild/accept actions."
			},
			{
				"name": "WorkAgentGoalListTable",
				"kind": "table",
				"purpose": "Recent work-agent goals with cancel action."
			},
			{
				"name": "WorkAgentGoalDetailCard",
				"kind": "detail",
				"purpose": "Work-agent goal detail with dry-run flag and cancel."
			},
			{
				"name": "WorkAgentRunCard",
				"kind": "detail",
				"purpose": "Active work-agent run status with logs link."
			},
			{
				"name": "WorkAgentRunLogsCard",
				"kind": "list",
				"purpose": "Scrollable work-agent run logs with levels/timestamps."
			},
			{
				"name": "PluginListCard",
				"kind": "table",
				"purpose": "Available plugins with install status and categories."
			},
			{
				"name": "PluginDetailCard",
				"kind": "detail",
				"purpose": "Single plugin details, settings, action controls."
			},
			{
				"name": "SettingsMenuCard",
				"kind": "list",
				"purpose": "Installed plugins grouped by category for settings nav."
			},
			{
				"name": "ModelListCard",
				"kind": "list",
				"purpose": "Available AI models from a provider plugin."
			},
			{
				"name": "ConnectionStatusCard",
				"kind": "detail",
				"purpose": "Plugin connection health and test results."
			},
			{
				"name": "WorkPluginListCard",
				"kind": "table",
				"purpose": "Plugins with work-specific config and active capabilities."
			},
			{
				"name": "WorkPluginDetailCard",
				"kind": "detail",
				"purpose": "Work-scoped plugin settings and capability assignment."
			},
			{
				"name": "ComposioToolkitListCard",
				"kind": "table",
				"purpose": "Available Composio toolkits and metadata."
			},
			{
				"name": "ComposioConnectedAccountListCard",
				"kind": "table",
				"purpose": "Composio connected accounts with status/actions."
			},
			{
				"name": "ComposioTriggerListCard",
				"kind": "table",
				"purpose": "Composio trigger subscriptions with delivery metrics."
			},
			{
				"name": "ComposioTriggerDetailCard",
				"kind": "detail",
				"purpose": "Single Composio trigger config and activity."
			},
			{
				"name": "DeviceAuthStatusCard",
				"kind": "detail",
				"purpose": "Plugin device-auth flow status and user code."
			},
			{
				"name": "SkillCatalogTable",
				"kind": "table",
				"purpose": "Catalog skills with filtering/search/tags."
			},
			{
				"name": "SkillListTable",
				"kind": "table",
				"purpose": "User's installed skills with owner type/actions."
			},
			{
				"name": "SkillDetailCard",
				"kind": "detail",
				"purpose": "Full skill metadata, instructions, frontmatter."
			},
			{
				"name": "SkillForm",
				"kind": "form",
				"purpose": "Create/update custom skill (title, description, instructions)."
			},
			{
				"name": "KbDocumentList",
				"kind": "table",
				"purpose": "KB documents filtered by class/status/tag/search (incl OrgKbDocumentList)."
			},
			{
				"name": "KbDocumentDetail",
				"kind": "detail",
				"purpose": "KB document body, metadata, lock status, version history (incl inherited docs)."
			},
			{
				"name": "KbDocumentForm",
				"kind": "form",
				"purpose": "Create/update KB document (incl OrgKbDocumentForm)."
			},
			{
				"name": "KbDocumentHistory",
				"kind": "list",
				"purpose": "Git commit timeline for a KB doc with restore."
			},
			{
				"name": "KbCitationList",
				"kind": "list",
				"purpose": "AI citations referencing a KB document."
			},
			{
				"name": "KbTagList",
				"kind": "list",
				"purpose": "Per-work KB tags management."
			},
			{
				"name": "KbTagForm",
				"kind": "form",
				"purpose": "Create/update a KB tag."
			},
			{
				"name": "KbUploadList",
				"kind": "table",
				"purpose": "KB file uploads with extraction status."
			},
			{
				"name": "KbUploadDetail",
				"kind": "detail",
				"purpose": "Upload metadata, preview, extraction status, retry."
			},
			{
				"name": "KbUploadForm",
				"kind": "form",
				"purpose": "File upload form with metadata (title/class/tags)."
			},
			{
				"name": "InheritableDocumentList",
				"kind": "list",
				"purpose": "Merged org + work-override inheritable KB documents."
			},
			{
				"name": "OrganizationListTable",
				"kind": "table",
				"purpose": "User organizations with slug/name/status/actions."
			},
			{
				"name": "OrganizationDetailCard",
				"kind": "detail",
				"purpose": "Single organization details, status, linked work."
			},
			{
				"name": "MemberListTable",
				"kind": "table",
				"purpose": "Work members with role/status/actions."
			},
			{
				"name": "MemberDetailCard",
				"kind": "detail",
				"purpose": "Single work member profile, role, permissions."
			},
			{
				"name": "InvitationListTable",
				"kind": "table",
				"purpose": "Pending work invitations with revoke action."
			},
			{
				"name": "InvitationDetailCard",
				"kind": "detail",
				"purpose": "Invitation claim URL, role, expiry for sharing."
			},
			{
				"name": "UserProfileCard",
				"kind": "detail",
				"purpose": "User profile with edit (name/avatar/bio/verification)."
			},
			{
				"name": "ApiKeyListTable",
				"kind": "table",
				"purpose": "API keys with creation/expiration and revoke."
			},
			{
				"name": "ApiKeyDetailCard",
				"kind": "detail",
				"purpose": "Newly created API key secret (once) with copy/download."
			},
			{
				"name": "ProviderConfigCard",
				"kind": "detail",
				"purpose": "Enabled OAuth providers and magic-link status."
			},
			{
				"name": "SyncStatusCard",
				"kind": "detail",
				"purpose": "GitHub account-sync status, repo, last push/pull."
			},
			{
				"name": "ExportProgressCard",
				"kind": "stat",
				"purpose": "Account export progress, file size, download link."
			},
			{
				"name": "OnboardingCatalogCard",
				"kind": "list",
				"purpose": "Onboarding wizard catalog: AI/Storage/Deploy cards + plugins."
			},
			{
				"name": "SubscriptionPlanCard",
				"kind": "detail",
				"purpose": "Current subscription plan, cadences, upgrade/downgrade."
			},
			{
				"name": "NotificationsList",
				"kind": "table",
				"purpose": "Notifications with category/read-status/search filter."
			},
			{
				"name": "NotificationUnreadBadge",
				"kind": "stat",
				"purpose": "Unread notification count badge for nav/header."
			},
			{
				"name": "PersistentNotificationsBanner",
				"kind": "other",
				"purpose": "Prominent banner for critical persistent notifications."
			},
			{
				"name": "EventTypesList",
				"kind": "table",
				"purpose": "Notification event types with subscription status."
			},
			{
				"name": "NotificationPreferencesPanel",
				"kind": "detail",
				"purpose": "Edit notification prefs: quiet hours, mutes, per-event channels."
			},
			{
				"name": "NotificationChannelsList",
				"kind": "table",
				"purpose": "Notification channels with edit/delete/test actions."
			},
			{
				"name": "NotificationChannelForm",
				"kind": "form",
				"purpose": "Create/edit notification channel with type-specific fields."
			},
			{
				"name": "BudgetListTable",
				"kind": "table",
				"purpose": "Work budgets: scope/plugin/cap/overage with edit/delete."
			},
			{
				"name": "BudgetDetailCard",
				"kind": "form",
				"purpose": "Create/edit single budget (cap, overage, currency)."
			},
			{
				"name": "UsageSummaryCard",
				"kind": "stat",
				"purpose": "Current-period usage: total spend, per-plugin breakdown, cap gauge.",
				"reuseExisting": "BudgetOverviewCard exists in dashboard"
			},
			{
				"name": "UsageTrendChart",
				"kind": "chart",
				"purpose": "Daily spend buckets across billing period.",
				"reuseExisting": "SpendTrendCard recharts component"
			},
			{
				"name": "AccountWideBudgetCard",
				"kind": "stat",
				"purpose": "Current-month total spend across account + cap gauge."
			},
			{
				"name": "AdminUsageTable",
				"kind": "table",
				"purpose": "Admin-only per-(user,work) spend rows, filterable by period."
			},
			{
				"name": "EmailAddressListTable",
				"kind": "table",
				"purpose": "Tenant email addresses with direction/verification/default-reply."
			},
			{
				"name": "EmailAddressDetailCard",
				"kind": "detail",
				"purpose": "Single email address provider settings, verification, disabled toggle."
			},
			{
				"name": "EmailMessageListTable",
				"kind": "table",
				"purpose": "Paginated email messages per agent with status/timestamps."
			},
			{
				"name": "EmailMessageDetailCard",
				"kind": "detail",
				"purpose": "Full email message: headers, body, delivery events."
			},
			{
				"name": "EmailAddressSetupFlow",
				"kind": "form",
				"purpose": "Guided email address registration + verification wizard."
			},
			{
				"name": "ActivityLogTable",
				"kind": "table",
				"purpose": "Paginated filterable activity log with search/date/status.",
				"reuseExisting": "ActivityTable exists in dashboard"
			},
			{
				"name": "ActivityBadge",
				"kind": "stat",
				"purpose": "Count of in-progress operations for sidebar."
			},
			{
				"name": "ActivitySummaryCard",
				"kind": "stat",
				"purpose": "Activity counts grouped by status."
			},
			{
				"name": "ActivityDetailCard",
				"kind": "detail",
				"purpose": "Full activity detail with live logs and metadata."
			},
			{
				"name": "WebhookSubscriptionList",
				"kind": "table",
				"purpose": "Active webhook subscriptions with status/URL/actions."
			},
			{
				"name": "WebhookDeliveriesList",
				"kind": "table",
				"purpose": "Webhook delivery history with status and redeliver."
			},
			{
				"name": "TemplateList",
				"kind": "table",
				"purpose": "Templates by kind with default indicator (shared with TemplatesList)."
			},
			{
				"name": "CustomizationDetailCard",
				"kind": "detail",
				"purpose": "Template customization run status/branch/commit/error."
			},
			{
				"name": "CustomizationList",
				"kind": "table",
				"purpose": "Customization runs for a template with status timeline."
			},
			{
				"name": "ScreenshotAvailabilityCard",
				"kind": "stat",
				"purpose": "Screenshot provider configuration status."
			},
			{
				"name": "SearchAvailabilityCard",
				"kind": "stat",
				"purpose": "Web-search provider availability status."
			},
			{
				"name": "SearchResultsList",
				"kind": "list",
				"purpose": "Web search results with snippets/links/source metadata."
			},
			{
				"name": "AgentMemoryAvailabilityCard",
				"kind": "stat",
				"purpose": "Agent-memory provider availability status."
			},
			{
				"name": "ReportChart",
				"kind": "chart",
				"purpose": "Generic recharts renderer for the 95 catalogued reports (line/bar/pie/donut/area/gauge/stacked/timeseries).",
				"reuseExisting": "recharts SpendTrendCard chart primitives"
			}
		],
		"crossCuttingTools": [
			{
				"toolName": "open_canvas",
				"purpose": "Open/focus the side canvas panel and target a slot for subsequent renders within a chat turn."
			},
			{
				"toolName": "render_table",
				"purpose": "Render any list/table canvasComponent (works, items, agents, tasks, members, deliveries) from a tool-result dataset with columns/sort/filter/pagination."
			},
			{
				"toolName": "render_chart",
				"purpose": "Render a recharts visualization (line/bar/pie/donut/area/gauge/stacked) for stat and report outputs."
			},
			{
				"toolName": "render_detail",
				"purpose": "Render a detail/card panel for a single entity (WorkDetailCard, AgentDetailCard, TaskDetailCard, etc.)."
			},
			{
				"toolName": "render_form",
				"purpose": "Render an editable/create form panel (SkillForm, KbDocumentForm, BudgetDetailCard, NotificationChannelForm) that submits via the matching create/update tool."
			},
			{
				"toolName": "show_component",
				"purpose": "Embed an existing dashboard component (ActivityTable, BudgetOverviewCard, AgentCard, SpendTrendCard, ItemsList) into the canvas by name + props."
			},
			{
				"toolName": "run_report",
				"purpose": "Execute one of the 95 catalogued reports: fetch source data, aggregate, and render via render_chart/render_table into the canvas."
			},
			{
				"toolName": "confirm_action",
				"purpose": "Confirmation gate primitive: present a structured confirm card for any destructive/requiresConfirmation tool and block execution until the user approves."
			}
		],
		"buildWaves": [
			{
				"wave": 1,
				"title": "Foundation: tool generator, confirmation gate, no-bulk guard, canvas shell",
				"scope": "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,
				"title": "Canvas renderers + existing-component embedding",
				"scope": "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,
				"title": "Core works lifecycle tool batch",
				"scope": "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,
				"title": "Agents, tasks, missions/ideas tool batch",
				"scope": "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,
				"title": "Skills, knowledge base, plugins/integrations tool batch",
				"scope": "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,
				"title": "Deploy/git, orgs/members, auth/account, notifications, email tool batch",
				"scope": "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,
				"title": "Reports engine + remaining utility surfaces",
				"scope": "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"]
			}
		],
		"risks": [
			"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."
		]
	}
}
