Skip to main content

GitHub Integration

Connect a GitHub repository to automatically sync your organization's configuration. When enabled, your toolkits, skills, commands, MCP servers, MCP clients, and plugins are stored as code in your repository, so you can version control and track changes.

info

Only organization-level entities (without specific owners) are synced to GitHub. User-specific or private entities remain in the database only.

Configure it under Admin > Settings > Git Integration, which also supports Bitbucket.

What Gets Synced​

The GitHub integration syncs the following entity types:

Entity TypeDirectoryFormatNotes
Toolkitstoolkits/JSON filesOne file per toolkit
Commandscommands/JSON filesOne file per command
MCP Serversmcp-servers/JSON filesAuth credentials excluded for security
MCP Clientsmcp-clients/JSON filesOne file per client
Skillsskills/Directory per skillContains SKILL.md, scripts, references
Pluginsplugins/Directory per pluginOne plugins/{slug}/ folder per plugin, containing its platform manifest plus bundled skills, commands, rules, hooks, sub-agents, and MCP config
Sensitive Data

Authentication settings for MCP servers (API keys, secrets, OAuth credentials) are never synced to GitHub for security reasons. Only the configuration structure is synced.

Overview​

The GitHub integration uses a GitHub App for authentication, which provides:

  • Granular permissions: Only access to specific repositories
  • Better security: More secure than Personal Access Tokens
  • Webhook support: Automatic bidirectional sync when changes are pushed to GitHub
  • Organization-level: Recommended for team collaboration

How It Works​

Automatic Sync (Database → GitHub)​

When you create or update any entity in your admin panel:

  1. The entity is saved to the database
  2. A background job pushes the change to GitHub
  3. A commit is created with descriptive message

Supported operations:

  • Toolkits: Synced as toolkits/{slug}.json
  • Commands: Synced as commands/{slug}.json
  • Skills: Synced as directory skills/{slug}/ with SKILL.md, scripts, references, and assets
  • MCP Servers: Synced as mcp-servers/{slug}.json (auth credentials excluded)
  • MCP Clients: Synced as mcp-clients/{slug}.json
  • Plugins: Synced as directory plugins/{slug}/ with the platform manifest and the plugin's bundled skills, commands, rules, hooks, sub-agents, and MCP config

Webhook Sync (GitHub → Database)​

When you push changes directly to GitHub:

  1. GitHub sends a webhook notification
  2. Your application validates the webhook signature
  3. Modified files are detected and classified by type
  4. Files are parsed and entities are updated in the database
  5. Invalid files are tracked with error details in the entity record

File detection:

  • JSON files (*.json) in respective directories are parsed directly
  • Skill directories are reconstructed from all files in skills/{slug}/
  • Plugin directories are reconstructed from all files in plugins/{slug}/
Importing plugins from an external repo

The bidirectional sync above keeps a connected repository and Willow in step. To pull plugins from other GitHub repositories on demand or on a daily schedule, see Sync Plugins from GitHub.

What to do next​

Additional Resources​