dismodels for VS Code
Chat and agent mode on shared-revenue AI models — open base models plus
LoRA adapters that other people trained and published. You pay per token, the
trainer whose adapter you used earns a cut, and there is no Copilot
subscription and no GitHub sign-in involved.
If you train models, the same extension is where you compile a corpus into an
adapter and publish it.
What you get
- dismodels models in VS Code's own model picker. Chat, agent mode, tool
calling, multi-file edits and context gathering are the editor's, not a
reimplementation in a side panel.
- Community adapters, priced honestly. Adapters appear as
@handle/name, and the rate you see already includes the trainer's premium.
There is no second number to add.
- Per-token billing, no seat. Nothing is charged for having the extension
installed.
- A trainer sidebar. Your collected data, training runs and unpublished
adapters, with publishing in the editor.
Requires VS Code 1.105 or newer and a dismodels account. The account is
free to create; sign-in opens the page for you.
Getting started
- Install the extension.
- Run dismodels: Sign in from the Command Palette
(
Ctrl+Shift+P / Cmd+Shift+P).
- A browser opens. Sign in or create an account, then approve the editor.
You are never asked to copy or paste a token.
- Open Chat (
Ctrl+Alt+I / Cmd+Ctrl+I) and choose a dismodels model from
the picker.
If the picker looks empty, you are not signed in yet — VS Code populates it
silently and cannot prompt you from there. Run dismodels: Sign in and
reopen it.
Using the models
Base models are listed under their usual names. Adapters are listed as
@handle/name with the all-in rate in the detail line.
Agent mode works. Switch Chat to Agent and the model can read files, run
the host's tools and apply edits, because this extension registers as a model
provider and VS Code drives its own agent loop on top. Stop cancels the stream
immediately, so a cancelled answer stops costing money.
dismodels: Manage models and account shows what this installation is
holding: how many models you are entitled to, how many of them are adapters,
your spend cap, and when the connection key renews.
For trainers: lessons
Lessons live in your workspace, in .dismodels/lessons/lessons.jsonl: one JSON lesson per
line, in the same format as a lesson pack.
{"id": "…", "trigger": "adding a Python dependency", "guidance": "Use uv add, not pip install.", "klass": "promotable"}
| Command |
What it does |
| dismodels: New lesson |
Asks for the trigger, guidance and class (prefilled from your selection) and appends a line |
| dismodels: Toggle chat capture for this workspace |
Records chats with dismodels models into .dismodels/captured/. Off by default. Secrets are redacted before anything is written, the folder is git-ignored, and captures are never uploaded. A .dismodels/nocapture file in a repository turns it off for everyone. |
| dismodels: Distil lessons from captured chats |
Sends the exchanges you pick to a model you choose (an ordinary call on your account), then lets you keep the lessons it proposes |
| dismodels: Validate lessons |
Runs the server's checks locally, reports problems in the Problems panel, and adds missing ids |
| dismodels: Upload lessons |
Picks or creates the pack (it's remembered in .dismodels/pack.json), previews what will change, and merges. Re-running sends only new or edited lessons. A new pack is published privately, so you can call it at once as @you/name. |
| dismodels: Train a LoRA from a pack |
Shows the firm price first, then starts training after you confirm. The charge follows your account's pre-paid rail |
Set dismodels.lessons.upload to stream to merge changed lessons a few seconds after each
save instead. Set dismodels.taskKey to send X-DAM-Task on pack calls.
For trainers: the studio
Open the dismodels view in the Activity Bar. It has four sections: Lesson packs
(right-click one to train a LoRA from it), plus the three below:
| Section |
What is in it |
| Collected data |
Your scored corpora, by task, with how many entries are promotable |
| Training |
Runs in flight and finished ones, with the state |
| Your models |
Adapters you own, their status and visibility |
Start a training run from the Start a training run… item, or
dismodels: Start a training run. You pick the corpus, a model name (the
slug becomes @your-handle/that-name), an optional description for the model
card, and the base model the adapter applies to. The run appears under
Training and moves to Your models when the supplier finishes.
Publish a finished adapter from its context menu, or dismodels: Publish
a model. You choose visibility — private (only you), unlisted (anyone with
the slug), or public (listed on the marketplace) — and acknowledge the base
model's licence. Publishing does not set a price.
Premiums, earnings and payouts are not in the editor. Use dismodels:
Open trainer studio.
Commands
| Command |
What it does |
dismodels: Sign in |
Browser sign-in, no paste |
dismodels: Sign out |
Forgets the credential in this editor only |
dismodels: Manage models and account |
Connection, entitlements, spend cap |
dismodels: Open billing and usage |
Opens the console in a browser |
dismodels: Open trainer studio |
Opens the studio in a browser |
dismodels: Refresh studio |
Re-reads the sidebar |
dismodels: Start a training run |
Compile a corpus into an adapter |
dismodels: Publish a model |
Publish a finished adapter |
Settings
| Setting |
Default |
When to change it |
dismodels.controlPlaneUrl |
https://dismodels.com |
Only to point at a self-hosted or local instance. The inference endpoint is not configured — the platform returns it on connect, so the two cannot disagree. |
Pointing this at a local instance needs a URL the browser on that machine
can open, because sign-in happens in the browser.
Your account and your credentials
Sign-in is OAuth 2.1 authorization code with PKCE, redirected back through the
editor's own URI handler. That also works over Remote-SSH, in devcontainers,
in Codespaces and in the web build, where a loopback-server sign-in would
quietly fail because the browser is on a different machine from the editor.
The session appears in VS Code's Accounts menu, so signing out is where
you already look for it, and other extensions can reuse the session instead of
collecting their own credential.
Credentials live in the OS keychain. The extension holds a 90-day account
token and uses it to mint a 24-hour inference key, renewing about half an hour
before expiry. You are not asked anything after the first sign-in. Each
installation registers a device id, so a renewal replaces that
installation's previous key rather than leaving a trail of live ones.
Signing out revokes nothing. It forgets the credential in this editor,
because signing out here is not a statement about the other places you are
signed in. Revoke a device in the console.
Nothing in the editor moves money
No purchase, no plan change, no card field, no payout. Billing and payouts are
links out to the console, because a card field an extension renders is a card
field it is liable for, and a browser is a better place for one. Your spend is
shown in the editor. It is never authorised there.
Current limitations
- No inline tab completion. Different endpoint, different latency budget.
This extension is chat and agent only.
- Token counts are estimates. They are biased to over-count, so the editor
drops context rather than sending a request the model will refuse.
- Images are dropped for models whose catalogue entry says they cannot
take one.
- No spend in the status bar yet.
Troubleshooting
| What you see |
What to do |
| The model picker has no dismodels models |
Run dismodels: Sign in, then reopen the picker |
| Sign in to dismodels to use its models |
The session was removed elsewhere. Sign in again |
| A spend-cap refusal |
Raise the cap on the billing page, then retry |
| dismodels is not reachable right now |
Check dismodels.controlPlaneUrl and your network |
| Sign-in never came back |
Approve in the browser window it opened; the request expires after five minutes |
The dismodels Output channel has the detail, including key renewals and
silent retries.