v1.0.5 · live

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.

💬
Composer
Multi-file AI edit with persistent history, memory and rules.
Tab + Cmd+K
Inline autocomplete and selection-scoped edits with diff preview.
🧠
Modes + Thinking
Plan / Agent / Chat / Bypass with independent extended-thinking toggle.
🚀
One-click publish
Vercel / Railway / Fly.io with auto-framework detection.
Setup

Install#

Three install paths — pick whichever fits your environment:

PathHowWhen to use
VS Code MarketplaceSearch Rytora Code in Extensions, or run code --install-extension rytora.rytora-codeRecommended default
Open VSXSame extension ID: rytora.rytora-codeVS Code OSS / VSCodium / Windsurf
Manual VSIXDownload umbrella + 9 leaf packs from the install pageAir-gapped / corporate proxy
Air-gapped install
The umbrella pack alone only resolves leaf extensions online (Marketplace / Open VSX). Offline you need all 10 .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:

ExtensionPurpose
rytora-code-authSign-in, token storage, plan/credits
rytora-code-composerMulti-file AI edit, chat, memory, rules
rytora-code-tabInline tab autocomplete
rytora-code-cmd-kCmd+K / Ctrl+K inline edit
rytora-code-indexingTree-sitter symbol index + embeddings
rytora-code-background-agentsLong-running tasks (file watchers, hooks)
rytora-code-publishOne-click deploy to Vercel/Railway
rytora-code-updaterAuto-updater for the Rytora fork build
rytora-code-welcomeFirst-run welcome panel
Auth

Sign in with Rytora BuildLabs#

The extension uses your existing Rytora BuildLabs account. AI features (Tab, Cmd+K, Composer, Chat) require Pro+.

  1. Open the Rytora panel in the Activity Bar (or run Rytora: Sign in)
  2. Your default browser opens to https://buildlabs.rytora.ai/code/auth
  3. Complete sign-in (or sign up if needed)
  4. 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.
  5. Token is stored in your OS keychain (Keychain on macOS, Credential Manager on Windows, libsecret on Linux)
No protocol handler?
If the redirect doesn't fire (locked-down env), the page falls back to a copy-token flow — paste it via Command Palette → Rytora: Paste Sign-in Token.
Pro+ only
Don't have an account? Sign up free. Pro+ starts at $25/month with unlimited Tab + Auto Mode + credits for premium models.
Inline

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
Pro+ only
Free users see no inline suggestions.
Selection-scoped

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
Note
Auto-routed: short selections (<50 lines) use Haiku 4.5; longer use Sonnet 4.6.
Multi-file edit

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).

ModeBehavior
Ask before editsEvery mutating tool (edit/create/delete/terminal) prompts before running
Edit automatically (default)Edits run; destructives still ask
Plan modeProduces a numbered plan, no execution. Plan-specific rules (.rytora/plan_rules.md) inject here.
Auto modeAI picks the best mode for each task
⏵⏵ Bypass permissionsAll tool calls run with no prompts — including destructives. Pre-tool hooks/plugins are skipped. Requires explicit confirmation on first activation.
ChatRead-only Q&A about code, no tool execution

Effort + Extended Thinking

Two independent controls in the Modes popover:

Effort slider
Min / Mid / Max — controls model selection and max_tokens. Min uses Haiku 4.5 (~0.3× cost), Mid uses Sonnet 4.6 (baseline), Max uses Sonnet 1M (~1.5× cost).
💡
Thinking toggle
Extended thinking on/off, independent of Effort. Default ON. Anthropic: native thinking budget. OpenAI: 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)
Note
When sharing, the message is prefixed with a <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:

MentionUse case
@<filename>Include a specific file
@<symbol>Include a function/class by name
@selectionInclude current editor selection
@cursorInclude code around your current caret position in the editor
@diagnosticsInclude all errors/warnings
@gitInclude diff vs HEAD
@docsInclude workspace docs
@webSearch 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.

Constraints

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

PathScopeNotes
~/.rytora/user_rules.mdUserApplied across all projects
.rytora/rules.mdProject (canonical)Recommended — commit to git for team-wide
.rytorarulesProject (legacy)Flat-file alternative
.cursorrulesProject (drop-in compat)Auto-detected for zero-friction migration
.github/copilot-instructions.mdProject (drop-in compat)Auto-detected
.rytora/rules/*.mdMulti-fileRecursive; concat with file-name headers
.rytora/rules.local.mdLocal (gitignored)Personal overrides on top of team rules
.rytora/plan_rules.mdPlan mode onlyInjected as system instruction in Plan mode

Precedence: project primary > multi-file > local. All three layers concatenate. User rules append separately.

Auto-reload
Edit any rule file mid-session and the change takes effect on the next turn (mtime-based invalidation — no restart needed).

@include directive

Compose rules from other files with @<path> on its own line:

SyntaxResolves to
@./relative/path.mdRelative to the rule file's directory
@~/.rytora/shared/style.mdRelative to your user home
@/absolute/path/to/rules.mdAbsolute filesystem path
Note
Recursive with a depth limit of 5 to prevent cycles. Missing files emit a placeholder comment in the injected block.
Long-term

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

👤
user
Your role, preferences, knowledge level.
e.g. "senior backend engineer, 10y Go"
📝
feedback
Corrections + validations you've given.
e.g. "don't mock the DB in tests"
📌
project
Ongoing work context.
e.g. "auth rewrite driven by SOC2"
🔗
reference
Pointers to external systems.
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.md in 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_save with 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 .md file in your editor — changes take effect on the next turn
Local

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.db in your workspace (~10MB per 1k files)
🟢
Tier 1 — built-in
TypeScript · JavaScript · Python · Go · Rust · Java · C/C++ · Ruby · PHP
🟡
Tier 2 — lazy load
C# · Swift · Kotlin · Scala · Dart · Lua · Bash · CSS · HTML · YAML · JSON · TOML · SQL · Haskell · Elixir · Erlang · OCaml · Clojure · F# · R · Julia · Zig · Nix · Elm
🟠
Tier 3 — on demand
Vue · Svelte · Astro · GraphQL · Terraform · HCL · Dockerfile · Vim
Fallback
Text-chunking by line count + indentation heuristic for any other language
Deploy

Publish to Vercel/Railway#

Run Rytora: Publish or click the rocket icon. Rytora Code detects your framework automatically:

Frontend / SSR → Vercel
Next.js · Nuxt · Remix · SvelteKit · Astro · TanStack Start · Qwik · SolidStart · Vite (React/Vue/Svelte/Solid/Preact) · Angular · Static HTML
🚂
Backends → Railway
Node (Express/Fastify/NestJS/Hono/Koa) · Python (FastAPI/Flask/Django/Litestar) · Go (net-http/Gin/Fiber/Echo) · Rust (Axum/Actix/Rocket) · Ruby (Rails/Sinatra) · Java (Spring) · Kotlin (Ktor) · .NET · PHP (Laravel/Symfony)
🐳
Container → Railway / Fly.io
Dockerfile-detected projects deploy as containers. If Prisma/Django/Rails detected, PostgreSQL is auto-provisioned.
🔁
Re-publish
Deployment history persists in .rytora/deployments.json. Re-publishes reuse the same project / service.
Composer

Slash commands#

Type / in the Composer input. Available commands:

CommandAction
/compactForce-compact the conversation now (frees context window)
/clearStart a new session (current conversation archived)
/costShow credits + token usage for the current session
/memory listList saved memories
/memory save <name>Save a new memory interactively
/doctorVerify config: rules, memory, BYOK keys, plan
/parallelRun multiple sub-agents in parallel (advanced)
/helpShow all commands
Config

Settings#

Open ⌘, and search "rytora". Notable settings:

  • rytora-code.tab.enabled — toggle Tab autocomplete
  • rytora-code.tab.debounceMs — debounce time (default 200ms)
  • rytora-code.cmdK.heuristicCutoffLines — Haiku/Sonnet routing threshold
  • rytora-code.composer.defaultModel — Auto / Sonnet / Haiku / Opus / Kimi / GPT
  • rytora-code.composer.autoBranch — git auto-branch before edits
  • rytora-code.indexing.enabled — toggle codebase indexing
  • rytora-code.indexing.embeddingProvider — Voyage / Nomic / OpenAI
  • rytora-code.updates.channel — stable / beta / alpha
  • rytora-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
Security
Keys are stored in your OS keychain and sent only via X-User-*-Key request headers — never persisted server-side.
Reference

Keybindings#

ActionmacOSWin/Linux
Cmd+K inline edit⌘KCtrl+K
Open Composer⌘LCtrl+L
Cycle modes⇧TabShift+Tab
Accept Tab suggestionTabTab
Reject Tab suggestionEscEsc
Accept word only⌘→Ctrl+→
Accept Cmd+K edit⌘↵Ctrl+↵
Reject Cmd+K editEscEsc
Regenerate Cmd+K edit⌘RCtrl+R
Send Composer message⌘↵Ctrl+↵
Fix

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

  1. Check status bar — does it say "Tab Pro+"? You need Pro+ plan
  2. Open settings, ensure rytora-code.tab.enabled is true
  3. Type at least 3 characters on a line (default minimum)
  4. Wait ~200ms after typing (debounce)

Sign-in browser doesn't redirect back

  1. Some hosts don't register a URI protocol handler by default
  2. The page falls back to a copy-token button: click it, then run Rytora: Paste Sign-in Token in your editor
  3. Or use a manual sign-in via API token in Settings → Rytora Code → Auth

Composer agent loop hangs

  1. Click Stop button in Composer panel (sends AbortSignal to API)
  2. Check rytora-code.composer.maxIterations setting (default 25)
  3. Open Output panel (View → Output) and select "Rytora Composer" channel for logs

AI "forgets" what we discussed earlier

  1. Check the context-usage pill — if > 85%, it's auto-compacting. Click it to force-compact manually.
  2. Verify rules / memory are loaded: run /doctor
  3. If you opened a new Composer session, history doesn't carry over by design — use /clear intentionally only.

Bypass mode toggle has no effect on destructive tools

  1. First-time activation requires confirming a warning modal — if you cancelled, the toggle never enabled
  2. Look for the ⏵⏵ red indicator on the mode button: if absent, Bypass is OFF
  3. 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

  1. Manually choose strategy: command Rytora: Publish → "Choose strategy"
  2. Verify your project has a recognized framework signature
  3. Container fallback: add a Dockerfile at the project root
Security

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
Release notes

Changelog#

See the full changelog page for all releases.

v1.0.5
2026-05-12 · current
  • 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) + @include directive + local rules (rules.local.md)
  • Memory index injection (user + project) on every turn
  • Extended thinking toggle independent of effort
  • OpenAI reasoning_effort mapped 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
v1.0.0-beta.1
2026-05-03
  • 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
Help

Support#