Commands
In-conversation commands and the command line.
Command Reference
These commands are typed into the conversation itself and work on both the proxy path and the REST path. They are detected case-insensitively and intercepted before the request reaches the model.
| Command | Purpose |
|---|---|
VCATTACH <label|id> | Reattach the current session to another conversation by label or ID |
VCLABEL <name> | Label the current conversation; no argument shows the current label |
VCSTATUS | Show conversation ID, label, turns, segments, working set and active tags |
VCRECALL <query> | Search stored context and promote matching topics into the working set |
VCCOMPACT | Force immediate compaction |
VCLIST | List conversations with labels and turn counts |
VCFORGET <tag> | Delete the segments and summaries stored for a tag |
VCMERGE INTO <target> | Merge this conversation into another |
VCMERGESTATUS | Report merge progress |
VCATTACH
VCATTACH <label-or-id>Reattach the current session to another stored conversation. This is the mechanism for cross-platform memory: build context in one client, then attach from another and both enrich the same conversation.
How it works. VCATTACH writes a durable alias redirecting the current conversation identity to the target. Later requests arriving under the old identity resolve through the alias, so retrieval, compaction and new turns all operate on the target. The old conversation is not deleted; its identity simply routes to the target from then on. Stale markers in older assistant responses keep working because they follow the alias chain.
Attaching is a redirect, not a merge. It does not copy segments or facts between conversations. To combine two conversations’ stored data, use VCMERGE.
Typical uses are cross-platform continuity, several agents sharing one fact base and topic index, and recovering a conversation after its identity detaches through a system prompt change, client truncation or redeploy.
VCLABEL
VCLABEL MyProjectNameGive the conversation a human-readable name, used by VCLIST and the dashboard sessions panel. The label is stored as session metadata and survives restarts on durable storage. Calling it with no argument reports the current label.
VCSTATUS
Reports conversation ID and label, turn count and compaction watermark, context window fill, stored segment count and total tokens, the active working set, and all known tags in the store. The output is structured text the model can relay directly.
VCRECALL
VCRECALL the database migration discussionRuns lexical and semantic search over stored conversation text, reports the matches, and promotes up to five matched tags into the working set so the next turn’s assembly includes them.
VCCOMPACT
Runs the same compaction pipeline that fires automatically at thresholds, but immediately. Useful before a long stretch of work when you want budget freed up front. Protected recent turns are still preserved.
VCLIST
Lists stored conversations with their labels and turn counts.
VCFORGET
VCFORGET <tag>Permanently deletes the segments and summaries stored under a tag, for topics that are stale or sensitive. The argument must be an existing tag name, matched case-insensitively; if it is not found, the response lists the available tags.
VCMERGE and VCMERGESTATUS
Where VCATTACH redirects, a merge moves the source conversation’s stored data into the target. VCMERGE PREVIEW <target> previews the operation and VCMERGESTATUS reports progress.
In the standalone proxy these commands are recognized but fail closed with an explanatory message rather than executing, because merge execution requires a deployment that intercepts the command ahead of the proxy, such as the hosted service. Failing closed is deliberate: a merge must never be silently dropped, nor forwarded to the model as ordinary text.
Detection
Commands are matched in the user message text. Detection is case-insensitive, so any capitalization works. The command and its argument must form the whole message, aside from transport metadata the proxy strips automatically. Detection runs on both the proxy path, streaming and non-streaming, and on direct REST calls.
Importing Conversation History
The import command ingests conversation exports from other assistants into the store, so someone migrating to virtual-context arrives with their history already indexed, tagged and retrievable.
virtual-context import --provider chatgpt --input conversation.json
virtual-context import --provider claude --input ~/exports/ # every *.json inside
virtual-context import --provider grok --input export.json --compact--provider is required and takes chatgpt, claude or grok; each adapter parses that service’s native export JSON. --input is required and takes either a single export file or a directory, whose *.json files are imported in sorted order, with empty files skipped and counted. --compact runs compaction after the import; without it, imported turns are ingested and tagged and summarization happens later through the normal thresholds.
Each imported conversation keeps its own ID from the export, so separate source conversations stay separate in the store.
CLI Reference
The virtual-context command line is a separate surface from the in-conversation commands above.
| Subcommand | Purpose |
|---|---|
proxy | Start the HTTP proxy |
daemon install|status|start|stop|restart|uninstall | Manage the proxy as a background service |
onboard | Guided setup: create and validate a config, optionally install the daemon |
init <preset> | Generate a config from a preset |
presets list|show <name> | List or inspect config presets |
config validate | Validate the config file |
status | Show tag stats and token usage |
tags | List all tags in the store |
recall <tag> | Recall stored context by tag |
retrieve -m <msg> | Retrieve context for a message, JSON output |
transform -m <msg> | Retrieve and assemble a context block |
compact | Trigger manual compaction |
aliases list|suggest|add | Manage tag aliases |
chat | Interactive chat; –headless –replay for scripted runs |
import | Import conversation history from exports |
telemetry / cost-report | Show conversation telemetry and cost |
admin <subcommand> | Operational primitives: backfills and repairs |
Admin Subcommands
virtual-context admin hosts guarded operational commands for backfilling and repairing stored data. They operate directly on the store, support explicit database targeting, and are designed to be idempotent. Run virtual-context admin <subcommand> --help for the flags each takes.
| Subcommand | Purpose |
|---|---|
backfill-tag-summaries | Materialize missing tag summaries |
backfill-fact-embeddings | Write embeddings for facts predating embedding storage |
backfill-senders | Recover sender labels on canonical turns |
backfill-channels | Recover channel provenance on canonical turns |
backfill-actors | Recover durable actor IDs from retained raw user text |
backfill-reply-roles | Recover reply roles and audience provenance |
backfill-fact-authors | Re-distill facts with canonical actor provenance |
backfill-session-state-markers | Rebuild session-restore markers from canonical rows |
rebuild-actor-cards | Rebuild per-actor card caches |
rebuild-derived-data | Rebuild derived data for a conversation |
reattribute-audience | Correct audience attribution on stored rows |
resummarize-segments | Re-run summarization for stored segments |
resequence-canonical-turns | Repair canonical turn ordering |
normalize-canonical-actor-ids | Normalize actor ID formats on canonical rows |
reindex-canonical-turn-embeddings | Rebuild canonical turn embedding indexes |
retag-canonical-turns | Re-tag stored turns with pair context |
Common admin flags
Two opposite safety models exist across these commands. Know which one you are invoking. Assuming the wrong one either writes when you expected a report, or reports when you expected a write.
- Write by default, take
--dry-runto report instead:backfill-senders,backfill-channels,backfill-actors,backfill-reply-roles,backfill-fact-authors,rebuild-actor-cards,retag-canonical-turns,backfill-session-state-markers. - Dry-run by default, take
--applyto write:reattribute-audience,rebuild-derived-data,resummarize-segments,resequence-canonical-turns,normalize-canonical-actor-ids,reindex-canonical-turn-embeddings. backfill-tag-summariesandbackfill-fact-embeddingstake--force-rebuildto regenerate rows that already exist.
| Flag | Meaning |
|---|---|
--postgres-dsn <dsn> | Target Postgres, overriding the config |
--sqlite-path <path> | Target SQLite, overriding the config |
--tenant-id <id> | Tenant to operate on; empty means single-tenant |
--all-convs-for-tenant | Enumerate every conversation owning canonical rows for the tenant instead of naming one |
--limit N | Cap rows upgraded per conversation, or conversations enumerated |
--platform <name> | Actor commands only: operator-asserted platform for conversations whose keys never named one. Never inferred |
Storage resolution precedence: an explicit storage flag beats -c, which beats the DATABASE_URL environment variable. The environment fallback is consulted only when neither a storage flag nor a config was given, so a bare invocation works inside a container that has the environment set and no config file mounted.
Other notable flags
retrieve and transform take -m for the inbound message and --active-tags to simulate a working set, with transform also accepting --budget. recall takes --limit. init takes --force to overwrite an existing config.