This skill should be used when the user asks to "tabby plugin", "install tabby plugin", "tabby extension", "develop tabby plugin", "tabby plugin api", "tabby marketplace", or mentions discovering, installing, or developing plugins for Tabby terminal.
From tabby-devnpx claudepluginhub nthplusio/functional-claude --plugin tabby-devThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Discover, install, and develop plugins for Tabby terminal.
Plugins are installed through the Tabby Settings UI:
Plugins can also be configured in config.yaml:
plugins:
- name: "tabby-docker"
version: "latest"
- name: "tabby-save-output"
version: "latest"
| Plugin | Description |
|---|---|
| tabby-docker | Connect to Docker containers |
| tabby-quick-cmds | Send commands to multiple tabs simultaneously |
| tabby-save-output | Record terminal output to file |
| tabby-workspace-manager | Save and restore workspace layouts |
| Plugin | Description |
|---|---|
| tabby-background | Custom background images |
| tabby-highlight | Keyword highlighting in terminal output |
| tabby-title-control | Customize tab titles |
| Plugin | Description |
|---|---|
| tabby-sftp-tab | SFTP file browser tab |
| tabby-sync-config | Sync config via Gist or Gitee |
| tabby-search-in-browser | Search selected text in browser |
| tabby-mcp-server | Model Context Protocol AI integration |
Tabby plugins are npm packages built with Angular and TypeScript.
tabby-my-plugin/
├── package.json # npm manifest with tabby keywords
├── tsconfig.json # TypeScript configuration
├── webpack.config.js # Webpack build configuration
├── src/
│ ├── index.ts # Module entry point
│ ├── components/ # Angular components
│ └── services/ # Angular services
└── README.md
{
"name": "tabby-my-plugin",
"version": "1.0.0",
"description": "My Tabby plugin",
"keywords": ["tabby-plugin"],
"main": "dist/index.js",
"scripts": {
"build": "webpack --mode production",
"dev": "webpack --mode development --watch"
},
"peerDependencies": {
"tabby-core": "*",
"tabby-terminal": "*"
},
"devDependencies": {
"@angular/core": "^17.0.0",
"typescript": "^5.0.0",
"webpack": "^5.0.0"
}
}
Required: The tabby-plugin keyword is needed for plugin discovery.
// src/index.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
@NgModule({
imports: [CommonModule],
declarations: [],
providers: [],
})
export default class MyPluginModule {
// Plugin initialization
}
import { NgModule } from '@angular/core';
import { TabRecoveryProvider, NewTabParameters } from 'tabby-core';
@Injectable()
export class MyTabRecoveryProvider extends TabRecoveryProvider {
async recover(token: any): Promise<NewTabParameters | null> {
// Recover tab state after restart
return null;
}
}
@NgModule({
providers: [
{ provide: TabRecoveryProvider, useClass: MyTabRecoveryProvider, multi: true },
],
})
export default class MyPluginModule {}
import { ConfigProvider, Platform } from 'tabby-core';
@Injectable()
export class MyConfigProvider extends ConfigProvider {
defaults = {
myPlugin: {
enabled: true,
option1: 'default',
},
};
platformDefaults = {
[Platform.Windows]: {},
[Platform.macOS]: {},
[Platform.Linux]: {},
};
}
import { TerminalDecorator, BaseTerminalTabComponent } from 'tabby-terminal';
@Injectable()
export class MyTerminalDecorator extends TerminalDecorator {
attach(tab: BaseTerminalTabComponent): void {
// Subscribe to terminal events
tab.sessionChanged$.subscribe(() => {
// React to session changes
});
tab.output$.subscribe(data => {
// Process terminal output
});
}
detach(tab: BaseTerminalTabComponent): void {
// Cleanup
}
}
import { HotkeyProvider, HotkeyDescription } from 'tabby-core';
@Injectable()
export class MyHotkeyProvider extends HotkeyProvider {
hotkeys: HotkeyDescription[] = [
{
id: 'my-plugin:action',
name: 'My Plugin Action',
},
];
}
| Concept | Description |
|---|---|
TabRecoveryProvider | Restore tab state after restart |
ConfigProvider | Define default configuration |
TerminalDecorator | Hook into terminal events |
HotkeyProvider | Register custom hotkeys |
ToolbarButtonProvider | Add toolbar buttons |
ProfileProvider | Add new profile types |
SettingsTabProvider | Add settings UI sections |
npm link in plugin dir, npm link tabby-my-plugin in Tabbynpm run build or npm run dev for watch modetabby-plugin keyword in package.jsonnpm run buildnpm publishFull API reference: https://docs.tabby.sh/