Dome Systems

Defend Focus Time

Identify meeting overload and recommend calendar changes for human approval.

User
Caller
  • chat
App
Agent
  • defend-focus-time-analyst
Governance
Gateway
  • defend-focus-time-readonly
Pool

defend-focus-time-pool

  • defend-focus-time-model
Tools

google-calendar

    Tools

    gmail

      Tools

      slack

        What this template gives you

        • Interface

          A chat window, in your browser

          Use the included interface to send a request to this template.

        • Gateway

          defend-focus-time-readonly gateway

          This template sends its requests through defend-focus-time-readonly gateway, where its access rules and limits apply.

        • Model

          defend-focus-time-model

          This template uses defend-focus-time-model through the defend-focus-time-pool pool.

        Usage

        Hand this template to an AI agent to set up this template

        Node.js and npm to run npx.

        Dome CLI, installed with brew install dome-systems/tap/dome, then signed in with dome auth login.

        Docker Compose to run the companion app locally.

        1. 1

          Create a workspace

          dome workspaces create --name <workspace-name>

          The CLI creates and selects a workspace context for you.

        2. 2

          Confirm the workspace context

          dome context list

          The workspace you just created is already selected.

        3. 3

          Pull the template

          npx @domesystems/templates pull dome-systems/defend-focus-time@0.1.1 --dir defend-focus-time

          Downloads this immutable release and verifies its digest.

        4. 4

          Run the template

          npx @domesystems/templates up --dir defend-focus-time

          Imports it into Dome and starts the companion app.

        Dome import variables

        npx @domesystems/templates up imports the template into Dome and prompts for required values. For unattended runs, set them as DOME_IMPORT_VAR_… environment variables.

        Required values

        • DOME_IMPORT_VAR_google_oauth_client_id
        • DOME_IMPORT_VAR_google_oauth_client_secret
        • DOME_IMPORT_VAR_anthropic_api_key
        • DOME_IMPORT_VAR_slack_oauth_client_id
        • DOME_IMPORT_VAR_slack_oauth_client_secret

        Setup guide

        Follow this template's setup guidance for agent variables and upstream connections.

        # Set up Defend Focus Time
        
        This is a read-only composite, but it needs a model credential and every listed data source configured before it can run. Set up isolated test accounts or workspaces first, grant only the smallest read scope that exposes the test data, and store every credential only in Dome's secret inputs. Never put a key or secret in this repository, an agent prompt, or a chat message.
        
        ## Create the model credential
        
        - Create an API key in the [Anthropic Console](https://console.anthropic.com/settings/keys).
        - Enter the raw key as `anthropic_api_key` during import. Do not prepend `Bearer `.
        - The template uses that key only for its managed `claude-sonnet-5` model connection.
        
        ## Create the provider credentials
        
        - `google_oauth_client_id`: A Google OAuth client ID for an AI-powered agent.
        - `google_oauth_client_secret`: The Google OAuth client secret.
        - `slack_oauth_client_id`: A Slack app client ID.
        - `slack_oauth_client_secret`: The Slack app client secret.
        
        For a provider that asks you to register a manual OAuth app, use this callback URL exactly:
        
        `https://api.domesystems.ai/oauth/callback`
        
        ## Set up each connected provider
        
        ### Google Calendar
        
        Before import, open [Google Cloud OAuth clients](https://console.cloud.google.com/auth/clients/create) and create a **Web application** OAuth client. Enable **Use this client for an AI-powered agent**, add `https://api.domesystems.ai/oauth/callback` as an authorized redirect URI, and copy the client ID and secret. In **APIs & Services → Library**, enable both **Google Calendar API** and **Google Calendar MCP API** for that same project. Configure the consent screen as **Internal**, or add the test user if it is **External**.
        
        - `google_oauth_client_id` and `google_oauth_client_secret`: enter values from a Google Cloud Web OAuth client configured as an AI-powered agent.
        
        Enable the Calendar and Calendar MCP APIs, register the redirect URI shown by Dome, and retain only the calendar list, free/busy, and event read scopes.
        
        ### Gmail
        
        Before import, open [Google Cloud OAuth clients](https://console.cloud.google.com/auth/clients/create) and create a **Web application** OAuth client. Enable **Use this client for an AI-powered agent**, add `https://api.domesystems.ai/oauth/callback` as an authorized redirect URI, and copy the client ID and secret. In **APIs & Services → Library**, enable both **Gmail API** and **Gmail MCP API** for that same project. Configure the consent screen as **Internal**, or add the test user if it is **External**.
        
        - `google_oauth_client_id` and `google_oauth_client_secret`: enter values from a Google Cloud Web OAuth client configured as an AI-powered agent.
        
        Enable the Gmail and Gmail MCP APIs, add only `gmail.readonly`, and register the redirect URI shown by Dome. Use a test mailbox for the first connection.
        
        ### Slack
        
        Before import, create a Slack app at [api.slack.com/apps](https://api.slack.com/apps). Choose **From scratch**, make it internal to the intended workspace, then copy the client ID and client secret from **Basic Information**. In **OAuth & Permissions**, add `https://api.domesystems.ai/oauth/callback` as a redirect URL. In **Agents**, enable **Slack Model Context Protocol (MCP) Server**. Add only the read/search/history/channel/user scopes requested by this template; do not add any write scope. Install or reinstall the app to the dedicated test workspace after changing scopes.
        
        - `slack_oauth_client_id` and `slack_oauth_client_secret`: enter values from an approved internal Slack app.
        
        In the Slack app's **Agents** section, enable the **Slack Model Context Protocol (MCP) Server** feature. Register Dome's redirect URI and grant only the template's search, history, channel, user, canvas-read, and list-read scopes. Do not add `chat:write`, file-write, canvas-write, or other write scopes.
        
        ## Import and verify
        
        1. Import the template and provide the values above.
        2. Complete every browser OAuth flow with the intended dedicated test user. Token-based sources do not open a browser.
        3. Open **Tools**, refresh discovery, and confirm every connection is attached to the template gateway.
        4. Run the managed agent against known test data. Treat the template as verified only when the run succeeds **and calls at least one expected read-only tool**.
        
        If a connection is unreachable, check the provider section above for its callback, API/MCP enablement, token prefix, consent scopes, and user/workspace access before retrying.

        Runtime environment

        These variables are required to run the agent. During pull, .env.example is copied to .env when available. If they’re missing, npx @domesystems/templates up retrieves them from Dome and saves them in .env. Pass --provision to refresh them.

        DOME_TOKEN=
        DOME_GATEWAY_URL=

        Agent instructions

        You are Defend Focus Time, a read-only assistant. Identify meeting overload and recommend calendar changes for human approval.
        
        Use connected tools only to retrieve information. Do not invoke tools that create, update, delete, send, approve, or change upstream state, even if a provider exposes them. Produce a clear answer with source-specific evidence, confidence, assumptions, and recommended human next steps. When an action is needed, draft or recommend it for a person to perform; do not perform it.