This guide gets you productive in Late in under 5 minutes.
- Setup
- Interface
- Giving Good Instructions
- Tool Approval
- Configuration
- MCP Integration
- Agent Skills
- File Exclusions
- Common Flags
- Sessions
- Git Worktrees
1. Set your endpoint (any OpenAI-compatible API, e.g. llama.cpp, DeepSeek, Google, Anthropic, OpenRouter):
# Local (e.g. llama.cpp)
export OPENAI_BASE_URL="http://localhost:8080"
# Cloud (e.g. DeepSeek)
export OPENAI_BASE_URL="https://api.deepseek.com/"
export OPENAI_API_KEY="your-api-key"
export OPENAI_MODEL="deepseek-v4-pro"Windows: Use your preferred shell's syntax for all environment variables for example
$env:OPENAI_BASE_URL="http://localhost:8080"in PowerShell.
2. Launch Late from your project directory:
cd your-project
latemacOS: If macOS blocks the binary, run this command in your terminal (adjust the path if needed):
xattr -d com.apple.quarantine ~/.local/bin/late
3. Hybrid Routing (Optional): By default, Late uses the same model for both the Lead Architect (orchestrator) and the ephemeral workers (subagents). You can mix and match models by setting separate environment variables. Check the Configuration section to find out how to persist these settings.
This is useful for using a large, smart model for planning and a fast, cheap model for execution:
export LATE_SUBAGENT_MODEL="gemma-4-e4b"
export LATE_SUBAGENT_BASE_URL="http://10.8.0.2:8080" # (Optional) falls back to OPENAI_BASE_URL
export LATE_SUBAGENT_API_KEY="your-other-key" # (Optional) falls back to OPENAI_API_KEYLate is a terminal UI with three areas: the chat viewport (scrollable history), the input box (bottom), and the status bar (shows mode, status, token count, and available keybindings).
| Key | Action |
|---|---|
Enter |
Send your message (Alt+Enter for a new line) |
↑ ↓ PgUp PgDn |
Scroll chat viewport |
Home / End |
Move cursor to line start/end (scrolls chat viewport if input is empty) |
Shift+Home/End |
Scroll chat viewport to top/bottom |
Tab |
Switch between agent tabs (orchestrator ↔ subagents) |
Ctrl+A |
Open the file picker to attach files |
Ctrl+X |
Clear all attached files |
Ctrl+H |
Show keyboard help overlay |
Esc / Ctrl+G |
Stop the current agent (cancel generation) |
Ctrl+D / Ctrl+C |
Quit Late |
Double-click |
Copy message to clipboard |
Tip: Late supports standard terminal editing like
Alt+Arrows(word jump), andAlt+Backspace/Del(delete word).
Type / into the input box to bring up a command picker. You can navigate through the available commands with the Up/Down arrow keys and select one by pressing Enter. You do not have to type out the full command.
| Command | Description |
|---|---|
/clear |
Clear current session. |
/rewind |
Open a visual history of your messages to rewind the conversation to an earlier point. |
/compose |
Open your system's default external editor ($EDITOR) to draft long or complex instructions. |
/log |
Open the Git commit log viewer. |
/help |
Show default keybindings. |
/quit |
Exit Late. |
Press Ctrl+A to open the file picker. Navigate with arrow keys, press Enter to select a file or enter a folder, Backspace to go up, and Esc to cancel.
- Text files (source code, configs, logs, etc.) are attached as inline content and work with all models.
- Images (PNG, JPEG, etc.) are only allowed if the model supports vision. Late checks the actual file content (not the extension) to determine the file type. If you try to attach an image to a model without vision support, Late will reject it with an error.
Attached files appear in the status bar as a green counter. Use Ctrl+X to clear all attachments before sending. Attachments are automatically cleared after you send a message.
When Late spawns subagents, each one gets its own tab. Use Tab to cycle through them:
- Main — the orchestrator (Lead Architect). It plans and delegates.
- Subagent tabs — ephemeral workers executing isolated tasks. They appear when spawned and disappear when finished.
The status bar at the bottom shows which agent you're currently viewing and its state (Idle, Thinking, Streaming, etc.).
Tip: If a subagent seems stuck, switch to it with
Tabto see what it's doing. You can stop it withEscorCtrl+Gwithout affecting the orchestrator.
Late works best with clear, specific instructions. Some examples:
# Good
Add input validation to the CreateUser handler in api/users.go.
Check for empty email and name fields, return 400 with a JSON error.
# Good
Refactor the database package to use connection pooling.
The pool config should come from environment variables.
# Bad
Make the code better.
Late will read your codebase, plan the implementation, and ask you for approval. Make sure to read the generated implementation plan (./implementation_plan.md) and the intended changes before approving.
When the agent wants to run a command or edit a file, you'll see a confirmation prompt:
The agent wants to execute a bash command.
{"command":"npm run build"}
> Press [y] Allow once | [s] Allow always (session) | [p] Allow always (project) | [g] Allow always (global) | [n] Deny
- Read-only commands (
ls,cat,grep, etc.) are auto-approved for speed (Note: the listed commands can still require permission if Late deems the agents activity suspicious) - Everything else requires explicit approval.
- Use
[y] Allow onceto approve only this single tool call. - Use
[s] Allow always (session)to auto-approve matching requests for the rest of the current session. - Use
[p] Allow always (project)to remember approval for this project. - Use
[g] Allow always (global)to remember approval across all projects on this machine. - Use
[n] Denyto block the request.
This keeps one-off actions safe while reducing repetitive prompts when you trust a tool in a broader scope.
Tip: Approval keys (
y,n, etc.) only work if the input box is empty. If you have already started typing a message, Late will prioritize your text. You can send your message first (it will be queued and processed after the tool call finishes) and then use the single-key shortcuts once the input box is cleared.
"Always" approvals are not permanent. Late uses TTL (time-to-live) so trust decays over time:
- Session scope (
[s]) lasts 30 minutes. - Project scope (
[p]) lasts 30 days. - Global scope (
[g]) lasts 30 days.
When a TTL expires, the approval is automatically ignored and Late will prompt you again. This is intentional: it reduces long-lived stale permissions while keeping day-to-day workflows smooth.
Notes:
- Re-approving a tool/command in the same scope refreshes its TTL.
- Session approvals are in-memory and expire quickly by design.
- Project/global approvals are persisted with an expiry timestamp and checked at load time.
You can set your preferred model selection (orchestrator, subagents) and their respective configuration (host, keys) permanently inside the config.json.
File Locations:
- Linux:
~/.config/late/config.json - macOS:
~/Library/Application Support/late/config.json - Windows:
%APPDATA%\late\config.json
Setting Precedence:
- Non-empty environment variables
config.json- Defaults
{
"openai_base_url": "http://localhost:8080",
"openai_api_key": "your-api-key",
"openai_model": "qwen3.6-35b-a3b",
"late_subagent_base_url": "http://10.8.0.2:8080",
"late_subagent_api_key": "your-other-api-key",
"late_subagent_model": "gemma-4-e4b"
}Late supports the Model Context Protocol. Add your MCP servers to one of the following locations:
- Global (Linux):
~/.config/late/mcp_config.json - Global (macOS):
~/Library/Application Support/late/mcp_config.json - Global (Windows):
%APPDATA%\late\mcp_config.json - Project-local:
.late/mcp_config.json
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "my-mcp-server"]
}
}
}Skills are reusable sets of instructions. They are discovered automatically from:
- Global (Linux):
~/.config/late/skills/ - Global (macOS):
~/Library/Application Support/late/skills/ - Global (Windows):
%APPDATA%\late\skills\ - Project:
.late/skills/
There is no further setup required. Just add your skills to the directories and they will be discovered automatically. Late also supports automatic skill reference discovery.
Late's native search tool respects your project's .gitignore automatically, saving LLM context by excluding vendor and build directories.
You can also create an .llmignore file alongside your .gitignore to specifically hide files from the agent (e.g., secrets, large binaries, test fixtures, or generated code) without affecting your git tracking.
| Flag | Description |
|---|---|
--help |
Show all flags and commands |
--version |
Show version information |
--continue |
Resume the previous session |
--gemma-thinking |
Inject thinking tokens for Gemma 4 models |
--subagent-max-turns <n> |
Set max turns per subagent (default: 500) |
--append-system-prompt "..." |
Append text to the system prompt (e.g. further instructions) |
--enable-images |
Treat models as supporting images (for none llama.cpp servers) |
Late automatically saves your session history. Resume or manage sessions:
late session list # List all saved sessions
late session list -v # Verbose listing with details
late session load <id> # Resume a previous session
late session delete <id> # Delete a sessionLate is designed for parallel development. You can manage Git worktrees directly to run separate agent instances in isolated environments:
late worktree list # List all worktrees
late worktree active # Show current worktree
late worktree create <path> [br] # Create a new worktree at <path>
late worktree remove <path> # Remove a worktreeTip: Use worktrees when you want Late to work on a feature in the background while you continue working on another branch.