Skip to content

capabilities.yaml

Source: config/capabilities.yaml

# Seed capabilities. Loaded at orchestrator startup by SeedCapabilityLoader.
# Each entry UPSERTs a row into the `capability` table.

capabilities:
  - name: product_watch
    description: |
      Monitor a product URL for current price, availability, and the size
      the user wants. Alert when in-stock AND price <= max threshold AND
      required size is available.
    trigger_type: on_schedule
    input_schema:
      type: object
      required: [url]
      properties:
        url:
          type: string
          description: Canonical product URL.
        max_price_usd:
          type: ["number", "null"]
          description: Alert only when in_stock AND price_usd <= this. Null = any price.
        required_size:
          type: ["string", "null"]
          description: Size name (e.g. "L", "42 EU"). Null = any available size counts.
    default_output_shape:
      type: object
      required: [ok, in_stock]
      properties:
        ok: {type: boolean}
        price_usd: {type: ["number", "null"]}
        currency: {type: string}
        in_stock: {type: boolean}
        size_available: {type: boolean}
        triggers_alert: {type: boolean}
        title: {type: string}

  - name: news_check
    description: |
      Monitor RSS/Atom feeds for new items matching user-specified topics.
      Uses prior_run_end to filter items since the last successful run.
      Alerts when new items match any topic in the inputs.
    trigger_type: on_schedule
    input_schema:
      type: object
      required: [feed_urls, topics]
      properties:
        feed_urls:
          type: array
          items: {type: string}
          minItems: 1
          description: "List of RSS/Atom feed URLs to monitor. Each feed is polled and results aggregated."
        topics:
          type: array
          items: {type: string}
          minItems: 1
          description: Topic keywords to match feed items against.
        prior_run_end:
          type: ["string", "null"]
          description: Injected by dispatcher; skill passes to rss_fetch.since.
    default_output_shape:
      type: object
      required: [ok, triggers_alert, message, meta]
      properties:
        ok: {type: boolean}
        triggers_alert: {type: boolean}
        message: {type: ["string", "null"]}
        meta:
          type: object

  - name: email_triage
    description: |
      Scan Gmail for emails from a sender allow-list since the last run,
      classify which need a reply, DM a digest when any do. Depends on the
      gmail_search (+ optional gmail_get_message) tool being registered.
    trigger_type: on_schedule
    input_schema:
      type: object
      required: [senders]
      properties:
        senders:
          type: array
          items: {type: string}
          minItems: 1
          description: Allow-list of sender addresses/domains to scan.
        query_extras:
          type: ["string", "null"]
          description: Optional additional Gmail query fragments.
        prior_run_end:
          type: ["string", "null"]
          description: Injected by dispatcher; encoded into 'after:' filter.
    default_output_shape:
      type: object
      required: [ok, triggers_alert, message, meta]
      properties:
        ok: {type: boolean}
        triggers_alert: {type: boolean}
        message: {type: ["string", "null"]}
        meta:
          type: object

  - name: generate_digest
    description: "Generate morning digest in Donna persona"
    trigger_type: ad_hoc
    tools: [calendar_read, task_db_read]
    input_schema:
      type: object
      properties:
        calendar_events: {type: [array, "null"]}
        tasks_due_today: {type: [array, "null"]}

  - name: prep_research
    description: "Research and compile prep materials for a flagged task"
    trigger_type: ad_hoc
    # web_search deferred until the tool is implemented; see open-backlog.md Wave 1.
    tools: [task_db_read]
    input_schema:
      type: object
      properties:
        title: {type: [string, "null"]}
        description: {type: [string, "null"]}
        domain: {type: [string, "null"]}
        scheduled_start: {type: [string, "null"]}

  - name: task_decompose
    description: "Break a complex task into subtasks with dependencies"
    trigger_type: ad_hoc
    tools: []
    input_schema:
      type: object
      properties:
        title: {type: [string, "null"]}
        description: {type: [string, "null"]}

  - name: extract_preferences
    description: "Extract learned preference rules from correction history"
    trigger_type: ad_hoc
    # notes_read deferred until a notes storage module exists; see open-backlog.md Wave 1.
    tools: [task_db_read]
    input_schema:
      type: object
      properties:
        correction_batch: {type: [array, "null"]}