Files
codetyper.cli/README.md
Carlos Gutierrez a3c407d89a feat: implement hooks, plugins, session forks, and vim motions
Add 4 major features to codetyper-cli:

- Hooks System: Lifecycle hooks (PreToolUse, PostToolUse, SessionStart,
  SessionEnd, UserPromptSubmit, Stop) with exit code control flow
- Plugin System: Custom tools, commands, and hooks via plugin manifest
- Session Forking: Snapshots, rewind, fork, and switch between branches
- Vim Motions: Normal/Insert/Command/Visual modes with keyboard navigation

New files:
- src/types/{hooks,plugin,session-fork,vim}.ts
- src/constants/{hooks,plugin,session-fork,vim}.ts
- src/services/{hooks-service,plugin-loader,plugin-service,session-fork-service}.ts
- src/stores/vim-store.ts (vanilla)
- src/tui/hooks/{useVimMode,useVimStore,useTodoStore,useThemeStore}.ts
- src/tui/components/VimStatusLine.tsx

Modified:
- src/services/agent.ts (hook integration)
- src/tools/index.ts (plugin tool registration)
- src/stores/{todo-store,theme-store}.ts (converted to vanilla)
- TUI components (updated hook imports)
2026-01-31 22:22:04 -05:00

400 lines
9.7 KiB
Markdown

# CodeTyper CLI
An AI-powered terminal coding agent with an interactive TUI. CodeTyper autonomously executes coding tasks using tool calls with granular permission controls and intelligent provider routing.
![CodeTyper Welcome Screen](assets/CodetyperLogin.png)
## How It Works
CodeTyper is an autonomous coding agent that runs in your terminal. You describe what you want to build or fix, and CodeTyper:
1. **Analyzes** your request and breaks it into steps
2. **Executes** tools (bash, read, write, edit) to accomplish the task
3. **Asks permission** before modifying files or running commands
4. **Learns** from your project to provide context-aware assistance
### Cascading Provider System
CodeTyper uses an intelligent provider routing system:
```
User Request
|
v
[Detect Task Type] --> code_generation, bug_fix, refactoring, etc.
|
v
[Check Ollama Score] --> Quality score from past interactions
|
v
[Route Decision]
|
+-- High Score (85%+) --> Ollama Only (trusted)
|
+-- Low Score (40%-) --> Copilot Only (needs improvement)
|
+-- Medium Score --> Cascade Mode
|
v
[1. Ollama generates response]
|
v
[2. Copilot audits for issues]
|
v
[3. Update quality scores]
|
v
[Return best response]
```
Over time, CodeTyper learns which provider performs best for different task types.
## Installation
**Requires [Bun](https://bun.sh) runtime** (v1.0.0+)
```bash
# Install Bun if you don't have it
curl -fsSL https://bun.sh/install | bash
# Install globally via npm
npm install -g codetyper-cli
# Or install from source
git clone https://github.com/CarGDev/codetyper.cli.git
cd codetyper.cli
bun install && bun run build && bun link
# Login to a provider
codetyper login copilot
# Start interactive chat
codetyper
```
## Features
### Interactive TUI
Full-screen terminal interface with real-time streaming responses.
![CodeTyper Status View](assets/CodetyperView.png)
**Key bindings:**
- `Enter` - Send message
- `Shift+Enter` - New line
- `/` - Open command menu
- `Ctrl+Tab` - Toggle interaction mode
- `Ctrl+T` - Toggle todo panel
- `Shift+Up/Down` - Scroll log panel
- `Ctrl+C` (twice) - Exit
### Vim Motions
Optional vim-style keyboard navigation for power users. Enable in settings.
**Normal Mode:**
- `j/k` - Scroll down/up
- `gg/G` - Jump to top/bottom
- `Ctrl+d/u` - Half page scroll
- `/` - Search, `n/N` - Next/prev match
- `i` - Enter insert mode
- `:` - Command mode (`:q` quit, `:w` save)
**Configuration:**
```json
{
"vim": {
"enabled": true,
"startInNormalMode": true
}
}
```
### Command Menu
Press `/` to access all commands organized by category.
![Command Menu](assets/CodetyperMenu.png)
**Available Commands:**
| Category | Command | Description |
|----------|---------|-------------|
| General | `/help` | Show available commands |
| General | `/clear` | Clear conversation history |
| General | `/exit` | Exit the chat |
| Session | `/save` | Save current session |
| Session | `/context` | Show context information |
| Session | `/usage` | Show token usage statistics |
| Session | `/remember` | Save a learning about the project |
| Session | `/learnings` | Show saved learnings |
| Settings | `/model` | Select AI model |
| Settings | `/agent` | Select agent |
| Settings | `/mode` | Switch interaction mode |
| Settings | `/provider` | Switch LLM provider |
| Settings | `/status` | Show provider status |
| Settings | `/theme` | Change color theme |
| Settings | `/mcp` | Manage MCP servers |
| Account | `/whoami` | Show logged in account |
| Account | `/login` | Authenticate with provider |
| Account | `/logout` | Sign out from provider |
### Agent Mode with Diff View
When CodeTyper modifies files, you see a clear diff view of changes.
![Agent Mode with Diffs](assets/CodetyperAgentMode.png)
**Interaction Modes:**
- **Agent** - Full access, can modify files
- **Ask** - Read-only, answers questions
- **Code Review** - Review PRs and diffs
### Permission System
Granular control over what CodeTyper can do. Every file operation requires approval.
![Permission Modal](assets/CodetyperPermissionView.png)
**Permission Scopes:**
- `[y]` Yes, this once
- `[s]` Yes, for this session
- `[a]` Always allow for this project
- `[g]` Always allow globally
- `[n]` No, deny this request
### Model Selection
Access to multiple AI models through GitHub Copilot.
![Model Selection](assets/CodetyperCopilotModels.png)
**Available Models:**
- GPT-5, GPT-5-mini (Unlimited)
- GPT-5.2-codex, GPT-5.1-codex
- Grok-code-fast-1
- And more...
### Theme System
14+ built-in themes to customize your experience.
![Theme Selection](assets/CodetyperThemes.png)
**Available Themes:**
default, dracula, nord, tokyo-night, gruvbox, monokai, catppuccin, one-dark, solarized-dark, github-dark, rose-pine, kanagawa, ayu-dark, cargdev-cyberpunk
## Providers
| Provider | Models | Auth Method | Use Case |
|----------|--------|-------------|----------|
| **GitHub Copilot** | GPT-5, Claude, Gemini | OAuth (device flow) | Cloud-based, high quality |
| **Ollama** | Llama, DeepSeek, Qwen, etc. | Local server | Private, offline, zero-cost |
### Cascade Mode
When both providers are available, CodeTyper can use them together:
1. **Ollama** processes the request first (fast, local)
2. **Copilot** audits the response for issues
3. Quality scores update based on audit results
4. Future requests route based on learned performance
Check provider status with `/status`:
```
═══ Provider Status ═══
Current Provider: copilot
Cascade Mode: Enabled
Ollama:
Status: ● Available
Quality Score: 72%
Copilot:
Status: ● Available
```
## Configuration
Settings are stored in `~/.config/codetyper/config.json`:
```json
{
"provider": "copilot",
"model": "auto",
"theme": "default",
"cascadeEnabled": true,
"maxIterations": 20,
"timeout": 30000
}
```
### Project Context
CodeTyper reads project-specific context from:
- `.github/` - GitHub workflows and templates
- `.codetyper/` - Project-specific rules and learnings
- `rules.md` - Custom instructions for the AI
## CLI Usage
```bash
# Start interactive TUI
codetyper
# Start with a prompt
codetyper "Create a REST API with Express"
# Continue last session
codetyper --continue
# Resume specific session
codetyper --resume <session-id>
# Use specific provider
codetyper --provider ollama
# Print mode (non-interactive)
codetyper --print "Explain this codebase"
```
## Tools
CodeTyper has access to these built-in tools:
| Tool | Description |
|------|-------------|
| `bash` | Execute shell commands |
| `read` | Read file contents |
| `write` | Create or overwrite files |
| `edit` | Find and replace in files |
| `glob` | Find files by pattern |
| `grep` | Search file contents |
| `lsp` | Language Server Protocol operations |
| `web_search` | Search the web |
| `todo-read` | Read current todo list |
| `todo-write` | Update todo list |
### MCP Integration
Connect external MCP (Model Context Protocol) servers for extended capabilities:
```bash
# In the TUI
/mcp
# Then add a new server
```
## Extensibility
### Hooks System
Lifecycle hooks for intercepting tool execution and session events.
**Hook Events:**
- `PreToolUse` - Validate/modify before tool execution
- `PostToolUse` - Side effects after tool execution
- `SessionStart` - At session initialization
- `SessionEnd` - At session termination
- `UserPromptSubmit` - When user submits input
- `Stop` - When execution stops
**Configuration** (`.codetyper/hooks.json`):
```json
{
"hooks": [
{ "event": "PreToolUse", "script": ".codetyper/hooks/validate.sh", "timeout": 5000 },
{ "event": "PostToolUse", "script": ".codetyper/hooks/notify.sh" }
]
}
```
**Exit Codes:**
- `0` - Allow (optionally output `{"updatedInput": {...}}` to modify args)
- `1` - Warn but continue
- `2` - Block execution
### Plugin System
Extend CodeTyper with custom tools, commands, and hooks.
**Plugin Structure:**
```
.codetyper/plugins/{name}/
├── plugin.json # Manifest
├── tools/
│ └── *.ts # Custom tool definitions
├── commands/
│ └── *.md # Slash commands
└── hooks/
└── *.sh # Plugin-specific hooks
```
**Manifest** (`plugin.json`):
```json
{
"name": "my-plugin",
"version": "1.0.0",
"tools": [{ "name": "custom_tool", "file": "tool.ts" }],
"commands": [{ "name": "mycommand", "file": "cmd.md" }]
}
```
**Custom Tool Definition:**
```typescript
import { z } from "zod";
export default {
name: "custom_tool",
description: "Does something",
parameters: z.object({ input: z.string() }),
execute: async (args, ctx) => ({ success: true, title: "Done", output: "..." }),
};
```
### Session Forking
Branch and rewind session history for experimentation.
**Commands:**
| Command | Description |
|---------|-------------|
| `/snapshot [name]` | Create checkpoint |
| `/rewind [n\|name]` | Go back to snapshot |
| `/fork [name]` | Branch current session |
| `/forks` | List all forks |
| `/switch [name]` | Switch to fork |
Sessions are stored in `.codetyper/sessions/` with automatic commit message suggestions.
## Development
```bash
# Watch mode
bun run dev
# Type check
bun run typecheck
# Build
bun run build
# Run tests
bun test
# Lint
bun run lint
```
## Documentation
- [Changelog](docs/CHANGELOG.md) - Version history and changes
- [Contributing](docs/CONTRIBUTING.md) - How to contribute
## License
MIT - See [LICENSE](LICENSE) for details.