Rytora Composer
The official AI extension suite for Visual Studio Code. Multi-file edit with conversation history, Tab autocomplete, Cmd+K inline edit, four operating modes, project rules, persistent memory, and one-click publish to Vercel/Railway. Works in VS Code, VS Code Insiders, Windsurf, VSCodium, and any Open VSX-compatible editor.
Install#
Three install paths — pick whichever fits your environment:
| Path | How | When to use |
|---|---|---|
| VS Code Marketplace | Search Rytora Code in Extensions, or run code --install-extension rytora.rytora-code | Recommended default |
| Open VSX | Same extension ID: rytora.rytora-code | VS Code OSS / VSCodium / Windsurf |
| Manual VSIX | Download umbrella + 9 leaf packs from the install page | Air-gapped / corporate proxy |
.vsix files — download each from the install page.Requirements
- VS Code 1.96+ (or Insiders / any 1.96+ compatible editor with Open VSX support)
- Network access to
buildlabs.rytora.ai(AI features call our API) - A Rytora BuildLabs account — free to sign up, Pro+ to use AI features
What's in the suite
The umbrella rytora.rytora-code bundles nine extensions:
| Extension | Purpose |
|---|---|
rytora-code-auth | Sign-in, token storage, plan/credits |
rytora-code-composer | Multi-file AI edit, chat, memory, rules |
rytora-code-tab | Inline tab autocomplete |
rytora-code-cmd-k | Cmd+K / Ctrl+K inline edit |
rytora-code-indexing | Tree-sitter symbol index + embeddings |
rytora-code-background-agents | Long-running tasks (file watchers, hooks) |
rytora-code-publish | One-click deploy to Vercel/Railway |
rytora-code-updater | Auto-updater for the Rytora fork build |
rytora-code-welcome | First-run welcome panel |
Sign in with Rytora BuildLabs#
The extension uses your existing Rytora BuildLabs account. AI features (Tab, Cmd+K, Composer, Chat) require Pro+.
- Open the Rytora panel in the Activity Bar (or run
Rytora: Sign in) - Your default browser opens to
https://buildlabs.rytora.ai/code/auth - Complete sign-in (or sign up if needed)
- The browser redirects back to your editor automatically. The extension passes its host's URI scheme (
vscode,vscode-insiders,windsurf, etc.), so the deep link works regardless of which IDE you installed it in. - Token is stored in your OS keychain (Keychain on macOS, Credential Manager on Windows, libsecret on Linux)
Rytora: Paste Sign-in Token.Tab autocomplete#
Inline AI completions appear as ghost text while you type. Press Tab to accept, Esc to reject.
- Triggers automatically 200ms after you stop typing
- Multi-line completions with correct indentation
- Context: ~20 lines before the caret + filename + language
- Cache: same prefix asked twice doesn't hit the API
- Toggle:
Rytora: Toggle Tab Completions
Cmd+K inline edit#
Select code → press ⌘K (macOS) or Ctrl+K (Win/Linux) → describe the change.
- Floating prompt input next to your selection
- History accessible with ↑ / ↓
- Streaming diff inline (added in green, removed in red)
- ⌘↵ accept · Esc reject · ⌘R regenerate
Composer#
Open Composer from the Activity Bar (or ⌘L / Ctrl+L). Describe changes that span multiple files; the AI plans, edits, and shows diffs per file. Composer is the primary surface for the features below (conversation history, memory, rules, thinking).
Modes
Six modes — switch via the popover in the bottom bar (⇧Tab to cycle).
| Mode | Behavior |
|---|---|
| Ask before edits | Every mutating tool (edit/create/delete/terminal) prompts before running |
| Edit automatically (default) | Edits run; destructives still ask |
| Plan mode | Produces a numbered plan, no execution. Plan-specific rules (.rytora/plan_rules.md) inject here. |
| Auto mode | AI picks the best mode for each task |
| ⏵⏵ Bypass permissions | All tool calls run with no prompts — including destructives. Pre-tool hooks/plugins are skipped. Requires explicit confirmation on first activation. |
| Chat | Read-only Q&A about code, no tool execution |
Effort + Extended Thinking
Two independent controls in the Modes popover:
max_tokens. Min uses Haiku 4.5 (~0.3× cost), Mid uses Sonnet 4.6 (baseline), Max uses Sonnet 1M (~1.5× cost).reasoning_effort per preset. Kimi: unsupported (provider limit).Conversation history
The client owns the source of truth for conversation history. On every turn it sends the full prior-turns slice to the server, so the AI sees full context even when subsequent requests land on different pods in a multi-pod deployment. Works identically for all providers (Anthropic, Moonshot/Kimi, OpenAI).
Context usage + auto-compact
A small circular progress pill at the top of Composer shows estimated token usage vs the active model's context window. Tooltip on hover: "X% of context remaining until auto-compact". Click to run /compact — Haiku summarizes old turns. Auto-compact fires at ~85% usage. Colors: gray < 60%, amber 60-80%, red ≥ 80%.
Auto-attach editor context
Composer captures your active editor + selection automatically. A pill at the top toolbar shows the current state:
- Showing 👁 — file/selection will be attached to the next message
- Not showing 👁🗨 — click to toggle on/off (persisted)
<system-reminder> block listing the file path and (if a range is selected) up to 2000 characters of the selection. Updates automatically as you change editor or move your caret.@-mentions
Type @ in the input to attach context manually:
| Mention | Use case |
|---|---|
@<filename> | Include a specific file |
@<symbol> | Include a function/class by name |
@selection | Include current editor selection |
@cursor | Include code around your current caret position in the editor |
@diagnostics | Include all errors/warnings |
@git | Include diff vs HEAD |
@docs | Include workspace docs |
@web | Search web for context |
Model selection
Default is Auto (no credits — a Haiku classifier picks the model). Switch manually via the preset dropdown — Sonnet/Haiku/Opus/Kimi/GPT — but manual selection drains your credit pool. BYOK keys unlock the corresponding models without consuming Rytora credits.
Accept / reject
Each edit appears as a card with diff preview. Accept individually or batch all. Optional: enable auto-branch in settings to create agent-edits-{timestamp} git branch before applying.
Rules#
Rules are markdown files that the AI reads as a constraint on every turn. They're injected as <user_rules> / <project_rules> XML blocks before your prompt.
File locations & precedence
| Path | Scope | Notes |
|---|---|---|
~/.rytora/user_rules.md | User | Applied across all projects |
.rytora/rules.md | Project (canonical) | Recommended — commit to git for team-wide |
.rytorarules | Project (legacy) | Flat-file alternative |
.cursorrules | Project (drop-in compat) | Auto-detected for zero-friction migration |
.github/copilot-instructions.md | Project (drop-in compat) | Auto-detected |
.rytora/rules/*.md | Multi-file | Recursive; concat with file-name headers |
.rytora/rules.local.md | Local (gitignored) | Personal overrides on top of team rules |
.rytora/plan_rules.md | Plan mode only | Injected as system instruction in Plan mode |
Precedence: project primary > multi-file > local. All three layers concatenate. User rules append separately.
@include directive
Compose rules from other files with @<path> on its own line:
| Syntax | Resolves to |
|---|---|
@./relative/path.md | Relative to the rule file's directory |
@~/.rytora/shared/style.md | Relative to your user home |
@/absolute/path/to/rules.md | Absolute filesystem path |
Memory#
Memory is a markdown-based long-term store the AI maintains across sessions. Different from rules — memory holds learned facts, not enforced constraints.
Memory types
e.g. "senior backend engineer, 10y Go"
e.g. "don't mock the DB in tests"
e.g. "auth rewrite driven by SOC2"
e.g. "Linear project INGEST"
File locations
- User memory:
~/.rytora/memory/<name>.md— applies across all projects - Project memory:
.rytora/memory/<name>.md— workspace-scoped (consider gitignoring) - Index:
MEMORY.mdin each directory — one-line pointers to each topic file
File format
--- name: tdd_preference description: User prefers test-driven development type: feedback --- Always write the test first, watch it fail, then implement. **Why:** caught a regression in payment flow because test was retrofitted and ended up testing the bug, not the spec. **How to apply:** when adding new behavior, write the failing test in the same commit as the implementation.
Auto-injection
Both index files (user and project) are injected into every AI turn as a <memory_index> block — the AI sees the list of available topics with their one-line descriptions. When the AI needs the full content of a topic, it calls the memory_recall tool with the file name.
Working with memory
- From Composer: ask the AI to remember something — it'll call
memory_savewith the right type, description, and content automatically - Slash commands:
/memory list,/memory save <name> - Auto-extraction: at the end of long sessions (or on session switch with 30+ messages), Haiku proposes new memories from the conversation. You approve/reject each.
- Manual edit: just open the
.mdfile in your editor — changes take effect on the next turn
Codebase indexing#
Tree-sitter parsers extract symbols (functions, classes, exports) from ~100 languages. Embeddings stored locally for semantic retrieval.
- Initial scan: ~30s for 1k files on SSD
- Incremental: <1s per file save (file watcher)
- Storage:
.rytora/index.dbin your workspace (~10MB per 1k files)
Publish to Vercel/Railway#
Run Rytora: Publish or click the rocket icon. Rytora Code detects your framework automatically:
.rytora/deployments.json. Re-publishes reuse the same project / service.Slash commands#
Type / in the Composer input. Available commands:
| Command | Action |
|---|---|
/compact | Force-compact the conversation now (frees context window) |
/clear | Start a new session (current conversation archived) |
/cost | Show credits + token usage for the current session |
/memory list | List saved memories |
/memory save <name> | Save a new memory interactively |
/doctor | Verify config: rules, memory, BYOK keys, plan |
/parallel | Run multiple sub-agents in parallel (advanced) |
/help | Show all commands |
Settings#
Open ⌘, and search "rytora". Notable settings:
rytora-code.tab.enabled— toggle Tab autocompleterytora-code.tab.debounceMs— debounce time (default 200ms)rytora-code.cmdK.heuristicCutoffLines— Haiku/Sonnet routing thresholdrytora-code.composer.defaultModel— Auto / Sonnet / Haiku / Opus / Kimi / GPTrytora-code.composer.autoBranch— git auto-branch before editsrytora-code.indexing.enabled— toggle codebase indexingrytora-code.indexing.embeddingProvider— Voyage / Nomic / OpenAIrytora-code.updates.channel— stable / beta / alpharytora-code.environment— production / staging / local
BYOK (Bring Your Own Key)
Use your own provider keys instead of Rytora credits — open Rytora: Manage BYOK Keys:
- Anthropic (
sk-ant-…): unlocks Claude Sonnet/Opus/Haiku - Moonshot (
sk-…): unlocks Kimi K2.6 - OpenAI (
sk-…): unlocks GPT-5 series, o-series, Codex
X-User-*-Key request headers — never persisted server-side.Keybindings#
| Action | macOS | Win/Linux |
|---|---|---|
| Cmd+K inline edit | ⌘K | Ctrl+K |
| Open Composer | ⌘L | Ctrl+L |
| Cycle modes | ⇧Tab | Shift+Tab |
| Accept Tab suggestion | Tab | Tab |
| Reject Tab suggestion | Esc | Esc |
| Accept word only | ⌘→ | Ctrl+→ |
| Accept Cmd+K edit | ⌘↵ | Ctrl+↵ |
| Reject Cmd+K edit | Esc | Esc |
| Regenerate Cmd+K edit | ⌘R | Ctrl+R |
| Send Composer message | ⌘↵ | Ctrl+↵ |
Troubleshooting#
"Cannot read the extension" on install
The Marketplace served an old corrupted version because your editor's version is older than the extension's engine requirement. Upgrade to VS Code 1.96+ and re-install:
code --uninstall-extension rytora.rytora-code code --install-extension rytora.rytora-code
Tab not appearing
- Check status bar — does it say "Tab Pro+"? You need Pro+ plan
- Open settings, ensure
rytora-code.tab.enabledis true - Type at least 3 characters on a line (default minimum)
- Wait ~200ms after typing (debounce)
Sign-in browser doesn't redirect back
- Some hosts don't register a URI protocol handler by default
- The page falls back to a copy-token button: click it, then run
Rytora: Paste Sign-in Tokenin your editor - Or use a manual sign-in via API token in Settings → Rytora Code → Auth
Composer agent loop hangs
- Click Stop button in Composer panel (sends AbortSignal to API)
- Check
rytora-code.composer.maxIterationssetting (default 25) - Open Output panel (
View → Output) and select "Rytora Composer" channel for logs
AI "forgets" what we discussed earlier
- Check the context-usage pill — if > 85%, it's auto-compacting. Click it to force-compact manually.
- Verify rules / memory are loaded: run
/doctor - If you opened a new Composer session, history doesn't carry over by design — use
/clearintentionally only.
Bypass mode toggle has no effect on destructive tools
- First-time activation requires confirming a warning modal — if you cancelled, the toggle never enabled
- Look for the
⏵⏵red indicator on the mode button: if absent, Bypass is OFF - Pre-tool hooks are skipped under Bypass; if a hook is still blocking you, reload Composer to pick up the 1.0.5 change
Publish fails detection
- Manually choose strategy: command
Rytora: Publish→ "Choose strategy" - Verify your project has a recognized framework signature
- Container fallback: add a
Dockerfileat the project root
Privacy#
- Microsoft telemetry endpoints fully disabled in this fork
- Rytora telemetry is opt-in (default off, prompted in welcome flow)
- Codebase indexing is local — embeddings (if cloud provider chosen) only send chunks per request, never your full codebase
- AI requests carry only the context you explicitly include (selection / @-mentions / files referenced by Composer)
- BYOK keys travel via per-request headers, never persisted server-side
- Your authentication token is stored in your OS keychain (encrypted at rest)
- Code never leaves your machine unless you invoke an AI feature
Changelog#
See the full changelog page for all releases.
- Lower engine requirement to VS Code 1.96+ (was 1.118+) — install works on stable + Insiders + Windsurf + VSCodium
- Client-authoritative conversation history (multi-pod safe)
- Context-usage pill + auto-compact
- Auto-attach editor file/selection with toggle pill
- Multi-file project rules (
.rytora/rules/*.md) +@includedirective + local rules (rules.local.md) - Memory index injection (user + project) on every turn
- Extended thinking toggle independent of effort
- OpenAI
reasoning_effortmapped from preset for o-series + GPT-5 reasoning - Host-aware sign-in deep-link (VS Code / Insiders / Windsurf / VSCodium / fork)
- Bypass permissions: pre-tool hooks/plugins skipped, first-time warning,
⏵⏵visual indicator - Bottombar overflow menu (progressive collapse → icon →
⋯) - Rich markdown rendering in chat (bold/italic/code/lists/headings/links)
- Modernized Send button + assistant avatar + gradient accents
- Initial beta release
- Tab autocomplete, Cmd+K inline edit, Composer multi-file
- Codebase indexing with Tree-sitter (~100 languages)
- Publish to Vercel/Railway with auto-detection of 25+ frameworks
- Sign in with Rytora BuildLabs via URL handler