Context Tools (VS Code / VSCodium)
LLM-friendly copy utilities for your codebase. Quickly copy the current file, selection, all open editors, the project tree, and even Problems (diagnostics) — all as tidy fenced blocks that are easy to paste into chats or issues.
Why
When asking for help (or filing a bug), you often need a small stack of files plus a sense of the project structure. This extension automates that:
- Adds a
PATH: header to each fence so readers immediately know which file they’re seeing.
- Optionally strips or placeholders the import lines to reduce noise for LLMs.
- Builds a compact project tree with sensible ignores.
- Can include Problems (errors/warnings) alongside your code.
Commands (Command Palette)
- Context Tools: Copy Current File
- Context Tools: Copy Selection
- Context Tools: Copy Open Editors
- Context Tools: Copy Selected Files (Explorer context menu)
- Context Tools: Copy Project Tree
- Context Tools: Copy Markdown Doc (Tree + Files)
- Context Tools: Copy Problems (All Files)
- Context Tools: Copy Current File + Problems
- Context Tools: Copy Open Editors + Problems
- Context Tools: Open Settings
Explorer context menu:
- Copy Selected Files
- Copy Markdown Doc
Default Keybindings
- Copy Current File:
Ctrl+Alt+C (Cmd+Alt+C on macOS)
- Copy Open Editors:
Ctrl+Alt+M (Cmd+Alt+M)
- Copy Project Tree:
Ctrl+Alt+T (Cmd+Alt+T)
Output Examples
File fence
/* { ... imports ... } */
export default function Page() {
return <div>Hello</div>;
}
### Problems list
```text
# Problems
## src/app/page.tsx
- **Error** at 10:5 `2304` _(source: ts)_ — Cannot find name 'Foo'.
- **Warning** at 12:1 _(source: eslint)_ — Unexpected console statement.
Project tree
my-project
├─ src
│ ├─ index.ts
│ └─ lib
│ └─ util.ts
└─ package.json
Settings
ctxtools.fenceInfoMode: "path" | "fullpath" | "language" | "literal" | "format" | "none"
Default: "path". Controls the text after ```/~~~ (header).
ctxtools.fenceInfoLiteral: string used when mode = "literal". Default: "PATH".
ctxtools.fenceHeaderTemplate: used when mode = "format".
Placeholders: ${path}, ${fullPath}, ${filename}, ${ext}, ${dir}, ${workspace}, ${language}.
Default: "PATH: ${path}".
ctxtools.fence.wrapper: "backticks" | "tildes" | "none". Default: "backticks".
ctxtools.fence.count: number of fence characters (3–5). Default: 3.
ctxtools.fence.escape: escape inner fences to avoid accidental closure. Default: true.
Imports handling (to reduce LLM noise)
ctxtools.copy.importsMode: "keep" | "strip" | "placeholder". Default: "placeholder".
ctxtools.copy.importsPlaceholder: placeholder text when using "placeholder". Default: "{ ... imports ... }".
Project tree
ctxtools.tree.maxFiles: max files to scan. Default: 800.
ctxtools.tree.maxDepth: max directory depth. Default: 8.
ctxtools.tree.exclude: base exclude glob; merged with the others.
ctxtools.tree.excludeFolders: array of folder names to ignore.
Default:
[".git","node_modules","dist","build",".cache",".venv","__pycache__",".idea",".vscode","coverage",".pytest_cache",".mypy_cache","out","target",".next",".turbo"]
ctxtools.tree.extraExcludeGlobs: extra globs to ignore (e.g., images/binaries).
Markdown doc
ctxtools.doc.includeTree: include the project tree. Default: true.
ctxtools.doc.includeFiles: "selected-or-open" | "open-editors-only" | "selected-only".
Default: "selected-or-open".
ctxtools.doc.title: title template. Default: "${workspace} Context".
Development
npm install
npm run compile
- Press F5 in VS Code to launch the Extension Development Host.
- Optional packaging:
npx vsce package (generates a .vsix)
Install from VSIX via the Extensions view overflow menu.
Build targets
The extension uses modern TS settings (e.g., es2021 libs) so methods like String.prototype.replaceAll work. If you change tsconfig.json, keep that in mind.
Notes & Limitations
- Clipboard is plain text. To attach files to chats, drag-and-drop from your OS instead.
- Very large selections or many open editors produce large clipboards; consider using the Markdown doc command to bundle context more compactly.
License
MIT
| |