https://github.com/3ZsForInsomnia/vs-code-companion
A CodeCompanion extension for using VS Code Copilot prompts and Chat Mode prompts
https://github.com/3ZsForInsomnia/vs-code-companion
Last synced: 27 days ago
JSON representation
A CodeCompanion extension for using VS Code Copilot prompts and Chat Mode prompts
- Host: GitHub
- URL: https://github.com/3ZsForInsomnia/vs-code-companion
- Owner: 3ZsForInsomnia
- Created: 2025-08-16T17:11:12.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-10-06T14:40:44.000Z (29 days ago)
- Last Synced: 2025-10-06T16:29:48.716Z (29 days ago)
- Language: Lua
- Size: 58.6 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-neovim-sorted - 3ZsForInsomnia/vs-code-companion
- awesome-neovim - 3ZsForInsomnia/vs-code-companion - Tool for importing VS Code's Markdown prompts into CodeCompanion. (AI / (requires Neovim 0.5))
README
# vs-code-companion.nvim
Import VS Code AI prompts into Neovim's [CodeCompanion](https://codecompanion.olimorris.dev/). Share prompts across editors without friction.
Perfect for teams using VS Code prompts or developers migrating from VS Code to Neovim.
> **Looking for prompt browsing and selection?** Check out [code-companion-picker](https://github.com/3ZsForInsomnia/code-companion-picker) for advanced prompt selection with fuzzy search, previews, and customizable UI.
## Quick Start
1. **Install** this plugin (requires [CodeCompanion](https://codecompanion.olimorris.dev/))
2. **Create VS Code prompt files** in `.github/prompts/` in your project (or configure custom directories)
3. **Import prompts**: Run `:VsccImport` to add VS Code prompts to CodeCompanion's library
4. **Use prompts**: Access imported prompts as slash commands (e.g., `/vsc_my_prompt`) in CodeCompanion chat buffers
## Why Use This Plugin?
✅ **Use existing VS Code prompts** in Neovim
✅ **Share prompt libraries** across team members and editors
✅ **Zero conversion needed** - works with [VS Code's standard format](https://code.visualstudio.com/docs/copilot/customization/prompt-files#_prompt-file-format)
✅ **Flexible transformation system** - customize how prompts are converted to CodeCompanion format
✅ **Smart AI model detection** from VS Code frontmatter
## Installation
**Dependencies:**
- [codecompanion.nvim](https://github.com/olimorris/codecompanion.nvim) - Required
### lazy.nvim
```lua
{
'olimorris/codecompanion.nvim',
dependencies = {
'3ZsForInsomnia/vs-code-companion.nvim',
},
opts = {
-- your codecompanion config
}
}
```
## Advanced Configuration
### Customizing Prompt Transformation
The plugin uses a flexible transformation system to convert VS Code markdown prompts into CodeCompanion format. You can customize how properties are extracted and transformed:
```lua
local getters = require("vs-code-companion").getters()
local transforms = require("vs-code-companion").transforms()
local defaults = require("vs-code-companion").defaults()
{
'3ZsForInsomnia/vs-code-companion.nvim',
opts = {
directories = {'.github/prompts'},
transform = {
-- Use defaults for most properties
description = defaults.description,
content = defaults.content,
strategy = defaults.strategy,
-- Customize tools handling
tools = {
getter = getters.get_tools,
transform = transforms.transform_tools_full_stack_dev,
},
-- Disable certain properties
mapping = false,
-- Add custom getter/transform
custom_property = {
getter = function(file_info)
-- Custom logic to extract value
return "custom_value"
end,
transform = function(value)
-- Custom logic to transform for CodeCompanion
return value
end,
},
}
}
}
```
### Built-in Tool Variants
The plugin provides several built-in approaches for handling VS Code tools:
```lua
-- No tools (default)
local config1 = require("vs-code-companion").create_config_with_tools("none")
-- Use CodeCompanion's full_stack_dev tool for all VS Code tool
local config2 = require("vs-code-companion").create_config_with_tools("full_stack_dev")
-- Attempt to map VS Code tools to CodeCompanion tools (future feature)
local config3 = require("vs-code-companion").create_config_with_tools("mapped")
```
### One-time Import with Custom Config
You can also import prompts with a custom transformation config without changing your main configuration:
```lua
-- Import once with full_stack_dev tools
local custom_config = require("vs-code-companion").create_config_with_tools("full_stack_dev")
require("vs-code-companion").import_prompts_with_config(custom_config)
-- Or create a completely custom config
local getters = require("vs-code-companion").getters()
local transforms = require("vs-code-companion").transforms()
local my_config = {
description = {
getter = getters.get_description,
transform = transforms.transform_description,
required = true,
},
content = {
getter = getters.get_content,
transform = function(content, role)
-- Custom content transformation
return {
role = role or "user",
content = "CUSTOM PREFIX: " .. content,
}
end,
required = true,
},
-- ... other properties
}
require("vs-code-companion").import_prompts_with_config(my_config)
```
### packer.nvim
```lua
use {
'olimorris/codecompanion.nvim',
requires = {
'3ZsForInsomnia/vs-code-companion.nvim',
},
config = function()
require("codecompanion").setup({
-- your codecompanion config
})
end
}
```
## Basic Usage
### 1. Create VS Code Prompt Files
Create markdown files with YAML frontmatter in your project (default: `.github/prompts/`):
```markdown
---
description: "Review code for bugs and improvements"
model: "Claude Sonnet 3.5"
---
Please review this code for potential bugs, performance issues, and improvements...
```
Learn more about [VS Code's prompt format](https://code.visualstudio.com/docs/copilot/customization/prompt-files#_prompt-file-format) and see [examples](https://code.visualstudio.com/docs/copilot/customization/custom-chat-modes#_custom-chat-modes).
### 2. Import Prompts
```vim
:VsccImport
```
This reads VS Code prompt files from configured directories and adds them to CodeCompanion's prompt library as slash commands.
### 3. Use Imported Prompts
Open a CodeCompanion chat buffer and use imported prompts as slash commands:
- Type `/` to see all available commands
- Use `/vsc_` where `` is your prompt file name (sanitized)
- Example: `test-prompt.md` becomes `/vsc_test_prompt`
## CodeCompanion Integration
### Slash Commands in Chat Buffers
Add VS Code prompt functionality directly to CodeCompanion chat buffers by configuring slash commands:
```lua
{
'olimorris/codecompanion.nvim',
dependencies = {
'3ZsForInsomnia/vs-code-companion.nvim',
},
opts = {
strategies = {
chat = {
slash_commands = {
vs_import = require("vs-code-companion").import_slash_command,
},
},
},
-- your other codecompanion config
}
}
```
This enables `/vs_import` to import VS Code prompts from within a CodeCompanion buffer.
### VS Code Prompt Format
VS Code prompts use markdown files with YAML frontmatter. Supported fields:
```markdown
---
description: "Required - Brief description shown in picker"
model: "Optional - AI model name (see docs/models.md)"
tools: ["Optional", "array", "of", "tool", "names"]
---
Your prompt content here...
```
**Required:**
- `description` - Short description shown in pickers and command descriptions
**Optional:**
- `model` - AI model name (automatically converted from display names to technical names)
- `tools` - Array of tool names (currently replaced with CodeCompanion's `@{full_stack_dev}`)
## Configuration
Basic configuration options:
```lua
{
'3ZsForInsomnia/vs-code-companion.nvim',
opts = {
directories = {'.github/prompts', '.github/chatmodes'}, -- Where to find prompt files
}
}
```
## Future Features
### Planned Enhancements
- **Rules-based Configuration**: Configure different transformation rules based on file paths or names
```lua
rules = {
{
pattern = "*.chatmode.md",
transform = custom_chatmode_config
},
{
pattern = ".github/prompts/**",
transform = github_prompts_config
}
}
```
- **Required Field Validation**: Mark transformation properties as required and fail gracefully
```lua
transform = {
description = {
getter = getters.get_description,
transform = transforms.transform_description,
required = true -- Fail if this can't be extracted
}
}
```
- **VS Code to CodeCompanion Tool Mapping**: Smart mapping of VS Code tools to equivalent CodeCompanion tools
```lua
-- Future: automatic mapping like this
vs_code_tools = ["python", "typescript"]
-- → codecompanion_tools = "@{python_dev}@{typescript_dev}"
```
## Troubleshooting
**"No prompts found"**
**"X files failed to process"**
**"Not in git repository"**
**Telescope not working**
**Commands not working**
## Advanced Usage
For advanced configuration, CodeCompanion integration, and technical details, see:
- Git repository (for relative path resolution)
- [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim)