glooit
v0.6.4
Published
π§΄ Sync your AI agent configurations and rules across platforms with ease
Downloads
727
Maintainers
Readme
glooit π§΄
Sync AI coding assistant configurations across Claude Code, Cursor, Codex, OpenCode, and Roo Code/Cline.
- Rules - Agent instructions and guidelines
- Commands - Custom slash commands
- Skills - Reusable agent capabilities
- Agents - Custom agent definitions
- MCP Servers - Model Context Protocol configurations
- Agent Hooks - Lifecycle hooks for Claude Code and Cursor
Why glooit?
Teams today use different AI coding assistants - some prefer Claude Code, others use Cursor, OpenCode, and CI/CD might run on Codex. Each tool has its own config format and location:
- Claude Code reads
CLAUDE.md, commands in.claude/commands/, skills in.claude/skills/ - Cursor uses
.cursor/rules/*.mdcwith frontmatter, commands in.cursor/commands/ - OpenCode expects
AGENTS.md, commands in.opencode/command/, agents in.opencode/agent/ - Codex expects
AGENTS.md - Roo Code/Cline looks in
.roo/rules/
glooit lets you write your rules once and sync them everywhere. Perfect for:
- Multi-agent teams - Everyone uses their preferred AI assistant with consistent rules
- Monorepos - Different rules for different packages, all managed centrally
- CI/CD pipelines - Same rules in development and automation
- Evolving tooling - Switch or add AI assistants without rewriting configs
Install
# Homebrew (macOS/Linux)
brew tap nikuscs/glooit https://github.com/nikuscs/glooit
brew install glooit
# npm
npm install -g glooit
# bun
bun install -g glooit
# pnpm
pnpm install -g glooitQuick Start
glooit init # Create config
glooit sync # Sync rules to all agentsConfiguration
Create .glooit/main.md with your rules, then configure glooit.config.ts:
import { defineRules } from 'glooit';
export default defineRules({
rules: [
{
file: '.glooit/main.md',
to: './',
targets: ['claude', 'cursor', 'codex']
}
]
});Run glooit sync (or bunx glooit sync / npx glooit sync) and it creates:
CLAUDE.mdfor Claude Code.cursor/rules/main.mdcfor CursorAGENTS.mdfor Codex
Supported Agents
| Agent | Output Path | Format |
|-------|-------------|--------|
| claude | CLAUDE.md | Markdown |
| cursor | .cursor/rules/{name}.mdc | Frontmatter |
| codex | AGENTS.md | Markdown |
| opencode | AGENTS.md | Markdown |
| roocode | .roo/rules/{name}.md | Markdown |
| generic | {name}.md | Markdown |
Feature Support Matrix
| Feature | Claude | Cursor | OpenCode | Codex | Roo Code/Cline | Generic | |-------------|--------|--------|----------|-------|----------------|---------| | Rules | β | β | β | β | β | β | | Commands | β | β | β | - | - | - | | Skills | β | β | β* | - | - | - | | Agents | β | β | β | - | - | - | | MCP Servers | β | β | β | β | β | β | | Hooks | β | β | - | - | - | - |
*OpenCode uses Claude-compatible skills path (.claude/skills/)
Features
Custom Paths
Override output locations per-agent:
{
file: '.glooit/backend.md',
to: './',
targets: [
'claude',
{ name: 'cursor', to: './backend/.cursor/rules/api.mdc' }
]
}Directory Sync
Sync commands, skills, and agents directories at the top level:
export default defineRules({
rules: [...],
// Simple string path (defaults to claude, cursor, opencode)
commands: '.glooit/commands',
// Or with explicit targets
skills: {
path: '.glooit/skills',
targets: ['claude']
},
agents: {
path: '.glooit/agents',
targets: ['claude', 'cursor']
}
});Output mappings:
commandsβ.claude/commands,.cursor/commands,.opencode/commandskillsβ.claude/skills,.cursor/skills(OpenCode uses.claude/skills)agentsβ.claude/agents,.cursor/agents,.opencode/agent
File Merging
Combine multiple files into one output:
{
file: [
'.glooit/coding-standards.md',
'.glooit/testing-guidelines.md'
],
to: './',
targets: [
{ name: 'claude', to: './GUIDELINES.md' }
]
}Globs (Cursor)
Limit rule scope to specific files:
{
file: '.glooit/frontend.md',
to: './apps/frontend',
globs: 'src/**/*.{ts,tsx}',
targets: ['cursor']
}Transforms
Transform content during sync using placeholders in your source files.
Source file (.glooit/main.md):
# Project Guidelines
Last updated: __TIMESTAMP__
## Project Structure
__STRUCTURE__
## Environment
- Node version: __NODE_VERSION__
- API URL: __API_URL__Config (glooit.config.ts):
import { defineRules, transforms } from 'glooit';
export default defineRules({
rules: [
{
file: '.glooit/main.md',
to: './',
targets: ['claude'],
hooks: ['replaceStructure', 'addTimestamp', 'replaceEnv']
}
],
transforms: {
after: [transforms.compact({ removeFillerWords: true })]
}
});Built-in transforms:
| Transform | Placeholder | Description |
|-----------|-------------|-------------|
| addTimestamp | __TIMESTAMP__ | Replaced with current date/time |
| replaceEnv | __ENV_VAR__ | Replaced with process.env.ENV_VAR value |
| replaceStructure | __STRUCTURE__ | Replaced with project directory tree |
| compact | - | Cleans up markdown (removes filler words, extra newlines) |
Usage:
- Per-rule transforms: Add
hooks: ['transformName']to individual rules - Global transforms: Add to
transforms.afterarray to run on all rules
Agent Hooks
Configure lifecycle hooks that run inside Claude Code and Cursor when the AI uses tools.
export default defineRules({
rules: [...],
hooks: [
// Run prettier after file edits
{
event: 'afterFileEdit',
command: 'npx prettier --write',
targets: ['claude', 'cursor']
},
// Run a TypeScript script before shell commands
{
event: 'beforeShellExecution',
script: '.glooit/hooks/check-command.ts',
targets: ['claude']
},
// Block writes to sensitive files
{
event: 'PreToolUse',
script: '.glooit/hooks/block-env-writes.ts',
matcher: 'Edit|Write', // Claude Code matcher
targets: ['claude']
}
]
});Supported events:
| Event | Claude Code | Cursor | Description |
|-------|-------------|--------|-------------|
| PreToolUse | β | - | Before tool execution (can block) |
| PostToolUse | β | - | After tool completion |
| beforeShellExecution | β | β | Before shell commands |
| afterFileEdit | β | β | After file modifications |
| Stop | β | β | When agent finishes |
Script types:
.tsfiles: Run withbun run.jsfiles: Run withnode.shfiles: Run directly
MCP Configuration
Configure Model Context Protocol servers:
export default defineRules({
rules: [...],
mcps: [
{
name: 'postgres',
config: {
command: 'uvx',
args: ['mcp-server-postgres'],
env: { DATABASE_URL: process.env.DATABASE_URL }
},
targets: ['claude', 'cursor']
}
]
});Backup
Automatic backups before sync:
export default defineRules({
rules: [...],
backup: {
enabled: true,
retention: 10
}
});Commands
glooit init # Initialize configuration
glooit sync # Sync rules and MCPs
glooit validate # Validate configuration
glooit clean # Clean .gitignore entries
glooit reset --force # Remove all generated files
glooit upgrade # Upgrade glooit to latest version
glooit backup list # List available backups
glooit backup restore <timestamp> # Restore from backupUpgrade
The upgrade command auto-detects your package manager and whether glooit is installed locally or globally:
glooit upgrade # Auto-detect and upgrade
glooit upgrade -g # Force global upgrade
glooit upgrade -l # Force local upgradeAll commands work with npx, bunx, or pnpx:
npx glooit sync
bunx glooit sync
pnpx glooit syncExamples
See examples/full.config.ts for a complete configuration with all features.
Development
# Install dependencies
bun install
# Run tests
bun run test
# Type check and lint
bun run check
# Build
bun run build
# Build local binary
bun run install:localReleasing
bun run releaseThis runs checks, prompts for version bump, creates a git tag, and pushes. CI handles npm publish and GitHub release automatically.
Credits
Without these amazing projects, this project would not be possible.
- Antfu for the amazing packages
- Ruler Inspiration for the project & ideas
- Claude for the amazing AI that made this project possible in a few hours.
License
MIT
