AI Workspace for VS Code
Watch your local Codex, Claude, and GitHub Copilot sessions as characters in a 3D workspace. The room follows your active project and shows observed agent activity, models, and recent tasks.
Getting started
- Install the extension and make sure Node.js is on your PATH.
- Open a project folder in VS Code.
- Run AI Workspace: Open Room from the Command Palette.
The installed extension includes its room runtime. It starts a private loopback server on a temporary port and reads saved local Codex, Claude, and Copilot session journals. Session formats may change with VS Code or Copilot updates. A project with no observed sessions shows an empty roster.
Development
This extension owns its webview HTML, CSS, and controller. It imports the shared Three.js room and observer modules from its bundled runtime, or the sibling ai-office folder during development; the browser app composes those same modules with its project picker.
Run locally
- Open the
vscode-extension folder in VS Code.
- Press F5 to launch an Extension Development Host with this repository open.
- Run AI Workspace: Open Room from the Command Palette.
The command starts its own workspace-scoped ai-office/server.js with Node.js. The server writes room and avatar settings only inside the open workspace folders, and the extension saves view choices in the active folder's .vscode/ai-workspace-view.json. Closing the panel stops that server. Reopen the panel after adding or removing workspace folders to apply the new scope. During development, the extension needs the sibling ai-office folder and its installed node_modules; run npm install inside ai-office first if needed. Installed builds use the bundled runtime. VS Code disposes the webview content while its panel is hidden, so the 3D renderer does not keep running in a hidden panel.
The panel follows the active editor's workspace folder (or the first open folder). It selects matching observed sessions automatically. The extension host passes state and recent tasks into the webview through VS Code messages; the webview has no Live Chat or project picker. Shared data and markup live in ai-office/public/observer-data.js and observer-markup.js; metrics, panel, labels and layout controls live in office-controls.js.
Choose Auto, Codex, Claude, or Copilot in the AI platform selector. Auto selects the platform with the most recent working session, keeps it while it is working, and retains the selection after completion. Other working platforms appear in the activity status. A manual selection stays pinned across reloads. Selection follows saved activity in the current project, not which desktop window has focus or an unsent model picker.
Each observed session has its own character, so agents with the same role stay separate. The roster shows working sessions and the latest main session for the selected platform, plus its linked subagents when parent metadata is available. Configured profiles provide appearance and role labels; the displayed model comes from observed activity. A selected platform with no observed sessions shows an empty roster. Internal journal formats may change; Copilot subagents without separate journals or lifecycle events cannot be shown individually.
Build a VSIX
Run npm install in both ai-office and vscode-extension, then run npm run package:vsix in vscode-extension. The preview package is written to vscode-extension/dist/ and marked as a VS Code pre-release. It includes the shared room runtime and Three.js, so the source tree is not needed after installation. Node.js must be available to VS Code to start the local observer server.
Automatic Marketplace publishing
The GitHub Actions workflow .github/workflows/publish-vscode.yml publishes a pre-release when a vscode-v<version> tag is pushed. It checks that the tag matches this extension's version, installs locked dependencies, runs both projects' checks, builds the bundled preview VSIX, saves it as a workflow artifact, and publishes that exact package. Ordinary commits do not publish.
One-time account setup
Publishing uses Microsoft Entra ID through GitHub OIDC, without a stored publishing token. Microsoft is retiring global Azure DevOps PATs on December 1, 2026; see the official publishing guide.
Create or confirm ownership of the low-poly-ai-workspace publisher in Marketplace publisher management. If your publisher ID differs, update publisher in this extension's package.json before building.
Create a Microsoft Entra application/service principal or an Azure user-assigned managed identity for publishing. Add a federated credential for GitHub Actions with these exact values:
- Issuer:
https://token.actions.githubusercontent.com
- Subject:
repo:gabrielagrvnt8880/AI-Workspace:environment:marketplace
- Audience:
api://AzureADTokenExchange
Authorize that identity as a Contributor on your Marketplace publisher, following the identity authorization steps in the official guide. Use the identity's Azure DevOps profile id, rather than its Azure client ID. While signed into Azure CLI as that identity, retrieve it with:
az rest --url https://app.vssps.visualstudio.com/_apis/profile/profiles/me --resource 499b84ac-1321-427f-aa17-267ca6975798 --query id --output tsv
In this GitHub repository's Settings → Environments, create marketplace. Add environment variables AZURE_CLIENT_ID and AZURE_TENANT_ID from the identity. These are IDs, not secrets. Limit deployment tags to vscode-v*. Leave required reviewers unset if you want fully automatic releases. The Azure Login guide explains the federation setup.
The workflow is ready locally; account authorization and pushing the workflow are required before it can publish.
Release an update
Commit the release changes, including the version and lockfile. For example, from the repository root:
cd vscode-extension
npm version patch --no-git-tag-version
cd ..
git add vscode-extension/package.json vscode-extension/package-lock.json
git commit -m "Bump VS Code extension version"
# Replace 0.1.10 with the version now in vscode-extension/package.json.
git tag vscode-v0.1.10
git push origin main
git push origin vscode-v0.1.10
For the first release of the current version, use its matching tag without bumping, provided that version has not already been published. Watch Actions → Publish VS Code extension for the result. If a run fails before publication, fix the cause and rerun it; after successful publication, use a new version for the next release. Marketplace versions cannot be overwritten.