{"version":"2.0","entrypoint":"agentstack.execute","total_actions":466,"domains":{"commands":[{"action":"commands.execute","safe_action":"commands_execute","summary":"Execute a single Protein Command via universal API.","required_cap":"logic_write|mcp.execute"},{"action":"commands.execute_batch","safe_action":"commands_execute_batch","summary":"Execute multiple Protein Commands in batch.","required_cap":"logic_write|mcp.execute"}],"projects":[{"action":"projects.get_projects","safe_action":"projects_get_projects","summary":"Get list of projects for the current user."},{"action":"projects.get_project","safe_action":"projects_get_project","summary":"Get detailed information about a specific project."},{"action":"projects.create_project","safe_action":"projects_create_project","summary":"Create a new project."},{"action":"projects.create_project_anonymous","safe_action":"projects_create_project_anonymous","summary":"Create a new anonymous project (for AI agents)."},{"action":"projects.update_project","safe_action":"projects_update_project","summary":"Update an existing project.","required_cap":"project_admin"},{"action":"projects.delete_project","safe_action":"projects_delete_project","summary":"Delete a project (PSDP).","required_cap":"project_admin"},{"action":"projects.get_deletion_inventory","safe_action":"projects_get_deletion_inventory","summary":"Pre-delete inventory: blockers, warnings, and execution_token for safe delete."},{"action":"projects.schedule_deletion","safe_action":"projects_schedule_deletion","summary":"Schedule project deletion after inventory + execution token.","required_cap":"project_admin"},{"action":"projects.execute_deletion","safe_action":"projects_execute_deletion","summary":"Execute scheduled or immediate deletion with execution token.","required_cap":"project_admin"},{"action":"projects.get_stats","safe_action":"projects_get_stats","summary":"Get project statistics."},{"action":"projects.get_users","safe_action":"projects_get_users","summary":"Get list of users in a project."},{"action":"projects.add_user","safe_action":"projects_add_user","summary":"Add a user to a project (requires Professional subscription or ecosystem context and manage_users/owner).","required_cap":"project_admin"},{"action":"projects.update_user_role","safe_action":"projects_update_user_role","summary":"Update a user's role in a project (requires manage_users or owner; cannot assign owner via this tool).","required_cap":"project_admin"},{"action":"projects.remove_user","safe_action":"projects_remove_user","summary":"Remove a user from a project (requires Professional subscription or ecosystem context).","required_cap":"project_admin"}],"discovery":[{"action":"discovery.get_platform_surfaces","safe_action":"discovery_get_platform_surfaces","summary":"List canonical platform routes from generated platform-surface-audit.json."},{"action":"discovery.list","safe_action":"discovery_list","summary":"List all MCP actions (alias for GET /mcp/actions catalog)."}],"guidance":[{"action":"guidance.list_capability_tasks","safe_action":"guidance_list_capability_tasks","summary":"List Platform Task Capability (PTC) atoms from shared/fixtures/capability_tasks_v1.json. Use before Compass playbooks with kind=capability or agentstack.execute task hints."},{"action":"guidance.match_playbook","safe_action":"guidance_match_playbook","summary":"Match natural-language goal text to a Platform Compass playbook id using bundled intent patterns + RU/EN synonyms. Returns verifyKinds for bot/commerce paths."},{"action":"guidance.path_status","safe_action":"guidance_path_status","summary":"Snapshot Compass verify gates for a project: botExists, botLive, botChannelAttached, hostedVitrinePublished. Use after playbook steps or before go-live checks."},{"action":"guidance.funnel_stats","safe_action":"guidance_funnel_stats","summary":"O(1) in-process Compass funnel counters for messaging-channel-bot: path_started, per-task completions, channel mix, dual_channel_attach. No database scan."},{"action":"guidance.start_session","safe_action":"guidance_start_session","summary":"Start a Platform Compass guidance session on the server (8DNA data.guidance). Use with messaging-channel-bot for cross-device resume."}],"rbac":[{"action":"rbac.get_roles","safe_action":"rbac_get_roles","summary":"Get list of roles for a project (system + custom). Returns id, name, permissions_bitmap, permissions, is_system."},{"action":"rbac.assign_role","safe_action":"rbac_assign_role","summary":"Assign a role to a user in a project. Requires manage_users or owner. Cannot assign owner via this tool."},{"action":"rbac.revoke_role","safe_action":"rbac_revoke_role","summary":"Revoke a role from a user in a project. User will get default viewer role. Requires manage_users or owner. Cannot revoke owner."},{"action":"rbac.check_permission","safe_action":"rbac_check_permission","summary":"Check if a user has a permission in a project. If user_id is omitted, checks current user."}],"processors":[{"action":"processors.list","safe_action":"processors_list","summary":"List all available processors with their metadata."},{"action":"processors.get_metadata","safe_action":"processors_get_metadata","summary":"Get detailed metadata for a specific processor."},{"action":"processors.execute","safe_action":"processors_execute","summary":"Execute a processor directly.","required_cap":"logic_write"}],"logic":[{"action":"logic.create","safe_action":"logic_create","summary":"Create new Logic Engine rule for project.","required_cap":"logic_write"},{"action":"logic.update","safe_action":"logic_update","summary":"Update existing Logic Engine rule.","required_cap":"logic_write"},{"action":"logic.delete","safe_action":"logic_delete","summary":"Delete a Logic Engine rule.","required_cap":"logic_write"},{"action":"logic.get","safe_action":"logic_get","summary":"Get detailed information about a Logic Engine rule."},{"action":"logic.list","safe_action":"logic_list","summary":"List all Logic Engine rules for project."},{"action":"logic.execute","safe_action":"logic_execute","summary":"Execute a Logic Engine rule immediately.","required_cap":"logic_write"},{"action":"logic.get_processors","safe_action":"logic_get_processors","summary":"Get list of available processors (same as processors.list but in logic context)."},{"action":"logic.get_commands","safe_action":"logic_get_commands","summary":"Get list of available commands for triggers."},{"action":"logic.flush_batch","safe_action":"logic_flush_batch","summary":"Force flush logic batch for a project (saves all accumulated rules immediately)","required_cap":"logic_write"},{"action":"logic.dry_run","safe_action":"logic_dry_run","summary":"Simulate a logic rule execution without side effects (F2.5).","required_cap":"logic_write"},{"action":"logic.list_versions","safe_action":"logic_list_versions","summary":"List historical snapshots stored on a rule (F2.9)."},{"action":"logic.diff_versions","safe_action":"logic_diff_versions","summary":"Diff two rule snapshots (F2.9)."},{"action":"logic.restore_version","safe_action":"logic_restore_version","summary":"Roll a rule back to a prior snapshot (F2.9).","required_cap":"logic_write"},{"action":"logic.export_json","safe_action":"logic_export_json","summary":"Export a logic rule as JSON for backup / cross-project copy."},{"action":"logic.import_json","safe_action":"logic_import_json","summary":"Import a logic rule from JSON (creates a new rule).","required_cap":"logic_write"},{"action":"logic.install_blueprint","safe_action":"logic_install_blueprint","summary":"Install a catalog blueprint into the project (alias of attach_template with field_values).","required_cap":"logic_write"},{"action":"logic.attach_template","safe_action":"logic_attach_template","summary":"Install a template from the built-in catalog into the current project.","required_cap":"logic_write"},{"action":"logic.signals_catalog","safe_action":"logic_signals_catalog","summary":"List signal channels the logic engine can subscribe to."},{"action":"logic.mcp_actions_catalog","safe_action":"logic_mcp_actions_catalog","summary":"List MCP actions addressable from logic rules."}],"auth":[{"action":"auth.login","safe_action":"auth_login","summary":"Login to the system."},{"action":"auth.register","safe_action":"auth_register","summary":"Register a new user."},{"action":"auth.get_profile","safe_action":"auth_get_profile","summary":"Get user profile information."},{"action":"auth.update_profile","safe_action":"auth_update_profile","summary":"Update user profile."}],"payments":[{"action":"payments.create","safe_action":"payments_create","summary":"Create a new payment transaction.","required_cap":"payments"},{"action":"payments.get","safe_action":"payments_get","summary":"Get detailed payment information by payment ID.","required_cap":"payments"},{"action":"payments.list_transactions","safe_action":"payments_list_transactions","summary":"List all payment transactions for a project.","required_cap":"payments"},{"action":"payments.get_balance","safe_action":"payments_get_balance","summary":"Get current wallet balance for a project.","required_cap":"payments"},{"action":"payments.refund","safe_action":"payments_refund","summary":"Refund a completed payment.","required_cap":"payments"}],"wallets":[{"action":"wallets.list","safe_action":"wallets_list","summary":"List wallets for a project (and optionally user).","required_cap":"payments"},{"action":"wallets.create","safe_action":"wallets_create","summary":"Create a wallet for a project or user.","required_cap":"payments"},{"action":"wallets.deposit","safe_action":"wallets_deposit","summary":"Deposit funds to a wallet.","required_cap":"payments"},{"action":"wallets.transfer","safe_action":"wallets_transfer","summary":"Transfer funds between wallets (same project).","required_cap":"payments"}],"scheduler":[{"action":"scheduler.create_task","safe_action":"scheduler_create_task","summary":"Create a new scheduled task for automated execution.","required_cap":"scheduler"},{"action":"scheduler.get_task","safe_action":"scheduler_get_task","summary":"Get detailed information about a scheduled task by ID.","required_cap":"scheduler"},{"action":"scheduler.update_task","safe_action":"scheduler_update_task","summary":"Update an existing scheduler task (requires write permission).","required_cap":"scheduler"},{"action":"scheduler.list_tasks","safe_action":"scheduler_list_tasks","summary":"List all scheduled tasks for a project.","required_cap":"scheduler"},{"action":"scheduler.execute_task","safe_action":"scheduler_execute_task","summary":"Execute a scheduled task immediately, bypassing the cron schedule.","required_cap":"scheduler"},{"action":"scheduler.get_pool_tasks","safe_action":"scheduler_get_pool_tasks","summary":"Get all tasks from the execution pool (in-memory task queue).","required_cap":"scheduler"},{"action":"scheduler.get_pool_task_details","safe_action":"scheduler_get_pool_task_details","summary":"Get detailed information about a specific task from the execution pool.","required_cap":"scheduler"},{"action":"scheduler.delete_pool_task","safe_action":"scheduler_delete_pool_task","summary":"Remove a specific task from the execution pool (does not delete from database).","required_cap":"scheduler"},{"action":"scheduler.clear_pool_tasks","safe_action":"scheduler_clear_pool_tasks","summary":"Clear all tasks from the execution pool (does not delete from database).","required_cap":"scheduler"},{"action":"scheduler.refresh_pool","safe_action":"scheduler_refresh_pool","summary":"Force a refresh of the scheduler pool from the database.","required_cap":"scheduler"},{"action":"scheduler.get_all_db_tasks","safe_action":"scheduler_get_all_db_tasks","summary":"Get all scheduler and standalone tasks from the database (heavy operation).","required_cap":"scheduler"},{"action":"scheduler.cancel_task","safe_action":"scheduler_cancel_task","summary":"Cancel/remove a scheduler task (removes from pool and disables in database).","required_cap":"scheduler"}],"apikeys":[{"action":"apikeys.create","safe_action":"apikeys_create","summary":"Create a new API key for project access.","required_cap":"api_keys"},{"action":"apikeys.list","safe_action":"apikeys_list","summary":"List all API keys for a project.","required_cap":"api_keys"},{"action":"apikeys.delete","safe_action":"apikeys_delete","summary":"Delete an API key permanently.","required_cap":"api_keys"}],"analytics":[{"action":"analytics.get_usage","safe_action":"analytics_get_usage","summary":"Get project usage statistics and activity data."},{"action":"analytics.get_metrics","safe_action":"analytics_get_metrics","summary":"Get project performance metrics and analytics data."}],"system":[{"action":"system.ping","safe_action":"system_ping","summary":"Health check tool — always succeeds, no authentication required."}],"finance":[{"action":"finance.portfolio","safe_action":"finance_portfolio","summary":"User finance portfolio aggregate (three rails + JSON wallets).","required_cap":"payments|agentcoin"},{"action":"finance.activity","safe_action":"finance_activity","summary":"Unified wallet activity feed.","required_cap":"payments|agentcoin"},{"action":"finance.project.portfolio","safe_action":"finance_project_portfolio","summary":"Project business portfolio (operating + treasury + AGNT).","required_cap":"payments|agentcoin"},{"action":"finance.dashboard_bundle","safe_action":"finance_dashboard_bundle","summary":"Finance hub landing aggregate (portfolio + billing + activity preview).","required_cap":"payments|agentcoin"},{"action":"finance.project.fund","safe_action":"finance_project_fund","summary":"Fund a project via ecosystem USD transfer.","required_cap":"payments|project_admin"},{"action":"finance.project.contribute","safe_action":"finance_project_contribute","summary":"Member contribution: USD only from personal ecosystem wallet (project_id=1) to project treasury. Not for custom/game currencies.","required_cap":"payments|project_admin"},{"action":"finance.project.contributions.list","safe_action":"finance_project_contributions_list","summary":"List member contributions for a project (FAP-masked).","required_cap":"payments|agentcoin"}],"commerce":[{"action":"commerce.reconcile","safe_action":"commerce_reconcile","summary":"Ops: find marketplace deals stuck after confirm without transfer. Example: {\"dry_run\": true, \"project_id\": 1}"},{"action":"commerce.storefront.seed_plan","safe_action":"commerce_storefront_seed_plan","summary":"Dry-run Storefront Studio seed — compose asset/listing drafts and guidance hints. Mirrors POST /api/commerce/storefront/seed/plan."},{"action":"commerce.storefront.seed_apply","safe_action":"commerce_storefront_seed_apply","summary":"Apply a Storefront Studio seed plan (asset upsert → listing → index). Mirrors POST /api/commerce/storefront/seed/apply."},{"action":"commerce.storefront.seed_undo","safe_action":"commerce_storefront_seed_undo","summary":"Undo a prior seed run — cancel listings and remove from storefront index. Mirrors POST /api/commerce/storefront/seed/undo."},{"action":"commerce.storefront.seed_ingest","safe_action":"commerce_storefront_seed_ingest","summary":"Parse bulk source (csv/json/ai_batch/magic/clone) into ProductSpec rows. Mirrors POST /api/commerce/storefront/seed/ingest."},{"action":"commerce.storefront.one_click_fill","safe_action":"commerce_storefront_one_click_fill","summary":"Create listings for eligible catalog assets without active listings. Mirrors POST /api/commerce/storefront/seed/one-click-fill."},{"action":"commerce.storefront.hosted_manifest","safe_action":"commerce_storefront_hosted_manifest","summary":"Read hosted vitrine manifest (bucket, hosted_dirty, merchandising). Mirrors GET /api/commerce/storefront/hosted/manifest."},{"action":"commerce.storefront.hosted_publish","safe_action":"commerce_storefront_hosted_publish","summary":"Publish hosted vitrine static bundle + tenant boot JSON when dist is on server. Mirrors POST /api/commerce/storefront/hosted/publish."},{"action":"commerce.ai.generate_products","safe_action":"commerce_ai_generate_products","summary":"Dry-run AI product generation — returns wizard answer dicts only. Mirrors POST /api/commerce/ai/generate-products."},{"action":"commerce.ai.magic_fill","safe_action":"commerce_ai_magic_fill","summary":"Parse text into product wizard answers. Mirrors POST /api/commerce/ai/magic-fill."},{"action":"commerce.sell.activate","safe_action":"commerce_sell_activate","summary":"One-shot seller activation: earnings wallet, product seed, public policy, storefront index upsert, optional hosted vitrine. Mirrors POST /api/commerce/sell/activate."},{"action":"commerce.coupon.list","safe_action":"commerce_coupon_list","summary":"List project-scoped promo codes from 8DNA commerce.coupon_registry. Mirrors GET /api/commerce/merchant/coupons."},{"action":"commerce.coupon.create","safe_action":"commerce_coupon_create","summary":"Create a shop promo code (percent or fixed USDT off). Optional listing_uuids scopes the code to specific listings. Mirrors POST /api/commerce/merchant/coupons."},{"action":"commerce.coupon.update","safe_action":"commerce_coupon_update","summary":"Update a project promo code. Mirrors PUT /api/commerce/merchant/coupons/{code}."},{"action":"commerce.coupon.delete","safe_action":"commerce_coupon_delete","summary":"Delete a project promo code. Mirrors DELETE /api/commerce/merchant/coupons/{code}."},{"action":"commerce.refund.status","safe_action":"commerce_refund_status","summary":"Poll refund request + compensation for an order. Mirrors GET /api/commerce/orders/{order_id}/refund-request."},{"action":"commerce.refund.manual_list","safe_action":"commerce_refund_manual_list","summary":"Ecosystem admin: list refund_requested orders awaiting manual compensation for a buyer commerce slice. Mirrors GET /api/admin/commerce/manual-refunds."},{"action":"commerce.refund.manual_complete","safe_action":"commerce_refund_manual_complete","summary":"Ecosystem admin: mark fiat/manual refund compensated — revoke entitlements, set order refunded. Mirrors POST /api/admin/commerce/manual-refunds/complete."}],"agentnet":[{"action":"agentnet.balance","safe_action":"agentnet_balance","summary":"Read AgentCoin (AGC) balance from the L0 PostgreSQL ledger for a project slice."},{"action":"agentnet.batch_proof","safe_action":"agentnet_batch_proof","summary":"Merkle inclusion paths for a posted AgentCoin batch (read-only)."},{"action":"agentnet.checkpoint.covering_batch","safe_action":"agentnet_checkpoint_covering_batch","summary":"Resolve the newest checkpoint epoch that covers a ledger ``batch_id`` (read-only)."},{"action":"agentnet.checkpoint.list_recent","safe_action":"agentnet_checkpoint_list_recent","summary":"List recent AgentCoin checkpoint epochs for a project (newest first; no ``batch_roots_json``)."},{"action":"agentnet.checkpoint.by_epoch","safe_action":"agentnet_checkpoint_by_epoch","summary":"Fetch one checkpoint row by epoch (includes ``batch_roots_json`` when stored)."},{"action":"agentnet.post_batch","safe_action":"agentnet_post_batch","summary":"Post a double-entry AgentCoin batch (idempotent per ``idempotency_key``)."},{"action":"agentnet.compute_credits.quote","safe_action":"agentnet_compute_credits_quote","summary":"Deterministic quote for AGC cost of compute credits (demo v1 rate table)."},{"action":"agentnet.compute_credits.purchase","safe_action":"agentnet_compute_credits_purchase","summary":"Purchase compute credits: AGC user→treasury batch + idempotent ``builder_energy`` top-up."},{"action":"agentnet.receipt.verify","safe_action":"agentnet_receipt_verify","summary":"Verify an AgentCoin receipt JSON (canonical hash + optional Merkle proof + optional Ed25519)."},{"action":"agentnet.evidence_receipt","safe_action":"agentnet_evidence_receipt","summary":"Build a self-contained evidence receipt (batch proof + checkpoint prefix witness)."},{"action":"agentnet.bridge.intents","safe_action":"agentnet_bridge_intents","summary":"List bridge settlement intents for a project slice."},{"action":"agentnet.bridge.events","safe_action":"agentnet_bridge_events","summary":"List normalized bridge chain events (relay idempotency log)."},{"action":"agentnet.bridge.supply_snapshot","safe_action":"agentnet_bridge_supply_snapshot","summary":"L0 AGC balance sum + in-flight bridge intents + optional EVM ``totalSupply``."},{"action":"agentnet.vault.nav","safe_action":"agentnet_vault_nav","summary":"ERC-4626 vault NAV (totalAssets, totalSupply). REST: GET /api/agentnet/{project_id}/vault/nav"},{"action":"agentnet.vault.deposit_confirm","safe_action":"agentnet_vault_deposit_confirm","summary":"Credit L0 agUSD shares after ERC-4626 deposit (operator/indexer)."},{"action":"agentnet.proof_to_task","safe_action":"agentnet_proof_to_task","summary":"Build ERC-8004 proof-to-task bundle; optional on-chain validation submit."},{"action":"agentnet.chain.finality_probe","safe_action":"agentnet_chain_finality_probe","summary":"Read-only finality label probe (Solana adapter stub + Base chain id)."},{"action":"agentnet.bridge.create_intent","safe_action":"agentnet_bridge_create_intent","summary":"Create bridge intent (in|out). REST: POST /api/agentnet/{project_id}/bridge/intents"},{"action":"agentnet.funding.offer","safe_action":"agentnet_funding_offer","summary":"Get funding offer after R1 USDT payment (opt-in R2 vault). REST: GET funding/offer"},{"action":"agentnet.funding.start_vault_deposit","safe_action":"agentnet_funding_start_vault_deposit","summary":"Start opt-in vault deposit intent linked to payment."},{"action":"agentnet.genome.get","safe_action":"agentnet_genome_get","summary":"Read L0 genome lineage entry for an entity (ecosystem.genome_lineage)."},{"action":"agentnet.genome.verify","safe_action":"agentnet_genome_verify","summary":"Verify commit_hash matches canonical GenomeTag JSON."},{"action":"agentnet.admin.schema_status","safe_action":"agentnet_admin_schema_status","summary":"Substrate M+ schema snapshot (required / deprecated / packed_in_8dna tiers)."},{"action":"agentnet.admin.launch_readiness","safe_action":"agentnet_admin_launch_readiness","summary":"Grant Readiness Score (GRS v2), blockers, and submit_ready flag."},{"action":"agentnet.admin.grant_metrics","safe_action":"agentnet_admin_grant_metrics","summary":"Weekly grant metrics slice from ecosystem 8DNA (read-only)."},{"action":"agentnet.bnb.status","safe_action":"agentnet_bnb_status","summary":"BSC testnet rail status (RPC ping, registries)."},{"action":"agentnet.bnb.register_identity","safe_action":"agentnet_bnb_register_identity","summary":"Register Fleet agent on BSC ERC-8004 via BNBAgent SDK."},{"action":"agentnet.bnb.proof_bundle_for_run","safe_action":"agentnet_bnb_proof_bundle_for_run","summary":"L0 proof-to-task bundle for an agent run (read-only)."},{"action":"agentnet.bnb.apex_jobs_list","safe_action":"agentnet_bnb_apex_jobs_list","summary":"List agent runs with completed BNB APEX jobs (L0 events)."},{"action":"agentnet.arb.status","safe_action":"agentnet_arb_status","summary":"Arbitrum Sepolia rail status (RPC ping, registries)."},{"action":"agentnet.arb.proof_bundle_for_run","safe_action":"agentnet_arb_proof_bundle_for_run","summary":"Build ERC-8004 proof-to-task bundle for a Fleet run (Arbitrum narrative)."},{"action":"agentnet.solana.status","safe_action":"agentnet_solana_status","summary":"Solana devnet PTR attestation rail status."},{"action":"agentnet.solana.register_identity","safe_action":"agentnet_solana_register_identity","summary":"Register Fleet agent metadata on Solana attestation program (devnet)."},{"action":"agentnet.solana.proof_bundle_for_run","safe_action":"agentnet_solana_proof_bundle_for_run","summary":"Build proof-to-task v2 bundle for a Fleet run (Solana PTR)."},{"action":"agentnet.solana.submit_validation","safe_action":"agentnet_solana_submit_validation","summary":"Submit task validation to Solana attestation program (best-effort)."},{"action":"agentnet.ptr.list_rails","safe_action":"agentnet_ptr_list_rails","summary":"List enabled PTR rails (Base, BNB, Arb, Solana) with strategies."},{"action":"agentnet.solana.submit_intent","safe_action":"agentnet_solana_submit_intent","summary":"Submit Solana chain control intent (CCM) via gateway."},{"action":"agentnet.chain.rails","safe_action":"agentnet_chain_rails","summary":"List enabled chain control rails (CCM)."},{"action":"agentnet.chain.submit_intent","safe_action":"agentnet_chain_submit_intent","summary":"Submit a chain control intent (Fleet run by default)."},{"action":"agentnet.chain.intent_status","safe_action":"agentnet_chain_intent_status","summary":"Get chain intent status by intent_id."},{"action":"agentnet.testnet.list_profiles","safe_action":"agentnet_testnet_list_profiles","summary":"List AgentNet testnet chain profiles (lanes, faucet policy)."},{"action":"agentnet.testnet.run_scenario","safe_action":"agentnet_testnet_run_scenario","summary":"Run a registered testnet scenario (grant demo, bridge smoke, etc.)."},{"action":"agentnet.testnet.faucet_mint","safe_action":"agentnet_testnet_faucet_mint","summary":"Mint AGNT on L0 via testnet faucet (rate-limited)."}],"admin":[{"action":"admin.data.health","safe_action":"admin_data_health","summary":"Cheap counts for platform admin data plane (projects/users DNA slices)."},{"action":"admin.data.people","safe_action":"admin_data_people","summary":"Admin people bundle: projects (list shape) + users for a project."},{"action":"admin.data.dna_list","safe_action":"admin_data_dna_list","summary":"Paginated DNA list with unified_8dna_role filters for admin Data hub."}],"fundraising":[{"action":"fundraising.narrative.lint","safe_action":"fundraising_narrative_lint","summary":"Scan text for forbidden fundraising phrases from NARRATIVE_REGISTRY.yaml."},{"action":"fundraising.packet.compose","safe_action":"fundraising_packet_compose","summary":"List attachment paths for a grant program packet (registry + evidence)."}],"assets":[{"action":"assets.list_presets","safe_action":"assets_list_presets","summary":"List deterministic asset wizard presets for the project."},{"action":"assets.create","safe_action":"assets_create","summary":"Create a new asset for the project.","required_cap":"assets_write"},{"action":"assets.get","safe_action":"assets_get","summary":"Get asset details by ID."},{"action":"assets.list","safe_action":"assets_list","summary":"List all assets in the project."},{"action":"assets.update","safe_action":"assets_update","summary":"Update an existing asset.","required_cap":"assets_write"},{"action":"assets.delete","safe_action":"assets_delete","summary":"Delete an asset from the project.","required_cap":"assets_write"}],"data_access":[{"action":"data_access.set_policy","safe_action":"data_access_set_policy","summary":"Create or update the field-level access policy for a project resource.","required_cap":"data_access_admin"},{"action":"data_access.get_policy","safe_action":"data_access_get_policy","summary":"Retrieve the current field-level access policy for a project."},{"action":"data_access.check_field","safe_action":"data_access_check_field","summary":"Check whether a specific role can read/write a field in a resource."},{"action":"data_access.test_mask","safe_action":"data_access_test_mask","summary":"Preview what fields a given role can read/write in a resource."},{"action":"data_access.get_defaults_template","safe_action":"data_access_get_defaults_template","summary":"Read the global Field Access Policy template from ecosystem project DNA (`config.field_access_defaults`: default_access, globals, resources)."},{"action":"data_access.set_defaults_template","safe_action":"data_access_set_defaults_template","summary":"Write the global FAP template on ecosystem project (admin tooling).","required_cap":"data_access_admin"},{"action":"data_access.apply_defaults_template","safe_action":"data_access_apply_defaults_template","summary":"Copy missing `resources.<name>` entries from the global template into `target_project_id`'s field_access_policy. Does not overwrite existing keys. Cannot target ecosystem project id=1.","required_cap":"data_access_admin"},{"action":"data_access.get_triggers","safe_action":"data_access_get_triggers","summary":"Read FAP v1.2 ``field_triggers`` for a project (same JSON as ``field_access_policy.field_triggers``). Keyed by resource → pattern → list of trigger definitions. See FIELD_ACCESS_POLICY.md — Field Trig"},{"action":"data_access.set_triggers","safe_action":"data_access_set_triggers","summary":"Upsert ``field_triggers`` for one resource. **triggers** is a map ``field_pattern → [trigger_def, …]`` (patterns like ``status``, ``config.**``, ``*``).","required_cap":"data_access_admin"}],"ai_builder":[{"action":"ai_builder.manifest.get","safe_action":"ai_builder_manifest_get","summary":"Load Unified Application Manifest (UAM v1) for the current project."},{"action":"ai_builder.manifest.validate","safe_action":"ai_builder_manifest_validate","summary":"Validate a UAM v1 JSON object (structure + catalog + logic templates)."},{"action":"ai_builder.compose.preview","safe_action":"ai_builder_compose_preview","summary":"Deterministic compose preview: returns content_sha256 and file paths."}],"storage":[{"action":"storage.get_quota","safe_action":"storage_get_quota","summary":"Returns storage quota for the current user or project slice: used/limit bytes, tier_basis (project_owner vs fallback), owner_user_id. Pass project_id or rely on API key / session project. scope=user ("},{"action":"storage.get_project_usage_summary","safe_action":"storage_get_project_usage_summary","summary":"Owner/admin: total permanent/temp bytes across all members and project slice, plus project_pool_limit_bytes from the owner's subscription tier."},{"action":"storage.get_hub_summary","safe_action":"storage_get_hub_summary","summary":"Hub v4 aggregate: permanent/temp totals, hosting bytes, pool cap, sites count."},{"action":"storage.list_files","safe_action":"storage_list_files","summary":"Lists files in an ecosystem storage folder for the current user or project slice. Pass folder key (use '_' for root) or omit to list all folders (heavy). Set include_folders=1 to return folder_index f"},{"action":"storage.delete_file","safe_action":"storage_delete_file","summary":"Deletes a file from ecosystem storage (JSON registry + blob). Requires write access for user scope; owner/admin for project scope."}],"notifications":[{"action":"notifications.subscribe_push","safe_action":"notifications_subscribe_push","summary":"Returns VAPID status; browser must still call PushManager.subscribe."},{"action":"notifications.send_push","safe_action":"notifications_send_push","summary":"Enqueue OS web push for a user (self or admin)."},{"action":"notifications.send","safe_action":"notifications_send","summary":"Deprecated alias — use notifications.send_push or integrations webhooks."},{"action":"notifications.cancel_push","safe_action":"notifications_cancel_push","summary":"Cancel pending push items by correlation key prefix."},{"action":"notifications.list_prefs","safe_action":"notifications_list_prefs","summary":"Messenger + web push preference snapshot (minimal)."},{"action":"notifications.update_prefs","safe_action":"notifications_update_prefs","summary":"Patch messenger prefs (subset allowed by MessengerPrefsPatch)."},{"action":"notifications.register_category","safe_action":"notifications_register_category","summary":"Register a logical push category in user messenger prefs (persisted)."}],"web_push":[{"action":"web_push.get_health","safe_action":"web_push_get_health","summary":"Per-user Web Push health (same payload as GET /api/push/health): VAPID, canDeliver, subscription/outbox counts, process-local worker stats."}],"social":[{"action":"social.chat.index_get","safe_action":"social_chat_index_get","summary":"Get the current user's messenger sidebar index — list of channels with pinned/order metadata.","required_cap":"social_read"},{"action":"social.chat.index_put","safe_action":"social_chat_index_put","summary":"Merge chat index entries into the user's sidebar index (no If-Match; use social flows for removal).","required_cap":"social_read"},{"action":"social.chat.history","safe_action":"social_chat_history","summary":"Read chat history from a messenger channel (AI-accessible).","required_cap":"social_read"},{"action":"social.chat.post","safe_action":"social_chat_post","summary":"Send a chat message to a messenger channel as the AI agent (authenticated user).","required_cap":"social_read"},{"action":"social.chat.pin","safe_action":"social_chat_pin","summary":"Pin a message in a channel.","required_cap":"social_read"},{"action":"social.chat.unpin","safe_action":"social_chat_unpin","summary":"Unpin a message in a channel.","required_cap":"social_read"},{"action":"social.chat.message_edit","safe_action":"social_chat_message_edit","summary":"Edit own chat message (author only).","required_cap":"social_read"},{"action":"social.chat.message_delete","safe_action":"social_chat_message_delete","summary":"Delete a chat message (author or channel owner per server rules).","required_cap":"social_read"},{"action":"social.chat.reaction","safe_action":"social_chat_reaction","summary":"Apply one server-authoritative reaction on a message (immutable cell per user).","required_cap":"social_read"},{"action":"social.chat.read_set","safe_action":"social_chat_read_set","summary":"Update last-read pointer (read receipt) for a channel.","required_cap":"social_read"},{"action":"social.chat.read_get","safe_action":"social_chat_read_get","summary":"Get last-read state for a channel for the current user.","required_cap":"social_read"},{"action":"social.chat.presence_online","safe_action":"social_chat_presence_online","summary":"List user IDs currently online (active SSE stream-relay connection) in the home project.","required_cap":"social_read"},{"action":"social.friends.list","safe_action":"social_friends_list","summary":"List friends for the current user.","required_cap":"social_read"},{"action":"social.friends.user_ids","safe_action":"social_friends_user_ids","summary":"Ordered friend user id list.","required_cap":"social_read"},{"action":"social.friends.cards","safe_action":"social_friends_cards","summary":"Public card fields for each friend.","required_cap":"social_read"},{"action":"social.friends.cards_batch","safe_action":"social_friends_cards_batch","summary":"Friend cards for specific user ids (must be friends).","required_cap":"social_read"},{"action":"social.followers.list","safe_action":"social_followers_list","summary":"Users who follow the current user.","required_cap":"social_read"},{"action":"social.privacy.get","safe_action":"social_privacy_get","summary":"Get friend/DM privacy settings.","required_cap":"social_read"},{"action":"social.privacy.put","safe_action":"social_privacy_put","summary":"Update privacy settings (incoming_friend_requests, dm_policy).","required_cap":"social_read"},{"action":"social.friends.requests_in","safe_action":"social_friends_requests_in","summary":"Incoming friend requests.","required_cap":"social_read"},{"action":"social.friends.requests_out","safe_action":"social_friends_requests_out","summary":"Outgoing friend requests.","required_cap":"social_read"},{"action":"social.friends.request_respond","safe_action":"social_friends_request_respond","summary":"Accept/reject/subscriber/block on an incoming friend request.","required_cap":"social_read"},{"action":"social.friends.request","safe_action":"social_friends_request","summary":"Send a friend request (optional source context for public_channel).","required_cap":"social_read"},{"action":"social.friends.accept","safe_action":"social_friends_accept","summary":"Accept friend request from user_id.","required_cap":"social_read"},{"action":"social.friends.remove","safe_action":"social_friends_remove","summary":"Remove an existing friend.","required_cap":"social_read"},{"action":"social.friends.reject","safe_action":"social_friends_reject","summary":"Reject a pending friend request.","required_cap":"social_read"},{"action":"social.friends.cancel","safe_action":"social_friends_cancel","summary":"Cancel outgoing friend request.","required_cap":"social_read"},{"action":"social.friends.block","safe_action":"social_friends_block","summary":"Block a user.","required_cap":"social_read"},{"action":"social.users.public_cards","safe_action":"social_users_public_cards","summary":"Public display cards for user ids (no friendship check).","required_cap":"social_read"},{"action":"social.users.lookup","safe_action":"social_users_lookup","summary":"Find users by id, email, or @username (no email in response).","required_cap":"social_read"},{"action":"social.party_invite.mint","safe_action":"social_party_invite_mint","summary":"Mint a short-lived party invite token for a relay room.","required_cap":"social_read"},{"action":"social.party_invite.verify","safe_action":"social_party_invite_verify","summary":"Verify party invite token (no auth required on REST; MCP still needs project context).","required_cap":"social_read"},{"action":"social.channel_invites.link_token","safe_action":"social_channel_invites_link_token","summary":"Create shareable link token for a channel (owner).","required_cap":"social_read"},{"action":"social.channel_invites.direct","safe_action":"social_channel_invites_direct","summary":"Create direct channel invite to a user (owner).","required_cap":"social_read"},{"action":"social.channel_invites.inbox","safe_action":"social_channel_invites_inbox","summary":"List pending channel invites for the current user.","required_cap":"social_read"},{"action":"social.channel_invites.accept","safe_action":"social_channel_invites_accept","summary":"Accept a channel invite from inbox.","required_cap":"social_read"},{"action":"social.channel_invites.decline","safe_action":"social_channel_invites_decline","summary":"Decline a channel invite.","required_cap":"social_read"},{"action":"social.channel_invites.redeem","safe_action":"social_channel_invites_redeem","summary":"Redeem channel invite token.","required_cap":"social_read"},{"action":"social.federation.add","safe_action":"social_federation_add","summary":"Add federated open-channel pointer on consumer project.","required_cap":"social_read"},{"action":"social.federation.get","safe_action":"social_federation_get","summary":"List federation pointers for a consumer project.","required_cap":"social_read"},{"action":"social.channels.register","safe_action":"social_channels_register","summary":"Create a new messenger channel (group chat, DM, or broadcast).","required_cap":"social_read"},{"action":"social.channels.update","safe_action":"social_channels_update","summary":"Update channel metadata (owner).","required_cap":"social_read"},{"action":"social.channels.delete","safe_action":"social_channels_delete","summary":"Delete a channel (owner) and unpublish from public index.","required_cap":"social_read"},{"action":"social.channels.list","safe_action":"social_channels_list","summary":"List all channels in the home project.","required_cap":"social_read"},{"action":"social.channels.get","safe_action":"social_channels_get","summary":"Get one channel if the current user may access it.","required_cap":"social_read"},{"action":"social.entities.expand","safe_action":"social_entities_expand","summary":"Batch-resolve channel/surrogate ids to metadata (max 100 ids).","required_cap":"social_read"},{"action":"social.pas.public_me_get","safe_action":"social_pas_public_me_get","summary":"Read Principal Access public slice for current user on a home project.","required_cap":"social_read"},{"action":"social.pas.public_me_put","safe_action":"social_pas_public_me_put","summary":"Replace channels/chats/groups lists in PAS public slice.","required_cap":"social_read"},{"action":"social.public.quota_get","safe_action":"social_public_quota_get","summary":"Social public index quota for current user.","required_cap":"social_read"},{"action":"social.public.me","safe_action":"social_public_me","summary":"Public maps from user row (ecosystem.social.public).","required_cap":"social_read"},{"action":"social.public.publish","safe_action":"social_public_publish","summary":"Publish a channel/chats/groups entry to public index.","required_cap":"social_read"},{"action":"social.public.unpublish","safe_action":"social_public_unpublish","summary":"Remove a public index entry.","required_cap":"social_read"},{"action":"social.public.index","safe_action":"social_public_index","summary":"Read a page of the public discovery index.","required_cap":"social_read"},{"action":"social.public.reconcile","safe_action":"social_public_reconcile","summary":"Reconcile public maps (privileged role only).","required_cap":"social_read"},{"action":"social.merge_feed","safe_action":"social_merge_feed","summary":"Merge read of multiple channel pointers (reader must access each).","required_cap":"social_read"},{"action":"social.admin.chat_sweep","safe_action":"social_admin_chat_sweep","summary":"Run one chat history prune batch. Requires ecosystem owner/admin on project 1.","required_cap":"social_read"},{"action":"social.admin.user_summary","safe_action":"social_admin_user_summary","summary":"Operator: aggregate friend/request/block counts and messenger prefs summary for a user_id.","required_cap":"social_read"},{"action":"social.admin.chat_index_page","safe_action":"social_admin_chat_index_page","summary":"Operator: paginated messenger chat index for a user (cursor/limit).","required_cap":"social_read"},{"action":"social.admin.channel_search","safe_action":"social_admin_channel_search","summary":"Operator: search channel metadata on a home_project_id by substring (id/title).","required_cap":"social_read"},{"action":"social.admin.directory_search","safe_action":"social_admin_directory_search","summary":"Operator: unified typeahead — users (8DNA) + channels for a home_project_id.","required_cap":"social_read"},{"action":"social.admin.messenger_policy_get","safe_action":"social_admin_messenger_policy_get","summary":"Operator: read messenger retention defaults, stored overrides, and merged effective policy.","required_cap":"social_read"},{"action":"social.admin.messenger_policy_set","safe_action":"social_admin_messenger_policy_set","summary":"Operator: replace messenger_operator_policy on ecosystem project (tiers, temp TTL, sweep ceiling).","required_cap":"social_read"},{"action":"social.admin.messenger_client_cache_get","safe_action":"social_admin_messenger_client_cache_get","summary":"Operator: read messenger client cache limits (defaults, stored overrides, merged effective).","required_cap":"social_read"},{"action":"social.admin.messenger_client_cache_set","safe_action":"social_admin_messenger_client_cache_set","summary":"Operator: replace data.ecosystem.messenger_client_cache on ecosystem project (media/IDB/OPFS caps).","required_cap":"social_read"},{"action":"social.admin.public_index_status","safe_action":"social_admin_public_index_status","summary":"Operator: public index page or reconcile maps (set reconcile=true).","required_cap":"social_read"},{"action":"social.admin.dm_thread_meta","safe_action":"social_admin_dm_thread_meta","summary":"Operator: DM thread metadata (counts, participants) for support; audited.","required_cap":"social_read"},{"action":"social.admin.graph_edges","safe_action":"social_admin_graph_edges","summary":"Operator: list friend and blocked edges for a user (capped).","required_cap":"social_read"},{"action":"social.admin.relay_hints","safe_action":"social_admin_relay_hints","summary":"Operator: static hints for stream relay room naming and diagnostics paths.","required_cap":"social_read"},{"action":"social.admin.force_delete_message","safe_action":"social_admin_force_delete_message","summary":"Operator: delete a chat message by id from DNA ring (ecosystem owner). Use dry_run first.","required_cap":"social_read"},{"action":"social.admin.reset_messenger_prefs","safe_action":"social_admin_reset_messenger_prefs","summary":"Operator: clear messenger_prefs for a user (reason required).","required_cap":"social_read"},{"action":"social.admin.revoke_federation","safe_action":"social_admin_revoke_federation","summary":"Operator: remove a federation pointer from consumer to source channel.","required_cap":"social_read"},{"action":"social.admin.force_close_channel","safe_action":"social_admin_force_close_channel","summary":"Operator: delete channel metadata from project data_channels (ecosystem owner).","required_cap":"social_read"},{"action":"social.chat.delta","safe_action":"social_chat_delta","summary":"Unified incremental delta for a messenger channel — one call returns new messages,","required_cap":"social_read"},{"action":"social.chat.crdt_update","safe_action":"social_chat_crdt_update","summary":"Apply a Y.js CRDT update to a channel's shared document (bodies / pins / deletes).","required_cap":"social_read"},{"action":"social.chat.crdt_state","safe_action":"social_chat_crdt_state","summary":"Read the current CRDT snapshot + raw updates for a channel.","required_cap":"social_read"},{"action":"social.support.history","safe_action":"social_support_history","summary":"Read project support thread for the authenticated user (channel psup_p{pid}_u{uid}).","required_cap":"project_support"},{"action":"social.support.send","safe_action":"social_support_send","summary":"Send a message in the user's support thread for a project (user) or staff reply when permitted.","required_cap":"project_support"},{"action":"social.support.inbox","safe_action":"social_support_inbox","summary":"Staff inbox preview list for a project (requires support access).","required_cap":"project_support"},{"action":"social.support.eligibility","safe_action":"social_support_eligibility","summary":"Batch read: for home project ids the user can access, returns whether end-user private support and/or public Messenger support lounge are enabled (channel id psup_pub_p{pid} when public).","required_cap":"project_support"},{"action":"social.support.search_projects","safe_action":"social_support_search_projects","summary":"Search projects the user may contact via support (titles ranked vs query). Returns support entry flags per row.","required_cap":"social_read"},{"action":"social.support.transition","safe_action":"social_support_transition","summary":"Staff: transition a support ticket lifecycle status (requires support desk access).","required_cap":"project_support"},{"action":"social.support.assign","safe_action":"social_support_assign","summary":"Staff: assign a support ticket to a staff user id (or unassign with null).","required_cap":"project_support"},{"action":"social.support.request_human","safe_action":"social_support_request_human","summary":"End user: request a human handoff for the current ticket (pending when allowed).","required_cap":"project_support"}],"hosting":[{"action":"hosting.site.quick_start","safe_action":"hosting_site_quick_start","summary":"Create bucket, upload HTML index, optional publish; returns public /s/{project_id}/{bucket_name}/ URL."},{"action":"hosting.site.resolve","safe_action":"hosting_site_resolve","summary":"Resolve hosting bucket_name to bucket_id and public URL hints."},{"action":"hosting.files.put","safe_action":"hosting_files_put","summary":"Upload or replace a file in a hosting bucket."},{"action":"hosting.release.snapshot","safe_action":"hosting_release_snapshot","summary":"Create immutable snapshot (archive bucket copy) for a site."},{"action":"hosting.release.list","safe_action":"hosting_release_list","summary":"List site release history (newest first)."},{"action":"hosting.release.promote","safe_action":"hosting_release_promote","summary":"Promote a release snapshot to the live site bucket and publish."},{"action":"hosting.release.delete","safe_action":"hosting_release_delete","summary":"Delete an unpinned hosting release (optional bucket purge)."},{"action":"hosting.release.clone_site","safe_action":"hosting_release_clone_site","summary":"Clone a new site from a release snapshot."},{"action":"hosting.storage.import_folder","safe_action":"hosting_storage_import_folder","summary":"Import a project storage folder into a hosting bucket."},{"action":"hosting.project.status","safe_action":"hosting_project_status","summary":"Project hosting plane: Host/Sell/Scale ladder, sites summary, next_actions."},{"action":"hosting.project.set_primary_site","safe_action":"hosting_project_set_primary_site","summary":"Set the project's primary public site URL when multiple sites exist (PH-18)."},{"action":"hosting.site.edge_health","safe_action":"hosting_site_edge_health","summary":"Check nginx edge readiness (symlinks, index.html) for a hosting bucket."},{"action":"hosting.deploy_files","safe_action":"hosting_deploy_files","summary":"Batch-upload files to a bucket and optionally publish (max 50 files per call)."},{"action":"hosting.bucket.files.list","safe_action":"hosting_bucket_files_list","summary":"List files in a hosting bucket (optional prefix, cursor pagination)."},{"action":"hosting.bucket.file.get","safe_action":"hosting_bucket_file_get","summary":"Read a single bucket file (text or base64, max 2MB)."},{"action":"hosting.bucket.file.rename","safe_action":"hosting_bucket_file_rename","summary":"Rename or move a file within a bucket."},{"action":"hosting.bucket.files.bulk_delete","safe_action":"hosting_bucket_files_bulk_delete","summary":"Delete multiple files by path list or prefix."},{"action":"hosting.demo.status","safe_action":"hosting_demo_status","summary":"Public demo hosting pool status (enabled, depth, sandbox project id)."},{"action":"hosting.demo_store.status","safe_action":"hosting_demo_store_status","summary":"Golden promo demo-store vitrine: catalog row count on sandbox, published build id, manifest bucket (`frontend.commerce.hosted_storefront.gen1`)."}],"agents":[{"action":"agents.list","safe_action":"agents_list","summary":"List Agents Fleet rows for a project (8DNA entity_type=agent).","required_cap":"agents_run"},{"action":"agents.get","safe_action":"agents_get","summary":"Get a single agent by UUID (default owner=project; personal rows need owner=user).","required_cap":"agents_run"},{"action":"agents.create","safe_action":"agents_create","summary":"Create a new agent row (draft AgentSpec).","required_cap":"agents_admin"},{"action":"agents.update","safe_action":"agents_update","summary":"Replace AgentSpec for an agent (full document).","required_cap":"agents_admin"},{"action":"agents.delete","safe_action":"agents_delete","summary":"Delete an agent row.","required_cap":"agents_admin"},{"action":"agents.run","safe_action":"agents_run","summary":"Enqueue an agent run (durable work queue).","required_cap":"agents_run"},{"action":"agents.run_with_agnt_credits","safe_action":"agents_run_with_agnt_credits","summary":"Demo orchestration: purchase compute credits (AGC) then enqueue an agent run.","required_cap":"agents_run"},{"action":"agents.fork","safe_action":"agents_fork","summary":"Fork an agent to a new generation (DNA row).","required_cap":"agents_admin"},{"action":"agents.stop","safe_action":"agents_stop","summary":"Cancel a running / queued agent run.","required_cap":"agents_run"},{"action":"agents.kill","safe_action":"agents_kill","summary":"Set agent lifecycle state to killed (hard stop for new runs).","required_cap":"agents_admin"},{"action":"agents.promote","safe_action":"agents_promote","summary":"Run auto-promotion gates; may set state to live when metrics pass.","required_cap":"agents_admin"},{"action":"agents.rollout_advance","safe_action":"agents_rollout_advance","summary":"Advance canary rollout step (5→20→50→100).","required_cap":"agents_admin"},{"action":"agents.metrics","safe_action":"agents_metrics","summary":"Read rollup metrics for an agent (ecosystem.agents_metrics).","required_cap":"agents_run"},{"action":"agents.gates","safe_action":"agents_gates","summary":"Evaluate promotion gates for an agent.","required_cap":"agents_run"},{"action":"agents.traces","safe_action":"agents_traces","summary":"Return stored run events (trace buffer) for a run.","required_cap":"agents_run"},{"action":"agents.timeline","safe_action":"agents_timeline","summary":"List recent runs for an agent (uuid + status + timestamps).","required_cap":"agents_run"},{"action":"agents.version_timeline","safe_action":"agents_version_timeline","summary":"List agent version lineage (generation tree — REST GET /timeline parity)."},{"action":"agents.list_pending_approvals","safe_action":"agents_list_pending_approvals","summary":"List runs waiting for approval across project or personal agent scope."},{"action":"agents.runs_list","safe_action":"agents_runs_list","summary":"List agent runs with REST/SDK filters and lightweight audit fields.","required_cap":"agents_run"},{"action":"agents.run_get","safe_action":"agents_run_get","summary":"Get a run row plus normalized RunDetailDTO for cockpit/audit views.","required_cap":"agents_run"},{"action":"agents.approve_run","safe_action":"agents_approve_run","summary":"Approve a run stuck in waiting_for_approval and resume execution.","required_cap":"agents_run"},{"action":"agents.policy_preview","safe_action":"agents_policy_preview","summary":"Expand AgentPolicy patterns to live MCP actions (preview, no persistence).","required_cap":"agents_run"},{"action":"agents.templates_list","safe_action":"agents_templates_list","summary":"List built-in Agent Fleet templates (canonical Python catalog).","required_cap":"agents_run"},{"action":"agents.template_preview","safe_action":"agents_template_preview","summary":"Return merged AgentSpec-shaped preview for a template (no persistence).","required_cap":"agents_run"},{"action":"agents.create_from_template","safe_action":"agents_create_from_template","summary":"Create an agent row from a built-in template (atomic merge on server).","required_cap":"agents_admin"}],"bots":[{"action":"bots.list","safe_action":"bots_list","summary":"MCP tool bots.list"},{"action":"bots.templates","safe_action":"bots_templates","summary":"MCP tool bots.templates"},{"action":"bots.waba_templates","safe_action":"bots_waba_templates","summary":"MCP tool bots.waba_templates"},{"action":"bots.get","safe_action":"bots_get","summary":"MCP tool bots.get"},{"action":"bots.create","safe_action":"bots_create","summary":"MCP tool bots.create"},{"action":"bots.attach_channel","safe_action":"bots_attach_channel","summary":"MCP tool bots.attach_channel"},{"action":"bots.go_live","safe_action":"bots_go_live","summary":"MCP tool bots.go_live"},{"action":"bots.health","safe_action":"bots_health","summary":"MCP tool bots.health"},{"action":"bots.simulate","safe_action":"bots_simulate","summary":"MCP tool bots.simulate"},{"action":"bots.conversations","safe_action":"bots_conversations","summary":"MCP tool bots.conversations"},{"action":"bots.set_handoff","safe_action":"bots_set_handoff","summary":"MCP tool bots.set_handoff"},{"action":"bots.staff_reply","safe_action":"bots_staff_reply","summary":"MCP tool bots.staff_reply"},{"action":"bots.pause","safe_action":"bots_pause","summary":"MCP tool bots.pause"},{"action":"bots.archive","safe_action":"bots_archive","summary":"MCP tool bots.archive"},{"action":"bots.set_brain","safe_action":"bots_set_brain","summary":"MCP tool bots.set_brain"},{"action":"bots.broadcast","safe_action":"bots_broadcast","summary":"MCP tool bots.broadcast"},{"action":"bots.send_commerce_offer","safe_action":"bots_send_commerce_offer","summary":"MCP tool bots.send_commerce_offer"}],"integrations":[{"action":"integrations.list_recipes","safe_action":"integrations_list_recipes","summary":"List integration recipe templates (Stripe, GitHub, Telegram, etc.).","required_cap":"mcp_read"},{"action":"integrations.install_recipe","safe_action":"integrations_install_recipe","summary":"Install a recipe: creates connection + declarative logic rule.","required_cap":"project_admin"},{"action":"integrations.list_connections","safe_action":"integrations_list_connections","summary":"List integration connections for project or personal (ecosystem user) scope.","required_cap":"mcp_read"},{"action":"integrations.test_hook","safe_action":"integrations_test_hook","summary":"Dry-run inbound hook verify + normalize (sync dispatch to logic).","required_cap":"mcp_read"},{"action":"integrations.export_connection","safe_action":"integrations_export_connection","summary":"Export connection public spec + config (secrets redacted).","required_cap":"mcp_read"},{"action":"integrations.import_connection","safe_action":"integrations_import_connection","summary":"Import connection from export JSON (optionally with secrets).","required_cap":"project_admin"},{"action":"integrations.rotate_secret","safe_action":"integrations_rotate_secret","summary":"Rotate a protected secret key for a connection.","required_cap":"project_admin"},{"action":"integrations.replay_delivery","safe_action":"integrations_replay_delivery","summary":"Replay outbound delivery by durable delivery_id (execution log).","required_cap":"mcp_read"},{"action":"integrations.replay_delivery_url","safe_action":"integrations_replay_delivery_url","summary":"Replay outbound POST to an explicit target_url (same as REST deliveries/replay query).","required_cap":"mcp_read"},{"action":"integrations.connection_health","safe_action":"integrations_connection_health","summary":"Read connection health snapshot (public spec only).","required_cap":"mcp_read"},{"action":"integrations.connector_schema","safe_action":"integrations_connector_schema","summary":"Provider setup schema metadata for wizard/agents.","required_cap":"mcp_read"},{"action":"integrations.process_inbox_batch","safe_action":"integrations_process_inbox_batch","summary":"Process durable inbound integration inbox (worker-style batch).","required_cap":"mcp_read"},{"action":"integrations.process_outbound_batch","safe_action":"integrations_process_outbound_batch","summary":"Process outbound webhook delivery work queue (webhooks.outbound batch).","required_cap":"mcp_read"},{"action":"integrations.process_polling_batch","safe_action":"integrations_process_polling_batch","summary":"Poll due integration connections (config.poll_enabled, cursor watermark)."},{"action":"integrations.hydrate_triggers","safe_action":"integrations_hydrate_triggers","summary":"Hydrate integration trigger registry from connection DNA (cold start recovery)."},{"action":"integrations.rebind_triggers","safe_action":"integrations_rebind_triggers","summary":"Re-sync enabled logic rule triggers for a project or all connection projects."},{"action":"integrations.list_inbox_events","safe_action":"integrations_list_inbox_events","summary":"List durable integration inbox audit rows for a project.","required_cap":"mcp_read"},{"action":"integrations.replay_inbox","safe_action":"integrations_replay_inbox","summary":"Replay a durable inbox event through the test-hook intake path."},{"action":"integrations.export_scenario","safe_action":"integrations_export_scenario","summary":"Export portable scenario bundle (rule document + field maps, secrets redacted)."},{"action":"integrations.preview_scenario_maps","safe_action":"integrations_preview_scenario_maps","summary":"Evaluate scenario field maps against a sample payload (secrets redacted)."},{"action":"integrations.generate_signing_secret","safe_action":"integrations_generate_signing_secret","summary":"Rotate signing_secret server-side without reading the old value.","required_cap":"project_admin"},{"action":"integrations.export_connection_manifest","safe_action":"integrations_export_connection_manifest","summary":"Export project integration connections as JSON manifest for agent tool loops.","required_cap":"mcp_read"},{"action":"integrations.import_zapier_preview","safe_action":"integrations_import_zapier_preview","summary":"Dry-run preview: map Zapier export JSON to recipe + logic block draft.","required_cap":"mcp_read"},{"action":"integrations.import_make_preview","safe_action":"integrations_import_make_preview","summary":"Dry-run preview: map Make scenario JSON to recipe + logic block draft.","required_cap":"mcp_read"},{"action":"integrations.list_issues","safe_action":"integrations_list_issues","summary":"Cluster failed outbound deliveries into issues (Hookdeck-style).","required_cap":"mcp_read"},{"action":"integrations.get_diagnostics","safe_action":"integrations_get_diagnostics","summary":"Integration Hub diagnostics rollup and worker flags.","required_cap":"mcp_read"},{"action":"integrations.get_platform_diagnostics","safe_action":"integrations_get_platform_diagnostics","summary":"Cross-tenant Integration Hub rollup (platform admin ops)."},{"action":"integrations.get_hubspot_relay_stats","safe_action":"integrations_get_hubspot_relay_stats","summary":"HubSpot platform relay rollup (7d success/denied/no-connection/missing portal)."},{"action":"integrations.migrate_legacy_webhooks","safe_action":"integrations_migrate_legacy_webhooks","summary":"Copy projects.config.webhooks into integration_connection rows.","required_cap":"mcp_read"},{"action":"integrations.poll_connection","safe_action":"integrations_poll_connection","summary":"Run connector polling for a connection (cursor watermark in config.poll_state).","required_cap":"mcp_read"},{"action":"integrations.oauth_begin","safe_action":"integrations_oauth_begin","summary":"Start OAuth 2.0 PKCE flow for an integration connection (returns authorization_url)."},{"action":"integrations.refresh_token","safe_action":"integrations_refresh_token","summary":"Refresh OAuth access token for a connection when expired (protected storage)."},{"action":"integrations.activate_webhook","safe_action":"integrations_activate_webhook","summary":"Register provider inbound webhook for a connection (post-OAuth or manual retry)."},{"action":"integrations.update_connection","safe_action":"integrations_update_connection","summary":"Patch integration connection metadata (label, status, config, direction)."},{"action":"integrations.list_scenarios","safe_action":"integrations_list_scenarios","summary":"List integration scenarios for a project scope."},{"action":"integrations.create_scenario","safe_action":"integrations_create_scenario","summary":"Create a draft integration scenario with backing logic rule."},{"action":"integrations.publish_scenario","safe_action":"integrations_publish_scenario","summary":"Publish scenario (live) and enable backing logic."},{"action":"integrations.test_scenario_step","safe_action":"integrations_test_scenario_step","summary":"Dry-run a scenario step via logic simulation."},{"action":"integrations.list_scenario_runs","safe_action":"integrations_list_scenario_runs","summary":"List recorded test/run history for a scenario."},{"action":"integrations.list_apps","safe_action":"integrations_list_apps","summary":"List integration app catalog entries (connectors + recipe metadata)."},{"action":"integrations.get_app","safe_action":"integrations_get_app","summary":"Get a single integration app definition by provider id."},{"action":"integrations.dynamic_fields","safe_action":"integrations_dynamic_fields","summary":"List dynamic field sources for an integration app (schema-only in Phase 1)."},{"action":"integrations.list_dlq_deliveries","safe_action":"integrations_list_dlq_deliveries","summary":"List integration outbound deliveries in DLQ or terminal failure state."},{"action":"integrations.generate_scenario","safe_action":"integrations_generate_scenario","summary":"NL → RuleDocumentV1 draft for integration scenario (copilot stub)."},{"action":"integrations.import_n8n_preview","safe_action":"integrations_import_n8n_preview","summary":"Preview n8n workflow JSON as recipe + logic block draft."},{"action":"integrations.list_modules","safe_action":"integrations_list_modules","summary":"List reusable sub-scenario module stubs."},{"action":"integrations.register_module","safe_action":"integrations_register_module","summary":"Register a reusable sub-scenario module stub on a parent connection."},{"action":"integrations.list_module_registrations","safe_action":"integrations_list_module_registrations","summary":"List module registrations persisted on connection DNA rows."}],"crm":[{"action":"crm.list_contacts","safe_action":"crm_list_contacts","summary":"List CRM contacts for a project (paginated BFF)."},{"action":"crm.upsert_contact","safe_action":"crm_upsert_contact","summary":"Create or update a CRM contact (dedupe by email)."},{"action":"crm.create_deal","safe_action":"crm_create_deal","summary":"Create a CRM deal in the default pipeline."},{"action":"crm.move_deal_stage","safe_action":"crm_move_deal_stage","summary":"Move a deal to another pipeline stage."},{"action":"crm.log_activity","safe_action":"crm_log_activity","summary":"Log a CRM activity (note, call, task, etc.)."},{"action":"crm.search","safe_action":"crm_search","summary":"Search CRM contacts by query string."},{"action":"crm.get_contact_360","safe_action":"crm_get_contact_360","summary":"Contact 360 view: profile, deals, unified timeline."},{"action":"crm.magic_fill","safe_action":"crm_magic_fill","summary":"AI/heuristic autofill for quick-create (dry-run, no write)."},{"action":"crm.suggest_field","safe_action":"crm_suggest_field","summary":"Suggest values for a CRM field from partial context."},{"action":"crm.import_contacts","safe_action":"crm_import_contacts","summary":"Batch import CRM contacts with email dedupe."},{"action":"crm.export_contact","safe_action":"crm_export_contact","summary":"Export GDPR bundle for a CRM contact."},{"action":"crm.erase_contact","safe_action":"crm_erase_contact","summary":"Anonymize/erase a CRM contact (GDPR)."},{"action":"crm.list_board","safe_action":"crm_list_board","summary":"Pipeline kanban board with stage columns and deals."},{"action":"crm.get_deal_timeline","safe_action":"crm_get_deal_timeline","summary":"Activity timeline for a CRM deal (notes, tasks linked to deal_id)."},{"action":"crm.get_crm_config","safe_action":"crm_get_crm_config","summary":"Project CRM config (saved_views, settings blob)."},{"action":"crm.patch_crm_config","safe_action":"crm_patch_crm_config","summary":"Patch project CRM config (writers may update saved_views only)."},{"action":"crm.merge_contacts","safe_action":"crm_merge_contacts","summary":"Merge duplicate contact into primary (absorb duplicate)."}],"cardgame":[{"action":"cardgame.dna.read_rows","safe_action":"cardgame_dna_read_rows","summary":"List up to ``limit`` rows for a cardgame 8DNA entity type using DNA CRUD get (same permission model as the SPA). Use for match room / cell snapshots when building agent context."},{"action":"cardgame.rules.execute","safe_action":"cardgame_rules_execute","summary":"Execute a Logic Engine command for ArcaneStack (e.g. ``cardgame.match.play_card``) with the same payload shape as the game client. Requires authenticated MCP context."}],"seo":[{"action":"seo.meta.get","safe_action":"seo_meta_get","summary":"Fetch dynamic meta tags for a public marketing path (title, description, OG, JSON-LD)."},{"action":"seo.health.check","safe_action":"seo_health_check","summary":"SEO registry version, indexable path count, and hosting funnel readiness."},{"action":"seo.cache.clear","safe_action":"seo_cache_clear","summary":"Invalidate neural SEO meta + robots/sitemap caches; optionally ping IndexNow."}],"rag":[{"action":"rag.collection_create","safe_action":"rag_collection_create","summary":"Create a new RAG knowledge base collection for the current project.","required_cap":"rag.write"},{"action":"rag.collection_list","safe_action":"rag_collection_list","summary":"List all RAG collections for the current project.","required_cap":"rag.read"},{"action":"rag.collection_delete","safe_action":"rag_collection_delete","summary":"Delete a RAG collection and all its documents. This is irreversible.","required_cap":"rag.write"},{"action":"rag.document_add","safe_action":"rag_document_add","summary":"Add a text document to a RAG collection.","required_cap":"rag.write"},{"action":"rag.document_list","safe_action":"rag_document_list","summary":"List document chunks stored in a collection.","required_cap":"rag.read"},{"action":"rag.document_delete","safe_action":"rag_document_delete","summary":"Remove a document (all its chunks) from a collection by source_doc_id.","required_cap":"rag.write"},{"action":"rag.search","safe_action":"rag_search","summary":"Semantic search over a RAG collection.","required_cap":"rag.read"},{"action":"rag.memory_add","safe_action":"rag_memory_add","summary":"Store a conversation turn in AI memory.","required_cap":"rag.write"},{"action":"rag.memory_get","safe_action":"rag_memory_get","summary":"Get the most recent conversation turns from memory (chronological order).","required_cap":"rag.read"},{"action":"rag.memory_search","safe_action":"rag_memory_search","summary":"Semantically search past conversation turns.","required_cap":"rag.read"}],"context":[{"action":"context.get","safe_action":"context_get","summary":"Unified Context Fabric gather for agents, logic, and MCP callers.","required_cap":"rag.read"}],"generation":[{"action":"generation.list","safe_action":"generation_list","summary":"List sandbox environment anchors for a project (names, status, CalVer, auto_created flags)."},{"action":"generation.diff","safe_action":"generation_diff","summary":"Structured diff between two resolved generation entity states (same table/project)."},{"action":"generation.promote","safe_action":"generation_promote","summary":"Promote a sandbox environment to production (runs promotion checks first)."},{"action":"generation.approve","safe_action":"generation_approve","summary":"Mark manual generation approval on anchor and re-run gate evaluation."},{"action":"generation.gates","safe_action":"generation_gates","summary":"Run generation gate chain for an environment (schema, conflict, health, soak, metrics, optional manual)."},{"action":"generation.timeline","safe_action":"generation_timeline","summary":"Recent completed promotion requests for a project (newest first)."}],"dna":[{"action":"dna.lineage.get_ancestors","safe_action":"dna_lineage_get_ancestors","summary":"Walk ancestor chain for an 8DNA row (materialized path or scoped CTE fallback)."},{"action":"dna.lineage.get_descendants","safe_action":"dna_lineage_get_descendants","summary":"List descendant rows under a parent UUID within project scope."}],"buffs":[{"action":"buffs.create_buff","safe_action":"buffs_create_buff","summary":"Create a buff template in PENDING state."},{"action":"buffs.apply_buff","safe_action":"buffs_apply_buff","summary":"Apply a buff to an entity (user or project)."},{"action":"buffs.extend_buff","safe_action":"buffs_extend_buff","summary":"Extend the duration of an active buff."},{"action":"buffs.revert_buff","safe_action":"buffs_revert_buff","summary":"Revert an active buff - restore original state from snapshot."},{"action":"buffs.cancel_buff","safe_action":"buffs_cancel_buff","summary":"Cancel a buff in any state (force cancellation)."},{"action":"buffs.get_buff","safe_action":"buffs_get_buff","summary":"Get information about a specific buff."},{"action":"buffs.list_active_buffs","safe_action":"buffs_list_active_buffs","summary":"List active buffs for an entity."},{"action":"buffs.get_effective_limits","safe_action":"buffs_get_effective_limits","summary":"Get effective limits for an entity with all buffs applied."},{"action":"buffs.apply_temporary_effect","safe_action":"buffs_apply_temporary_effect","summary":"Quickly apply a temporary effect (creates and applies buff in one step)."},{"action":"buffs.apply_persistent_effect","safe_action":"buffs_apply_persistent_effect","summary":"Quickly apply a persistent effect (creates and applies permanent buff)."}],"commerce_rest":[{"action":"rest.marketplace.create_listing","safe_action":"rest_marketplace_create_listing","summary":"Create listing (types: sale, buy, exchange, auction). Not an MCP action."},{"action":"rest.marketplace.list_listings","safe_action":"rest_marketplace_list_listings","summary":"List marketplace listings with filters."},{"action":"rest.marketplace.place_bid","safe_action":"rest_marketplace_place_bid","summary":"Place bid on auction listing."},{"action":"rest.marketplace.accept_listing","safe_action":"rest_marketplace_accept_listing","summary":"Accept deal / settle listing (may trigger internal payment flow)."},{"action":"rest.marketplace.close_auction","safe_action":"rest_marketplace_close_auction","summary":"Close auction listing."},{"action":"rest.commerce.merchant.dashboard","safe_action":"rest_commerce_merchant_dashboard","summary":"Seller Command Center KPIs and recommended actions."},{"action":"rest.commerce.merchant.list_listings","safe_action":"rest_commerce_merchant_list_listings","summary":"Admin listings table for seller project (all statuses)."},{"action":"rest.commerce.merchant.incoming_orders","safe_action":"rest_commerce_merchant_incoming_orders","summary":"Incoming sales for seller project."},{"action":"rest.commerce.merchant.update_listing","safe_action":"rest_commerce_merchant_update_listing","summary":"Update listing status or price (seller admin)."},{"action":"rest.commerce.merchant.sync_price","safe_action":"rest_commerce_merchant_sync_price","summary":"Sync listing price from catalog asset."},{"action":"rest.commerce.merchant.reindex","safe_action":"rest_commerce_merchant_reindex","summary":"Rebuild shop index row for one listing."},{"action":"rest.commerce.merchant.bulk_sync_prices","safe_action":"rest_commerce_merchant_bulk_sync_prices","summary":"Sync all stale listing prices for project."},{"action":"rest.commerce.merchant.bulk_deactivate","safe_action":"rest_commerce_merchant_bulk_deactivate","summary":"Deactivate multiple listings."},{"action":"rest.commerce.guidance.checklist","safe_action":"rest_commerce_guidance_checklist","summary":"Operator shop setup checklist (catalog + shelf)."},{"action":"rest.commerce.guidance.catalog_hints","safe_action":"rest_commerce_guidance_catalog_hints","summary":"Per-asset listing eligibility and stale price hints."},{"action":"rest.commerce.guidance.listing_draft","safe_action":"rest_commerce_guidance_listing_draft","summary":"Suggested listing draft defaults for one asset."},{"action":"rest.commerce.participant.holdings","safe_action":"rest_commerce_participant_holdings","summary":"User holdings in a project (participant plane, not catalog)."},{"action":"rest.commerce.participant.grant_holding","safe_action":"rest_commerce_participant_grant_holding","summary":"Operator grant inventory to project member (requires write)."},{"action":"rest.commerce.merchant.featured","safe_action":"rest_commerce_merchant_featured","summary":"Project featured listing UUIDs in 8DNA storefront config."},{"action":"rest.commerce.merchant.coupons","safe_action":"rest_commerce_merchant_coupons","summary":"List or create project promo codes (8DNA commerce.coupon_registry)."},{"action":"rest.commerce.merchant.coupon_by_code","safe_action":"rest_commerce_merchant_coupon_by_code","summary":"Update or delete a project promo code."},{"action":"rest.commerce.cart.apply_coupon","safe_action":"rest_commerce_cart_apply_coupon","summary":"Apply or clear coupon on authenticated cart (listing scope enforced)."},{"action":"rest.commerce.cart.checkout","safe_action":"rest_commerce_cart_checkout","summary":"Create checkout session from cart (wallet_internal or payments_fiat rail)."},{"action":"rest.commerce.my_purchases","safe_action":"rest_commerce_my_purchases","summary":"Buyer purchases BFF — orders merged with active entitlements and delivery URLs."},{"action":"rest.commerce.delivery.refresh","safe_action":"rest_commerce_delivery_refresh","summary":"Re-issue signed delivery download token for a fulfilled order line."},{"action":"rest.commerce.orders.refund_request","safe_action":"rest_commerce_orders_refund_request","summary":"Request refund; wallet rail auto-compensates USDT. Fiat (payments_fiat) skips wallet credit — manual ops via admin manual-refunds."},{"action":"rest.commerce.orders.refund_status","safe_action":"rest_commerce_orders_refund_status","summary":"Poll refund request status and compensation snapshot for an order."},{"action":"rest.commerce.events.refund_stream","safe_action":"rest_commerce_events_refund_stream","summary":"SSE stream for refund lifecycle (commerce.refund.updated) — buyer/merchant cache refresh."},{"action":"rest.admin.commerce.refund_sse_health","safe_action":"rest_admin_commerce_refund_sse_health","summary":"Ops: in-process refund SSE subscriber counts on this worker (connection_count, pg_bus_enabled)."},{"action":"rest.admin.commerce.metrics_scrape","safe_action":"rest_admin_commerce_metrics_scrape","summary":"Prometheus scrape for commerce funnel gauges (header X-Metrics-Token, env COMMERCE_METRICS_SCRAPE_TOKEN)."},{"action":"rest.admin.commerce.settlement_funnel","safe_action":"rest_admin_commerce_settlement_funnel","summary":"Ops: stuck escrow scan + checkout funnel OpTrace + refund_sse_health snapshot."},{"action":"rest.exchange.quote","safe_action":"rest_exchange_quote","summary":"Cross-project exchange quote (not protein command_type exchange)."},{"action":"rest.exchange.execute","safe_action":"rest_exchange_execute","summary":"Execute cross-project currency/asset exchange."},{"action":"rest.commerce.checkout.create_session","safe_action":"rest_commerce_checkout_create_session","summary":"Create checkout session for listing or cart lines. Send Idempotency-Key header for safe retries."},{"action":"rest.commerce.checkout.confirm_session","safe_action":"rest_commerce_checkout_confirm_session","summary":"Confirm checkout session (wallet_internal or payments_fiat rail). 402 insufficient_balance, 409 partial_failure — use Idempotency-Key."},{"action":"rest.commerce.checkout.get_session","safe_action":"rest_commerce_checkout_get_session","summary":"Poll checkout session status until completed/failed/expired."},{"action":"rest.admin.commerce.manual_refunds_list","safe_action":"rest_admin_commerce_manual_refunds_list","summary":"Ops: list refund_requested orders awaiting manual compensation for a buyer slice."},{"action":"rest.admin.commerce.manual_refunds_complete","safe_action":"rest_admin_commerce_manual_refunds_complete","summary":"Ops: mark fiat/manual refund compensated — revoke entitlements, set order refunded."},{"action":"rest.commerce.reconcile_escrow","safe_action":"rest_commerce_reconcile_escrow","summary":"Ops: find deals confirmed without completed transfer (nightly gate)."}]}}