loading…
Search for a command to run...
loading…
TypeScript toolkit for Claude Code development — tool-integrated hook types with a runner plus a types generator for MCP tools and subagent state saving
TypeScript toolkit for Claude Code development — tool-integrated hook types with a runner plus a types generator for MCP tools and subagent state saving
A curated marketplace of plugins that extend Claude Code with typed hooks for development workflows. This repository provides both ready-to-use plugins and shared TypeScript utilities for creating your own.
This marketplace contains three production-ready plugins designed for modern development workflows:
All plugins leverage shared TypeScript utilities for consistent behavior, comprehensive type safety, and automatic logging. Hooks are self-executable TypeScript files with full type definitions.
.claude/settings.json:{
"extraKnownMarketplaces": {
"constellos": {
"source": {
"source": "directory",
"path": "./.claude-plugin"
}
}
}
}
claude plugin install github-orchestration@constellos
claude plugin install nextjs-supabase-ai-sdk-dev@constellos
claude plugin install project-context@constellos
Or enable them in your settings:
{
"enabledPlugins": {
"github-orchestration@constellos": true,
"nextjs-supabase-ai-sdk-dev@constellos": true,
"project-context@constellos": true
}
}
github-orchestration)Purpose: Comprehensive GitHub workflow orchestration for issue-driven development with automatic context discovery and commit enhancement.
Key Features:
Hooks:
install-github.ts) - Installs GitHub CLI (non-blocking)add-github-context.ts) - Displays branch issue context and sync status (non-blocking)sync-plan-to-issue.ts) - Syncs plan files to GitHub issues (non-blocking)enhance-commit-context.ts) - Enriches commits with task metadata (non-blocking)commit-task.ts) - Auto-commits agent work (non-blocking)commit-session-check-pr-status.ts) - Session commit and PR checks (progressive blocking)Use Cases:
Documentation: plugins/github-orchestration/README.md
nextjs-supabase-ai-sdk-dev)Purpose: Enforces code quality through automated checks at both file and project levels for Next.js, Supabase, and AI SDK projects.
Key Features:
Hooks:
install-vercel.ts, install-supabase.ts) - CLI installation (non-blocking)log-task-call.ts) - Task context logging (non-blocking)log-task-result.ts) - Task result logging (non-blocking)encourage-ui-review.ts) - UI review encouragement (non-blocking)check-file-eslint.ts) - ESLint on files (non-blocking, informational)check-file-types.ts) - TypeScript on files (non-blocking, informational)check-file-tsdoc.ts) - TSDoc validation (non-blocking, informational)check-file-vitest-results.ts) - Test execution (non-blocking, informational)check-global-eslint.ts) - Project-wide ESLint (blocking)check-global-types.ts) - Project-wide TypeScript (blocking)check-global-vitest-results.ts) - Full test suite (blocking)Use Cases:
Documentation: plugins/nextjs-supabase-ai-sdk-dev/README.md
project-context)Purpose: Automatically discovers and links documentation, validates project structure, and provides intelligent guidance for Claude Code workflows.
Key Features:
Hooks:
encourage-context-review.ts) - Context update encouragement (non-blocking)log-task-call.ts) - Task logging (non-blocking)validate-folder-structure-write.ts) - Folder validation (blocking on violations)validate-rules-file.ts) - Rules validation (blocking on errors)validate-folder-structure-mkdir.ts) - mkdir validation (blocking on invalid paths)try-markdown-page.ts) - Markdown URL preference (non-blocking)log-task-result.ts) - Task result logging (non-blocking)create-plan-symlink.ts) - Plan symlink creation (non-blocking)enforce-plan-scoping.ts) - Plan scope enforcement (can block)add-folder-context.ts) - Context discovery (non-blocking)enforce-plan-scoping.ts) - Read scope guidance (non-blocking)Use Cases:
Documentation: plugins/project-context/README.md
.
├── .claude-plugin/
│ └── marketplace.json # Marketplace definition
│
├── shared/ # Shared utilities for all plugins
│ ├── types/
│ │ └── types.ts # Hook type definitions
│ ├── hooks/
│ │ ├── utils/ # Hook utilities (I/O, debug, etc.)
│ │ ├── log-task-call.ts # PreToolUse[Task] hook
│ │ ├── log-task-result.ts # PostToolUse[Task] hook
│ │ ├── validate-folder-structure-write.ts
│ │ ├── validate-folder-structure-mkdir.ts
│ │ ├── validate-rules-file.ts
│ │ └── enforce-plan-scoping.ts
│ └── rules/ # Rule documentation
│
└── plugins/ # Individual marketplace plugins
├── github-orchestration/
│ ├── .claude-plugin/plugin.json
│ ├── README.md
│ └── hooks/
│ ├── hooks.json
│ ├── install-github.ts
│ ├── add-github-context.ts
│ ├── sync-plan-to-issue.ts
│ ├── enhance-commit-context.ts
│ ├── commit-task.ts
│ └── commit-session-check-pr-status.ts
│
├── nextjs-supabase-ai-sdk-dev/
│ ├── .claude-plugin/plugin.json
│ ├── README.md
│ └── hooks/
│ ├── hooks.json
│ ├── install-vercel.ts
│ ├── install-supabase.ts
│ ├── check-file-eslint.ts
│ ├── check-file-types.ts
│ ├── check-file-tsdoc.ts
│ ├── check-file-vitest-results.ts
│ ├── encourage-ui-review.ts
│ ├── check-global-eslint.ts
│ ├── check-global-types.ts
│ └── check-global-vitest-results.ts
│
└── project-context/
├── .claude-plugin/plugin.json
├── README.md
└── hooks/
├── hooks.json
├── encourage-context-review.ts
├── add-folder-context.ts
├── create-plan-symlink.ts
└── try-markdown-page.ts
mkdir -p plugins/my-plugin/.claude-plugin
mkdir -p plugins/my-plugin/hooks
plugin.json{
"name": "my-plugin",
"version": "0.1.0",
"description": "My custom plugin",
"author": { "name": "your-name" }
}
hooks/hooks.jsonImportant: Hooks must be wrapped in a "hooks" object.
{
"description": "My plugin hooks",
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "npx tsx ${CLAUDE_PLUGIN_ROOT}/hooks/my-hook.ts"
}
]
}
]
}
}
hooks/my-hook.tsimport type { SessionStartInput, SessionStartHookOutput } from '../../../shared/types/types.js';
import { runHook } from '../../../shared/hooks/utils/io.js';
async function handler(input: SessionStartInput): Promise<SessionStartHookOutput> {
return {
hookSpecificOutput: {
hookEventName: 'SessionStart',
additionalContext: 'My hook executed!',
},
};
}
export { handler };
runHook(handler);
{
"plugins": [
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
]
}
Document your plugin following the official Claude Code patterns. See existing plugin READMEs for examples.
All plugins can import from the shared/ folder for consistent behavior:
shared/types/types.ts)Full TypeScript typing for all Claude Code hook events:
shared/hooks/utils/)runHook wrapper with automatic logging.claude/logs/hook-events.jsonnpm run typecheck # TypeScript type checking
npm run lint # ESLint
npm run test # Vitest
npm run test:watch # Vitest watch mode
Enable debug output:
DEBUG=* claude # All debug output
DEBUG=plugin-name claude # Specific plugin
Debug logs are written to .claude/logs/hook-events.json in JSONL format.
After editing plugin files:
Issue: Plugins don't appear in Claude Code or hooks don't fire
Solution:
.claude/settings.json has correct marketplace path and enabled plugins~/.claude/plugins/cache/claude plugin uninstall --scope project my-plugin@constellos
claude plugin install --scope project my-plugin@constellos
Issue: Hooks registered but not executing
Solution:
hooks.json has correct format with "hooks" wrapper object.claude/logs/hook-events.json for hook execution logs${CLAUDE_PLUGIN_ROOT} variableRequires NEW session (exit and restart Claude Code):
.claude/settings.jsonRequires plugin REINSTALL (no session restart needed):
hooks/hooks.jsonReinstall command:
claude plugin uninstall --scope project my-plugin@constellos
claude plugin install --scope project my-plugin@constellos
cw)This repository includes claude-worktree.sh, a utility script that creates isolated git worktrees for Claude Code sessions. Each session gets its own branch and worktree, enabling parallel development without conflicts.
~/.claude-worktrees/{repo}/{branch-name}claude-kind-marmot-s7y8gh44origin/main or origin/masterowner/repo pathAdd to your ~/.bashrc or ~/.zshrc:
# Claude Worktree launcher with tab completion
source ~/constellos/claude-code/claude-worktree.sh
Then reload your shell:
source ~/.bashrc # or source ~/.zshrc
You'll see: cw: Claude worktree command ready (tab completion enabled)
# From current directory
cw
# Jump to a repo by name (searches ~/constellos, ~/celestian-dev, ~/)
cw lazyjobs
cw nodes-md
# Jump to a repo by owner/name
cw celestian-dev/lazyjobs
cw constellos/claude-code
# Pass CLI flags to Claude
cw --verbose
cw lazyjobs --no-context
cw laz<TAB> # → lazyjobs
cw celestian-dev/<TAB> # → shows all repos in ~/celestian-dev/
cw con<TAB> # → constellos/
The script searches these directories (in order):
~/constellos/~/celestian-dev/~/~/.claude-worktrees/{repo}/{branch-name}git - Git version controljq - JSON processor (optional, for plugin cache refresh)Install jq if needed:
# macOS
brew install jq
# Ubuntu/Debian
sudo apt install jq
The nodes-md project includes a custom MCP server built with Elysia and Supabase. This serves as a reference implementation for building MCP servers with the Bun runtime.
~/constellos/nodes-md/apps/mcp/
├── src/
│ └── index.ts # MCP server implementation
├── package.json # Dependencies
└── tsconfig.json # TypeScript config
| Tool | Description |
|---|---|
hello |
Simple hello world test tool |
create_nodeset |
Create a new nodeset in the database |
cd ~/constellos/nodes-md/apps/mcp
bun install
bun run src/index.ts
SUPABASE_URL=your-supabase-url
SUPABASE_SECRET_KEY=your-service-role-key
PORT=3001 # Optional, defaults to 3001
This implementation demonstrates:
Comprehensive documentation:
Skills documentation in .claude/skills/:
MIT
Contributions welcome! Please ensure:
shared/types/types.tsnpm test)npm run typecheck)npm run lint)Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"claude-code-kit": {
"command": "npx",
"args": [
"-y",
"@constellos/claude-code-kit"
]
}
}
}