AIWingman VS Code Extension
AIWingman is a multi-provider AI assistant for software engineering workflows in VS Code.
Requires VS Code 1.101.0 or newer, the first stable release with a Node.js 22
extension host. TypeScript remains on major version 5. Development uses pnpm
12.10.1; dependency overrides and build-script approvals are configured in
pnpm-workspace.yaml.
It supports chat, refactoring/help commands, agentic code-edit workflows, merge review, validation pipelines, repo-awareness context attachments, and Office document workspaces.
Latest Feature Updates
1) AI Service Profiles in Settings (new)
- Added Save Profile in the Chat Settings menu.
- Saves current AI service workflow configuration (service/model/tokens/reasoning and related service settings).
- Default profile name behavior:
- Use selected model when available.
- Fallback to selected service (for example, GitLab Duo).
- Users can rename profiles.
- Users can load saved profiles directly from Settings for fast switching.
- Supports up to 50 profiles.
- UX behavior:
- Optimized for common use (1-5 profiles).
- When profile count is > 5, the menu shows profile count and enables search/scroll.
2) Chat Settings and Mode Controls
- Ask mode and Agentic mode are available directly in Chat Settings.
- Fast in-chat selectors for:
- AI service
- model
- context window
3) Validation Pipeline Workflow
- Built-in setup/reconfigure flow for validation commands.
- Supports lint/test/build style pipelines.
- Optional auto-run after edits.
- Optional repair loop with configurable max repair attempts.
4) Repo Awareness Context Attachments
- Toggleable context attachments from the chat UI:
- File Index
- Repo Map
- AST Context
- Includes token-cost preview support and attachment token estimates.
5) Merge Review Workflow
- Dedicated Merge Review workflow with:
- chunk planning
- finding aggregation
- report writing
- pinned file support
- optional skeptic/full-file pass controls
6) Multi-Provider AI Support
- OpenAI / OpenAI-compatible endpoints
- VS Code Language Model API models, including GitHub Copilot and models registered by other extensions
- AWS Bedrock
- GitLab Duo (REST/GraphQL mode support)
OpenAI-Compatible Proxy Troubleshooting
Set the API URL to the proxy's base URL (for example,
https://proxy.example.com/v1), not its /models or /chat/completions route.
AIWingman appends those routes for model discovery and chat.
Query parameters on the base URL are preserved for both requests. If your
proxy requires a query parameter such as code, use the URL supplied by your
endpoint administrator, including that parameter. Treat authentication query
values as credentials and do not share them in logs or bug reports; the API URL
is stored in VS Code settings, not secret storage.
A response such as 500 ... ('query', 'code') ... Field required means the
endpoint reports a missing query parameter. It does not by itself establish
that the API key is invalid. Check the configured URL and the proxy's required
parameters with its administrator. You can enter a model ID manually if model
discovery fails, but this does not bypass proxy requirements for chat requests.
VS Code Language Models in Agentic Mode
Select the VS Code Language Models service, then
use Select chat model to choose a model from any installed provider. The
picker includes the provider and model ID. Select Agentic mode and the
appropriate pinned-file or workspace scope in Chat Settings.
AIWingman sends its private tool schemas through vscode.lm, executes structured
tool calls with its existing handlers, and returns native tool-result messages
to the selected model. It does not register tools in built-in Copilot Chat or
delegate the agent loop to Copilot. Existing file-scope restrictions and command
execution policies still apply. Ask mode remains available for text-only models.
The selected model's provider must support tool definitions, structured tool-call
responses, and tool-result messages. A model appearing in the picker does not
guarantee tool support; failed agentic turns run a capability check to help
diagnose the provider. Copilot authorization and usage limits still apply to
Copilot-hosted models. Tool schemas and returned file/service content are sent
to the selected model provider. The copilot service and copilotChatModel
setting names remain unchanged for saved-profile compatibility.
AWS Bedrock
Run AIWingman: Select AI Service → AWS Bedrock and choose how to connect:
- Bedrock API key (recommended) — generate a short-term (up to 12 hours)
or long-term key in the Bedrock console under API keys, for the same
region you enter here.
- AWS access keys — access key ID and secret access key. Temporary
(
ASIA…) credentials also need their session token.
Credentials are kept in VS Code secret storage, never in settings.json.
AIWingman then lists the inference profiles and on-demand text models your
account can use; pick one or enter a model/inference-profile ID manually.
The identity behind the key needs bedrock:InvokeModelWithResponseStream
(plus list permissions for the model picker) and access to the chosen model.
Rotating credentials
With Bedrock selected, open Settings > AI Configuration > Update Bedrock
Credentials, or run AIWingman: Update Bedrock Credentials. This replaces
the current authentication method's API key or access-key/secret/session-token
set without repeating region, model, reasoning, or token setup. Cancel leaves
credentials unchanged. Subsequent requests, including the next round of an
already-running workflow, use the updated credentials; an in-flight request
cannot be re-authenticated.
Prompt caching in chat and workflows
Use Settings > AI Configuration > Advanced Configurations > Prompt caching (or AIWingman: Select
Bedrock Prompt Caching):
- Auto (default): cache the system prompt and context, plus the previous
and newest user/tool-result prefixes. Long tool workflows can reuse the
previous round's prefix while extending the cache for the next round.
- System prompt only: cache system instructions and attached text context,
without conversation checkpoints.
- Off: do not request explicit caching.
Checkpoints are sent only for supported Claude and Nova model IDs. Keep
instructions, tool definitions, and pinned context stable between rounds:
changing a prefix prevents its reuse. Bedrock applies model-specific minimum
prefix sizes (typically 1,024 or 4,096 tokens for Claude) and cache lifetimes
(five minutes by default); short prompts may not be cached. A checkpoint is
not a guaranteed cache hit, and cache writes can cost more than ordinary
input tokens. This uses Bedrock's server-side cache, not a local response cache.
Enable aiWingman.debugMode to see Bedrock prompt cache: read … / wrote …
token counts in extension-host debug logs; only positive read counts confirm
a cache hit.
See AWS prompt caching.
Advanced inference settings
Bedrock inference tuning is opt-in. Open Settings > AI Configuration >
Advanced Configurations to review the selected model and choose inference
parameters, an output limit, and prompt caching. Service and model selection
never open this advanced flow automatically.
The webview recommends a parameter contract using known model IDs:
- Reasoning effort for GPT-OSS 20B/120B (Low/Medium/High), or Adaptive
thinking for Claude Sonnet 4.6 and Opus 4.6–4.8.
- Thinking budget for Claude 3.7, Sonnet/Opus 4, Opus 4.1, and Claude 4.5:
1,024 / 4,096 / 8,192 tokens, capped below Max Output Tokens. Thinking counts
toward output; manual-budget models need a limit above 1,024 tokens. An unset
output limit uses 8,192 when thinking is enabled.
- Temperature for explicitly supported sampling models, including listed
Mistral models and Nova v1. Low/Medium/High means 0.3/0.6/0.9, not thinking.
- None / Off for unknown models, opaque custom/application
inference profiles, NVIDIA Nemotron, and Mistral Magistral. A model being
reasoning-capable does not establish an adjustable reasoning API contract.
These are recommendations, not restrictions on your custom model names. Enable
the User Override checkbox to select any exposed contract: temperature,
reasoning effort, adaptive thinking, thinking budget, or none. The selected
contract is sent regardless of model-ID recognition. Confirm compatibility with
your AWS/model administrator; an incompatible choice can cause inference errors.
Explicit temperature overrides are not silently dropped if AWS rejects them.
The checkbox does not bypass caching compatibility checks.
Click Save configurations to apply changes to chat and workflows; closing
the panel without saving does not apply edits. Selecting a model resets tuning
to Off and the contract to automatic recommendations, without another prompt.
Every contract includes Off (no overrides): it omits optional thinking,
reasoning effort, and temperature parameters. It does not force a model to
stop internal reasoning; model defaults still apply. Max Output Tokens and
caching are independent settings.
The separate aiWingman.bedrockInferenceLevel setting defaults to off;
aiWingman.bedrockTuningOverride defaults to auto. Service profiles save all
advanced settings: inference level, User Override contract, prompt caching, and
Max Output Tokens (including 0 for no explicit limit). Loading a profile replaces
these settings rather than merging with the previous profile. Legacy profiles
without these fields restore Off, automatic contract selection, Auto caching,
and the default 8,192-token output limit. The inference level does not inherit
the old shared reasoning setting.
Recommendations use a conservative model-ID capability list, because AWS model metadata
does not expose supported tuning parameters. This applies to the existing Bedrock
Runtime/Converse integration, not Mantle endpoints. Temperature is never sent
alongside native thinking/reasoning overrides. Signed Claude thinking blocks are
replayed unchanged during tool workflows, not displayed as chat text.
Reasoning Level remains available for OpenAI and VS Code language models;
their existing behavior and OpenAI advanced parameter-mode controls are unchanged.
Core Capabilities
- Chat with streaming responses.
- Attach pasted images in chat.
- Export assembled AI request for manual execution/audit.
- File reference support with
# autocomplete in chat.
- Memory/context operations (add/remove/clear memory and pinned context).
- Document ingestion to Markdown for Word, PowerPoint, Excel, OpenDocument, PDF, RTF, EPUB and CSV — headings, lists and tables are preserved. Word documents exported from Confluence (MHTML/HTML payloads carrying a
.doc extension) are detected by content and supported. Legacy binary .doc/.xls/.ppt files are rejected with guidance to re-save in a modern format.
- Office custom editors for DOCX and PPTX workflows.
Ask Archify in Agentic Mode
Archify can create validated, interactive HTML diagrams directly from an
AIWingman chat. In Chat Settings, select Agentic mode and set file scope to
Workspace. Archify tools are intentionally unavailable in pinned-only
scope because producing an evidence-based diagram may require repository
discovery and writing multiple artifacts.
Ask naturally and include the diagram subject and destination. For example:
Inspect this repository and use Archify to create a showcase architecture
diagram of its major components and integrations. Base every connection on
code evidence and save it to docs/diagrams/system-architecture.html.
Trace the agentic chat request from the webview through tool registration,
dispatch, and result handling. Use Archify to create a sequence diagram and
save it to docs/diagrams/agentic-tool-call.html.
Analyze the codebase documentation pipeline and create an Archify workflow
diagram showing discovery, model authoring, validation, rendering, and
publication. Save it to docs/diagrams/docs-pipeline.html.
Follow repository data from workspace file discovery through indexing and
prompt context assembly. Create an Archify data-flow diagram at
docs/diagrams/context-dataflow.html using showcase quality.
Create an Archify lifecycle diagram for an agentic request, including tool
iterations, validation failure and repair, successful completion, and
cancellation. Inspect the implementation first and save it to
docs/diagrams/agentic-request-lifecycle.html.
AIWingman embeds Archify 3.0.1 and gives the model its packaged authoring defaults,
viewer reference, schema, and matching example for the requested diagram type.
New workflow and lifecycle diagrams use schema v2. The model can then inspect the workspace with
the normal agentic read and search tools before submitting its specification to
Archify's delivery gate. A successful request writes three workspace files:
the authored .json source, the interactive .html diagram, and a
.receipt.json validation receipt. If Archify rejects the specification, the
tool reports the diagnostics to the model so it can make a focused correction
and retry within the agentic iteration limit.
Stop cancels active diagram rendering and prevents subsequent tool calls or
publication. Failed validation leaves prior diagram files unchanged; interrupted
publication restores them. If rollback itself fails, recovery files are retained
and their location is reported. Published receipts identify the final HTML bytes,
with the upstream artifact identity retained when navigation is added.
Delivered diagrams support Overview, Route Probe with step-by-step Route Journey
controls, Semantic Lens, and stable focus/relationship links. These replace the
legacy Story/Guided views removed in Archify 3; meta.views no longer creates
a story. Existing exported HTML retains its embedded viewer until regenerated.
The native archify_get_guidance and archify_deliver tools work with shell
execution disabled, while retaining workspace write-scope checks.
The embedded CLI runs offline-only: automatic release checks are disabled,
remote brand assets are refused, and a preload policy blocks Node networking
and unapproved subprocesses in the CLI and its renderer children. Bundled brand
names remain available. Local Git evidence checks require a complete checkout;
partial clones are refused to prevent implicit lazy fetching. Runtime updates
require an explicit maintainer command, never a background check. These are
application-level controls; an OS sandbox or firewall provides independently
enforceable egress isolation.
Commands (Highlights)
From the command palette:
AIWingman: Select AI Service
AIWingman: Select chat model
AIWingman: Select Reasoning Level
AIWingman: Update Bedrock Credentials
AIWingman: Select Bedrock Prompt Caching
AIWingman: Select Parameter Mode (Auto / Temperature / Reasoning)
AIWingman: Perform Merge Review
AIWingman: Setup/Reconfigure Validation Pipeline
AIWingman: Export AI Request (Manual Run)
AIWingman: Build/Refresh Indexes
AIWingman: Preview token cost
Also includes prompt-prefix commands for selected code:
- Ask / Explain / Improve / Refactor / Error Handling / Complete / Comment / Find Problems / Unit Test / Translate Code
Configuration (Key Settings)
Representative settings under aiWingman.*:
- Service/model:
selectedService
model
copilotChatModel
bedrockModelId
bedrockPromptCaching
bedrockInferenceLevel
bedrockTuningOverride
gitlabDuoApiMode
- Profile switching:
- Context/token controls:
maxTokens
maxOutputTokens
reasoningLevel
parameterMode
- Validation:
validation.enabled
validation.pipeline
validation.autoRunAfterEdits
validation.maxRepairAttempts
- Repo awareness:
repoAwareness.enableFileIndexAttachment
repoAwareness.enableRepoMapAttachment
astContext.enableAttachment
- PDF:
pdf.extractImages — extract images embedded in PDF files and append them to the extracted Markdown (off by default). Each image is labelled with its source page so the model understands its position in the document. Requires a multimodal-capable model. Leave disabled for text-only models. Note: enabling this option significantly increases the context size of PDF files — a document with many diagrams may exceed your configured token budget (maxTokens) and be rejected by Add to Memory. If that happens, either increase maxTokens, disable image extraction, or use a PDF with fewer embedded images.
Privacy and Security
- Sensitive credentials are stored using VS Code secrets where supported.
- See
PRIVACY.md for details.
Development
- Install dependencies:
pnpm install --ignore-workspace --no-frozen-lockfile
- Build:
- Lint:
- Test: