Skip to content
| Marketplace
Sign in
Visual Studio Code>SCM Providers>JuntoNew to Visual Studio Code? Get it now.
Junto

Junto

Muhammad Usama

|
1 install
| (0) | Free
The conversations behind your code. Shared, attributable AI feature history in Git.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Junto

Junto logo

The conversations behind your code.

Junto captures local Codex and Claude Code conversations automatically and connects supported edit tools to your code. Open the Junto sidebar to read a chat immediately, including before a commit. Review selected conversations and code ranges to keep shared feature history in Git; teammates can then open that history and continue in either agent.

No account, model call, or hosted Junto service is needed to read saved history.

Install

Requires VS Code 1.96+ and Git. Building requires Node.js 20+ and npm.

For a downloaded VSIX, use Extensions → … → Install from VSIX… and select junto-0.3.2.vsix. VS Code supports this directly; no separate VSIX Installer extension is needed. In a remote SSH, container, or WSL window, install Junto in the workspace extension host.

Alternatively, in your own terminal:

code --install-extension ./junto-0.3.2.vsix

Reload the window if prompted. Open the trusted project folder where the agent is working. Junto starts automatically and scans native conversation files on this machine every 30 seconds. The Junto activity-bar icon opens captured chats and saved features; its status row and the status-bar item open diagnostics.

Once the public listing is available, you can also install Junto by Muhammad Usama directly from VS Code's Extensions view. Its extension ID is usamamuhammad100.junto.

Earlier local builds used junto-local.junto. VS Code treats a new publisher ID as a separate extension, with separate private workspace storage. Before switching, export any captured chats you want to keep with View transcript, then disable the old extension to avoid duplicate scans. Committed .agent history remains in your repository.

Capture a normal AI chat

  1. Open your project folder and use Codex or Claude Code as usual, in its VS Code panel or terminal CLI.
  2. Open the Junto sidebar. Existing matching conversations and newly written messages appear automatically. Use Junto: Scan Agent Conversations for an immediate scan.
  3. Open the captured chat to read messages and tool requests. Supported explicit apply_patch, Claude Write/Edit/MultiEdit, and literal shell patches provide file links. Uniquely matching edit text produces a code marker and Local chat CodeLens. Unsupported shell scripts, deleted edits, or ambiguous text still leave the chat accessible in the sidebar.
  4. Run Junto: Show Logs or Junto: Capture Diagnostics to see activation, source directories, scan counts, and errors.

Capture reads the agents' saved local JSONL transcripts. It does not inspect credentials or depend on API, subscription, or Amazon Bedrock authentication. Codex defaults to $CODEX_HOME/sessions and archived_sessions (~/.codex); Claude defaults to $CLAUDE_CONFIG_DIR/projects (~/.claude/projects). Set junto.capture.codexDirectories or junto.capture.claudeDirectories in the extension host's user settings for other locations.

In SSH, WSL, or containers, source logs must be accessible on the same host as Junto. Paths from a different machine cannot be inferred. A direct API script, browser chat, or client that does not write these native transcripts requires explicit transcript import. Remote/cloud tasks appear only when their transcripts are available locally.

Captured conversations live in private VS Code workspace storage. Capture does not create .agent files, stage code, install hooks, start an agent, submit prompts, or call a model. Disable it with junto.capture.enabled. Captured snapshots remain readable after source files disappear or the editor reloads. Sources labeled partial or compacted cannot recover unavailable messages.

Scanning is bounded to 256 changed files and about 64 MB of reads per pass (the last source may exceed that pass budget). Remaining files continue on later scans. Individual sources above 32 MB are reported in diagnostics; Open Native Agent Log locates them. VS Code's own large-file limits may apply. No source is silently truncated.

Continue a captured chat

Junto conversation view

Click Continue in Codex or Continue in Claude in the captured conversation. Junto checks for saved updates, creates a private .txt context file containing the full available transcript and code references, and copies a short prompt pointing to it. Add your next change in the new agent chat.

  • Codex: opens a new sidebar chat and requests a file attachment using its contributed commands.
  • Claude Code 2.1.318: opens a fresh editor tab with the file reference prefilled as an unsent draft. Other versions open a new tab and ask you to paste the copied reference.
  • Missing or unsupported commands: the file and copied reference remain available. Open a new chat in your agent and paste. Open context file returns to the generated text.

The context file lives under this workspace’s private VS Code storage, on the extension host. A local terminal agent can read it on that same machine. A browser or agent on another machine needs the file contents transferred manually. This starts a new conversation; it does not resume a native session or submit a task automatically.

Conversation text renders Markdown. Standalone environment context and tool activity are folded into Activity & source details; View transcript preserves everything. Refresh checks saved agent logs and reports updates or no changes. Open views also update after automatic scans, retaining scroll position and expanded details. Refresh continues working while a shared-history review is open. Logs is available at the bottom of the view.

Share a feature through Git

  1. Run Junto: Enable Feature History. Confirm your display name and color. Your persistent contributor ID is independent of your name.
  2. Open a captured conversation and click Review for sharing. Alternatively, run Junto: Import Agent Conversation for an explicit JSONL/JSON export.
  3. Review the local JSON draft. You can redact message text and tool detail, or remove excluded content. Save it. Native logs are conservatively labeled partial; unavailable or compacted history is never reconstructed.
  4. Stage the code you want to commit with your usual Git workflow. Partial staging is supported.
  5. Optionally run Junto: Review Feature Groups. Local suggestions split user-intent segments. AI suggestions are optional. Rename, split, merge, attach to an existing feature, or correct message/range associations.
  6. Run Junto: Prepare Feature History. Choose the feature, your source sessions, related messages, staged ranges, and actual continuation parents. Enter your contribution summary.
  7. Review the generated JSON in the editor. Edit decisions, rejected approaches, reported/observed tests, remaining work, and shareable source content. The complete selected source sessions are saved, including topics outside the feature. When finished, save the document and click Save reviewed history in the notification.
  8. Prepare more feature contributions if needed, then run Junto: Commit with Feature History. Enter a commit message.
  9. Push with your normal Git workflow. Junto never pushes automatically.

Import and review drafts live under .agent/.local/, ignored by Git. Reviewed records are written under .agent/users/ and .agent/features/. The dedicated commit command validates the staged snapshot and prepared metadata before committing, then verifies the resulting commit. It does not stage unrelated code, rewrite past commits, or install hooks.

If the index changes after preparation, use Junto: Discard Prepared Contributions, then prepare again. This archives Junto's newly generated uncommitted contribution files locally and removes those files from the index. Your code staging and reviewed source sessions are retained.

Discover and continue

After pulling history, open an associated source file. Junto draws a vertical gutter stripe along uniquely mapped code and supplies an Open history CodeLens and hover action. Direct clicking on gutter decorations is not supported by the stable decoration API.

The card includes:

  • summaries with decisions, tests and unfinished work;
  • every contributor, their contributions, source revisions and continuation parents;
  • feature-related messages and full available source sessions;
  • current code links or historical source ranges;
  • context export to Codex and Claude Code.

Choose one or several contributions, then summary, summary + related chat, or summary + full sessions. Review the size and generated Markdown before continuing. Full selections are never silently truncated. A local ignored handoff file carries the selected text; the copied prompt is self-contained.

Junto detects the agent extension separately from its CLI. When possible it focuses the installed panel and copies context. Paste is required in this release. It never overwrites a draft, submits a prompt, runs the agent, or automatically installs a CLI. The terminal fallback is a quoted interactive command, with Bash, Zsh and PowerShell output options.

After using a handoff, review the newly captured conversation under your own profile, or explicitly import it. Choose its actual contribution parents during preparation. Explicit import also allows marking a handoff as inherited source context. Your contribution retains the same feature ID, and earlier source chats keep their original attribution. Any number of developers can continue in parallel; merges can have several parents.

History absent from HEAD cannot be chosen as an active baseline. Switch, pull, merge, or choose another contribution first. Superseded/missing code within checked-out history is explicitly flagged during export.

Optional AI grouping and summaries

Manual assignment works without a provider.

Run Junto: Configure Summary Provider, enter an OpenAI model available to your account that supports Structured Outputs, and enter your API key. Credentials use VS Code SecretStorage; the model preference is a user setting.

In Review Feature Groups, choose AI suggestions. Junto explicitly asks before sending the selected sessions (message text and tool events) and staged code anchors to https://api.openai.com/v1/responses. Review/redact imports before this step. Requests use store: false; your provider/account data policies still apply. Junto caches successful, validated results locally against the model and input fingerprints.

Provider output is checked for valid source-message references and anchor indices. It remains a suggestion requiring review. Agent/model-reported tests are labeled reported, not observed by Junto.

Settings:

Setting Default Purpose
junto.capture.enabled true Capture native chats in trusted workspaces
junto.capture.intervalSeconds 30 Poll interval, minimum 10 seconds
junto.capture.codexDirectories auto Codex source directories on this host
junto.capture.claudeDirectories auto Claude source directories on this host
junto.provider.model empty Your available Structured Outputs model
junto.provider.maxInputBytes 200000 Reject oversized requests without truncation
junto.markerStripeLimit 6 Bounded display; all contributors remain in the card
junto.shell bash Copyable terminal command syntax

Development

npm ci
npm run typecheck
npm run lint
npm test
npm run build
npm run test:host
npm run package

Press F5 to launch an Extension Development Host. On headless Linux, run the host check under a separate virtual display, for example xvfb-run -a npm run test:host. The runner uses a temporary repository, settings profile, extensions directory, and synthetic Codex/Claude homes. It never scans your real conversations. It downloads VS Code 1.96.4 by default; set JUNTO_VSCODE_VERSION or JUNTO_VSCODE_EXECUTABLE to select another test build.

Create a separate synthetic two-contributor demo repository:

npm run demo -- /tmp/junto-demo
code /tmp/junto-demo

The destination must be empty. The script creates only that example, with two real local commits using Junto's workflow. All conversations in the example are synthetic fixtures; no agent or paid API is invoked.

See the schema, capabilities and limits, validation results, and publishing guide.

Troubleshooting

  • AI wrote code but nothing appeared: install the latest Junto release, reload, open the folder the agent used, and run Scan Agent Conversations. Check the Junto sidebar, then Capture Diagnostics for source locations, workspace matching, size limits, and remote-host mismatches. v0.1 required manual import.
  • No local code marker: the captured chat remains in the sidebar. Automatic markers require explicit supported edit tools and unique matching text. Arbitrary shell/Python file writes are not automatically attributed.
  • No shared-history stripes: ensure records are committed in the current checkout and run Rebuild Feature Index. Ambiguous, deleted, or changed ranges remain available in the card as historical code.
  • No code ranges: stage text changes first. Binary files, submodules, symlinks and mode-only changes do not generate line anchors.
  • Logs: run Junto: Show Logs, even without a Git repository. Capture Diagnostics opens a readable report. Open Native Agent Log locates unsupported or oversized sources.
  • Malformed records: check Output → Junto. A malformed record does not hide unrelated valid history.
  • Commit failed: inspect the Git/hook error. Prepared records remain available. Junto never claims history was committed after a failure and never amends a commit to inject it.
  • Hook changed the commit: Junto reports the actual commit hash and verification failure. Inspect and correct the history deliberately; the commit is not rewritten.
  • Source reimport rejected: committed source messages cannot be silently changed or removed. Make deliberate reviewed corrections using ordinary Git review, or import new continuation messages as a new source session.
  • Provider unavailable: configure credentials/model or use local grouping/manual assignment.
  • Agent panel did not open: context is still copied. Paste it into your chosen agent, or use the terminal fallback. CLI presence does not establish authentication.
  • Large sessions: imports above 32 MB and provider requests above the configured limit are rejected explicitly. Full exported context below the import limit is kept intact and can be read in chunks.
  • Multiple workspace folders: commands ask which repository to use; this window then indexes that selected repository. Reload to select another.
  • Untrusted workspace: saved records can be read. Import, Git inspection, preparation, model calls and handoffs require normal workspace trust.

Sharing and privacy

Committed transcripts inherit repository access and Git history. Review secrets and personal information before preparing them; deleting a file later does not remove its previous Git versions. Imported local home prefixes are replaced with <HOME>. There is no automatic secret detector or permission bypass.

Historical conversations, provider output and tool logs are rendered as escaped text. Junto never executes their contents. Capture checks source workspace metadata and rejects other projects, nested repositories, symbolic-link logs, and conversations spanning another workspace. User-configured source locations apply to this machine, not repository settings.

Handoffs are local files by default: a command containing a local path alone does not move context to another machine. Copy the self-contained context prompt or deliberately transfer the handoff with the required repository.

Junto has no hosted service or telemetry. Optional AI suggestions send only the explicitly approved request to OpenAI. The privacy statement describes local storage, optional provider requests, and sharing.

License and contact

Copyright © 2026 Muhammad Usama, Researcher / Engineer.

Junto is free software under the MIT License. You may use, modify, and redistribute it under the terms in LICENSE. Keep the copyright and permission notices with copies or substantial portions. Bundled dependencies retain their own copyright and license notices in third-party notices.

Project owner and support contact: usamamuhammad100@gmail.com. See support for what to include in a bug report, or open a GitHub issue.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft