Skip to main content

Extensions

Extend Summon's functionality with custom extensions. Add new commands, integrate with third-party services, or create specialized workflows.

What Are Extensions?

Extensions are Python modules that add new functionality to Summon. They can:

  • Add custom search providers
  • Create new commands with rich previews
  • Integrate with APIs and external services
  • Handle forms and user input
  • Execute shell commands and scripts

Installing Extensions

Manual Installation

  1. Download the extension folder
  2. Place it in ~/.summon/extensions/
  3. Restart Summon or refresh extensions in Settings

Extension Structure

Each extension is a folder containing:

Code
my-extension/
├── manifest.json    # Extension metadata and config
├── main.py          # Entry point
└── icons/           # Optional custom icons

Built-in Extensions

Obsidian Workspace

Quickly switch between Obsidian vaults and open recent notes.

Features:

  • Search all vaults
  • Open recent notes
  • Quick vault switching

Notes Viewer

Browse and search your Quick Notes directly from Summon.

Quick Note

Create new notes instantly without leaving Summon.

Creating Extensions

Want to create your own extension? Check out the Creating Extensions guide.

Extension Capabilities

Extensions can use these features:

  • Rich Previews: Markdown, metadata tables, forms, code blocks
  • Multiple Actions: Open URLs, copy text, run commands, paste text
  • Form Handling: Text fields, selects, checkboxes, and more
  • SF Symbols: Native macOS icons
  • Keyboard Shortcuts: Custom hotkeys for extension items

Permissions

Extensions declare permissions in their manifest:

| Permission | Description | |------------|-------------| | shell | Execute shell commands | | storage | Persistent storage | | clipboard | Read/write clipboard | | network | Make HTTP requests |

Extension Settings

Extensions can define configuration options in their manifest using config_schema. Users can modify these settings in Settings → Extensions → [Extension Name].

Example configuration:

JSON
{
  "config_schema": {
    "api_key": {
      "type": "string",
      "description": "Your API key",
      "default": ""
    },
    "max_results": {
      "type": "number",
      "description": "Maximum results to show",
      "default": 10
    }
  }
}

Runtime Modes

Extensions can run in different modes:

| Mode | Description | |------|-------------| | persistent | Stays running, faster responses | | on_demand | Starts when triggered, lower memory |

Configure the mode in manifest.json with the runtime field.