{"version":"2.0","entrypoint":"agentstack.execute","total_actions":196,"domains":{"commands":[{"action":"commands.execute","summary":"Execute a single Protein Command via universal API."},{"action":"commands.execute_batch","summary":"Execute multiple Protein Commands in batch."}],"projects":[{"action":"projects.get_projects","summary":"Get list of projects for the current user."},{"action":"projects.get_project","summary":"Get detailed information about a specific project."},{"action":"projects.create_project","summary":"Create a new project."},{"action":"projects.create_project_anonymous","summary":"Create a new anonymous project (for AI agents)."},{"action":"projects.update_project","summary":"Update an existing project.","required_cap":"project_admin"},{"action":"projects.delete_project","summary":"Delete a project.","required_cap":"project_admin"},{"action":"projects.get_stats","summary":"Get project statistics."},{"action":"projects.get_users","summary":"Get list of users in a project."},{"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","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","summary":"Remove a user from a project (requires Professional subscription or ecosystem context).","required_cap":"project_admin"}],"rbac":[{"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","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","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","summary":"Check if a user has a permission in a project. If user_id is omitted, checks current user."}],"processors":[{"action":"processors.list","summary":"List all available processors with their metadata."},{"action":"processors.get_metadata","summary":"Get detailed metadata for a specific processor."},{"action":"processors.execute","summary":"Execute a processor directly.","required_cap":"logic_write"}],"logic":[{"action":"logic.create","summary":"Create new Logic Engine rule for project.","required_cap":"logic_write"},{"action":"logic.update","summary":"Update existing Logic Engine rule.","required_cap":"logic_write"},{"action":"logic.delete","summary":"Delete a Logic Engine rule.","required_cap":"logic_write"},{"action":"logic.get","summary":"Get detailed information about a Logic Engine rule."},{"action":"logic.list","summary":"List all Logic Engine rules for project."},{"action":"logic.execute","summary":"Execute a Logic Engine rule immediately.","required_cap":"logic_write"},{"action":"logic.get_processors","summary":"Get list of available processors (same as processors.list but in logic context)."},{"action":"logic.get_commands","summary":"Get list of available commands for triggers."},{"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","summary":"Simulate a logic rule execution without side effects (F2.5)."},{"action":"logic.list_versions","summary":"List historical snapshots stored on a rule (F2.9)."},{"action":"logic.diff_versions","summary":"Diff two rule snapshots (F2.9)."},{"action":"logic.restore_version","summary":"Roll a rule back to a prior snapshot (F2.9)."},{"action":"logic.export_json","summary":"Export a logic rule as JSON for backup / cross-project copy."},{"action":"logic.import_json","summary":"Import a logic rule from JSON (creates a new rule)."},{"action":"logic.attach_template","summary":"Install a template from the built-in catalog into the current project."},{"action":"logic.signals_catalog","summary":"List signal channels the logic engine can subscribe to."},{"action":"logic.mcp_actions_catalog","summary":"List MCP actions addressable from logic rules."}],"auth":[{"action":"auth.login","summary":"Login to the system."},{"action":"auth.register","summary":"Register a new user."},{"action":"auth.get_profile","summary":"Get user profile information."},{"action":"auth.update_profile","summary":"Update user profile."}],"payments":[{"action":"payments.create","summary":"Create a new payment transaction.","required_cap":"payments"},{"action":"payments.get","summary":"Get detailed payment information by payment ID.","required_cap":"payments"},{"action":"payments.list_transactions","summary":"List all payment transactions for a project.","required_cap":"payments"},{"action":"payments.get_balance","summary":"Get current wallet balance for a project.","required_cap":"payments"},{"action":"payments.refund","summary":"Refund a completed payment.","required_cap":"payments"}],"wallets":[{"action":"wallets.list","summary":"List wallets for a project (and optionally user).","required_cap":"payments"},{"action":"wallets.create","summary":"Create a wallet for a project or user.","required_cap":"payments"},{"action":"wallets.deposit","summary":"Deposit funds to a wallet.","required_cap":"payments"},{"action":"wallets.transfer","summary":"Transfer funds between wallets (same project).","required_cap":"payments"}],"scheduler":[{"action":"scheduler.create_task","summary":"Create a new scheduled task for automated execution.","required_cap":"scheduler"},{"action":"scheduler.get_task","summary":"Get detailed information about a scheduled task by ID.","required_cap":"scheduler"},{"action":"scheduler.update_task","summary":"Update an existing scheduler task (requires write permission).","required_cap":"scheduler"},{"action":"scheduler.list_tasks","summary":"List all scheduled tasks for a project.","required_cap":"scheduler"},{"action":"scheduler.execute_task","summary":"Execute a scheduled task immediately, bypassing the cron schedule.","required_cap":"scheduler"},{"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","summary":"Get detailed information about a specific task from the execution pool.","required_cap":"scheduler"},{"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","summary":"Clear all tasks from the execution pool (does not delete from database).","required_cap":"scheduler"},{"action":"scheduler.refresh_pool","summary":"Force a refresh of the scheduler pool from the database.","required_cap":"scheduler"},{"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","summary":"Cancel/remove a scheduler task (removes from pool and disables in database).","required_cap":"scheduler"}],"apikeys":[{"action":"apikeys.create","summary":"Create a new API key for project access.","required_cap":"api_keys"},{"action":"apikeys.list","summary":"List all API keys for a project.","required_cap":"api_keys"},{"action":"apikeys.delete","summary":"Delete an API key permanently.","required_cap":"api_keys"}],"analytics":[{"action":"analytics.get_usage","summary":"Get project usage statistics and activity data."},{"action":"analytics.get_metrics","summary":"Get project performance metrics and analytics data."}],"system":[{"action":"system.ping","summary":"Health check tool — always succeeds, no authentication required."}],"assets":[{"action":"assets.create","summary":"Create a new asset for the project.","required_cap":"assets_write"},{"action":"assets.get","summary":"Get asset details by ID."},{"action":"assets.list","summary":"List all assets in the project."},{"action":"assets.update","summary":"Update an existing asset.","required_cap":"assets_write"},{"action":"assets.delete","summary":"Delete an asset from the project.","required_cap":"assets_write"}],"data_access":[{"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","summary":"Retrieve the current field-level access policy for a project."},{"action":"data_access.check_field","summary":"Check whether a specific role can read/write a field in a resource."},{"action":"data_access.test_mask","summary":"Preview what fields a given role can read/write in a resource."},{"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","summary":"Write the global FAP template on ecosystem project (admin tooling).","required_cap":"data_access_admin"},{"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","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","summary":"Upsert ``field_triggers`` for one resource. **triggers** is a map ``field_pattern → [trigger_def, …]`` (patterns like ``status``, ``config.**``, ``*``).","required_cap":"data_access_admin"}],"storage":[{"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","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.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","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","summary":"Returns VAPID status; browser must still call PushManager.subscribe."},{"action":"notifications.send_push","summary":"Enqueue OS web push for a user (self or admin)."},{"action":"notifications.cancel_push","summary":"Cancel pending push items by correlation key prefix."},{"action":"notifications.list_prefs","summary":"Messenger + web push preference snapshot (minimal)."},{"action":"notifications.update_prefs","summary":"Patch messenger prefs (subset allowed by MessengerPrefsPatch)."},{"action":"notifications.register_category","summary":"Register a logical push category in user messenger prefs (persisted)."}],"web_push":[{"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","summary":"Get the current user's messenger sidebar index — list of channels with pinned/order metadata."},{"action":"social.chat.index_put","summary":"Merge chat index entries into the user's sidebar index (no If-Match; use social flows for removal)."},{"action":"social.chat.history","summary":"Read chat history from a messenger channel (AI-accessible)."},{"action":"social.chat.post","summary":"Send a chat message to a messenger channel as the AI agent (authenticated user)."},{"action":"social.chat.pin","summary":"Pin a message in a channel."},{"action":"social.chat.unpin","summary":"Unpin a message in a channel."},{"action":"social.chat.message_edit","summary":"Edit own chat message (author only)."},{"action":"social.chat.message_delete","summary":"Delete a chat message (author or channel owner per server rules)."},{"action":"social.chat.reaction","summary":"Apply one server-authoritative reaction on a message (immutable cell per user)."},{"action":"social.chat.read_set","summary":"Update last-read pointer (read receipt) for a channel."},{"action":"social.chat.read_get","summary":"Get last-read state for a channel for the current user."},{"action":"social.chat.presence_online","summary":"List user IDs currently online (active SSE stream-relay connection) in the home project."},{"action":"social.friends.list","summary":"List friends for the current user."},{"action":"social.friends.user_ids","summary":"Ordered friend user id list."},{"action":"social.friends.cards","summary":"Public card fields for each friend."},{"action":"social.friends.cards_batch","summary":"Friend cards for specific user ids (must be friends)."},{"action":"social.followers.list","summary":"Users who follow the current user."},{"action":"social.privacy.get","summary":"Get friend/DM privacy settings."},{"action":"social.privacy.put","summary":"Update privacy settings (incoming_friend_requests, dm_policy)."},{"action":"social.friends.requests_in","summary":"Incoming friend requests."},{"action":"social.friends.requests_out","summary":"Outgoing friend requests."},{"action":"social.friends.request_respond","summary":"Accept/reject/subscriber/block on an incoming friend request."},{"action":"social.friends.request","summary":"Send a friend request (optional source context for public_channel)."},{"action":"social.friends.accept","summary":"Accept friend request from user_id."},{"action":"social.friends.remove","summary":"Remove an existing friend."},{"action":"social.friends.reject","summary":"Reject a pending friend request."},{"action":"social.friends.cancel","summary":"Cancel outgoing friend request."},{"action":"social.friends.block","summary":"Block a user."},{"action":"social.users.public_cards","summary":"Public display cards for user ids (no friendship check)."},{"action":"social.users.lookup","summary":"Find users by id, email, or @username (no email in response)."},{"action":"social.party_invite.mint","summary":"Mint a short-lived party invite token for a relay room."},{"action":"social.party_invite.verify","summary":"Verify party invite token (no auth required on REST; MCP still needs project context)."},{"action":"social.channel_invites.link_token","summary":"Create shareable link token for a channel (owner)."},{"action":"social.channel_invites.direct","summary":"Create direct channel invite to a user (owner)."},{"action":"social.channel_invites.inbox","summary":"List pending channel invites for the current user."},{"action":"social.channel_invites.accept","summary":"Accept a channel invite from inbox."},{"action":"social.channel_invites.decline","summary":"Decline a channel invite."},{"action":"social.channel_invites.redeem","summary":"Redeem channel invite token."},{"action":"social.federation.add","summary":"Add federated open-channel pointer on consumer project."},{"action":"social.federation.get","summary":"List federation pointers for a consumer project."},{"action":"social.channels.register","summary":"Create a new messenger channel (group chat, DM, or broadcast)."},{"action":"social.channels.update","summary":"Update channel metadata (owner)."},{"action":"social.channels.delete","summary":"Delete a channel (owner) and unpublish from public index."},{"action":"social.channels.list","summary":"List all channels in the home project."},{"action":"social.channels.get","summary":"Get one channel if the current user may access it."},{"action":"social.entities.expand","summary":"Batch-resolve channel/surrogate ids to metadata (max 100 ids)."},{"action":"social.pas.public_me_get","summary":"Read Principal Access public slice for current user on a home project."},{"action":"social.pas.public_me_put","summary":"Replace channels/chats/groups lists in PAS public slice."},{"action":"social.public.quota_get","summary":"Social public index quota for current user."},{"action":"social.public.me","summary":"Public maps from user row (ecosystem.social.public)."},{"action":"social.public.publish","summary":"Publish a channel/chats/groups entry to public index."},{"action":"social.public.unpublish","summary":"Remove a public index entry."},{"action":"social.public.index","summary":"Read a page of the public discovery index."},{"action":"social.public.reconcile","summary":"Reconcile public maps (privileged role only)."},{"action":"social.merge_feed","summary":"Merge read of multiple channel pointers (reader must access each)."},{"action":"social.admin.chat_sweep","summary":"Run one chat history prune batch. Requires ecosystem owner/admin on project 1."},{"action":"social.admin.user_summary","summary":"Operator: aggregate friend/request/block counts and messenger prefs summary for a user_id."},{"action":"social.admin.chat_index_page","summary":"Operator: paginated messenger chat index for a user (cursor/limit)."},{"action":"social.admin.channel_search","summary":"Operator: search channel metadata on a home_project_id by substring (id/title)."},{"action":"social.admin.directory_search","summary":"Operator: unified typeahead — users (8DNA) + channels for a home_project_id."},{"action":"social.admin.messenger_policy_get","summary":"Operator: read messenger retention defaults, stored overrides, and merged effective policy."},{"action":"social.admin.messenger_policy_set","summary":"Operator: replace messenger_operator_policy on ecosystem project (tiers, temp TTL, sweep ceiling)."},{"action":"social.admin.messenger_client_cache_get","summary":"Operator: read messenger client cache limits (defaults, stored overrides, merged effective)."},{"action":"social.admin.messenger_client_cache_set","summary":"Operator: replace data.ecosystem.messenger_client_cache on ecosystem project (media/IDB/OPFS caps)."},{"action":"social.admin.public_index_status","summary":"Operator: public index page or reconcile maps (set reconcile=true)."},{"action":"social.admin.dm_thread_meta","summary":"Operator: DM thread metadata (counts, participants) for support; audited."},{"action":"social.admin.graph_edges","summary":"Operator: list friend and blocked edges for a user (capped)."},{"action":"social.admin.relay_hints","summary":"Operator: static hints for stream relay room naming and diagnostics paths."},{"action":"social.admin.force_delete_message","summary":"Operator: delete a chat message by id from DNA ring (ecosystem owner). Use dry_run first."},{"action":"social.admin.reset_messenger_prefs","summary":"Operator: clear messenger_prefs for a user (reason required)."},{"action":"social.admin.revoke_federation","summary":"Operator: remove a federation pointer from consumer to source channel."},{"action":"social.admin.force_close_channel","summary":"Operator: delete channel metadata from project data_channels (ecosystem owner)."},{"action":"social.chat.delta","summary":"Unified incremental delta for a messenger channel — one call returns new messages,"},{"action":"social.chat.crdt_update","summary":"Apply a Y.js CRDT update to a channel's shared document (bodies / pins / deletes)."},{"action":"social.chat.crdt_state","summary":"Read the current CRDT snapshot + raw updates for a channel."}],"rag":[{"action":"rag.collection_create","summary":"Create a new RAG knowledge base collection for the current project."},{"action":"rag.collection_list","summary":"List all RAG collections for the current project."},{"action":"rag.collection_delete","summary":"Delete a RAG collection and all its documents. This is irreversible."},{"action":"rag.document_add","summary":"Add a text document to a RAG collection."},{"action":"rag.document_list","summary":"List document chunks stored in a collection."},{"action":"rag.document_delete","summary":"Remove a document (all its chunks) from a collection by source_doc_id."},{"action":"rag.search","summary":"Semantic search over a RAG collection."},{"action":"rag.memory_add","summary":"Store a conversation turn in AI memory."},{"action":"rag.memory_get","summary":"Get the most recent conversation turns from memory (chronological order)."},{"action":"rag.memory_search","summary":"Semantically search past conversation turns."}],"buffs":[{"action":"buffs.create_buff","summary":"Create a buff template in PENDING state."},{"action":"buffs.apply_buff","summary":"Apply a buff to an entity (user or project)."},{"action":"buffs.extend_buff","summary":"Extend the duration of an active buff."},{"action":"buffs.revert_buff","summary":"Revert an active buff - restore original state from snapshot."},{"action":"buffs.cancel_buff","summary":"Cancel a buff in any state (force cancellation)."},{"action":"buffs.get_buff","summary":"Get information about a specific buff."},{"action":"buffs.list_active_buffs","summary":"List active buffs for an entity."},{"action":"buffs.get_effective_limits","summary":"Get effective limits for an entity with all buffs applied."},{"action":"buffs.apply_temporary_effect","summary":"Quickly apply a temporary effect (creates and applies buff in one step)."},{"action":"buffs.apply_persistent_effect","summary":"Quickly apply a persistent effect (creates and applies permanent buff)."}],"commerce_rest":[{"action":"rest.marketplace.create_listing","summary":"Create listing (types: sale, buy, exchange, auction). Not an MCP action."},{"action":"rest.marketplace.list_listings","summary":"List marketplace listings with filters."},{"action":"rest.marketplace.place_bid","summary":"Place bid on auction listing."},{"action":"rest.marketplace.accept_listing","summary":"Accept deal / settle listing (may trigger internal payment flow)."},{"action":"rest.marketplace.close_auction","summary":"Close auction listing."},{"action":"rest.exchange.quote","summary":"Cross-project exchange quote (not protein command_type exchange)."},{"action":"rest.exchange.execute","summary":"Execute cross-project currency/asset exchange."}]}}