opilot
AGENTS.md94 starsChanged 5 months agoMITView on GitHub
Welcome! This document guides you through the recommended workflows, conventions, and tooling when working on the Opilot VS Code extension project. Follow these instructions strictly to ensure consistency, quality, and smooth collaboration. You are working on the Opilot extension, which integrates Ollama models into GitHub Copilot Chat inside VS Code. This project uses Ultracite, a zero-config preset built on Biome that enforces strict code quality standards through automated formatting and linting. The project has migrated from oxlint/oxfmt to Biome via…
We split this AGENTS.md into the rules it gives an agent
48 rules. About 0 are common, 27 are distinctive, and 21 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈27
Distinctive · estimate
This author's own choices. Worth a look.
21
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 44
Start Ollama app or run ollama serve
- Distinctive: line 65
Write code that is accessible, performant, type-safe, and maintainable.
- Distinctive: line 69
Use explicit types for function parameters and return values when they enhance clarity
- Very specific: line 70
Prefer unknown over any when the type is genuinely unknown
- Very specific: line 71
Use const assertions (as const) for immutable values and literal types
- Distinctive: line 73
Use meaningful variable names instead of magic numbers - extract constants with descriptive names
- Distinctive: line 77
Use arrow functions for callbacks and short functions
- Very specific: line 78
Prefer for...of loops over .forEach() and indexed for loops
- Very specific: line 79
Use optional chaining (?.) and nullish coalescing (??) for safer property access
- Distinctive: line 80
Prefer template literals over string concatenation
- Distinctive: line 81
Use destructuring for object and array assignments
- Very specific: line 82
Use const by default, let only when reassignment is needed, never var
- Very specific: line 86
Always await promises in async functions - don't forget to use the return value
- Very specific: line 87
Use async/await syntax instead of promise chains for better readability
- Distinctive: line 89
Don't use async functions as Promise executors
- Distinctive: line 93
Use function components over class components
- Distinctive: line 94
Call hooks at the top level only, never conditionally
- Very specific: line 96
Use the key prop for elements in iterables (prefer unique IDs over array indices)
- Distinctive: line 98
Don't define components inside other components
- Distinctive: line 99
Use semantic HTML and ARIA attributes for accessibility:
- Distinctive: line 101
Use proper heading hierarchy
- Distinctive: line 102
Add labels for form inputs
- Very specific: line 104
Use semantic elements (<button>, <nav>, etc.) instead of divs with roles
- Very specific: line 108
Remove console.log, debugger, and alert statements from production code
- Very specific: line 110
Use try-catch blocks meaningfully - don't catch errors just to rethrow them
- Distinctive: line 111
Prefer early returns over nested conditionals for error cases
- Distinctive: line 115
Keep functions focused and under reasonable cognitive complexity limits
- Distinctive: line 117
Use early returns to reduce nesting
- Distinctive: line 118
Prefer simple conditionals over nested ternary operators
- Very specific: line 123
Add rel="noopener" when using target="_blank" on links
- Very specific: line 124
Avoid dangerouslySetInnerHTML unless absolutely necessary
- Very specific: line 125
Don't use eval() or assign directly to document.cookie
- Distinctive: line 130
Avoid spread syntax in accumulators within loops
- Distinctive: line 131
Use top-level regex literals instead of creating them in loops
- Distinctive: line 132
Prefer specific imports over namespace imports
- Distinctive: line 133
Avoid barrel files (index files that re-export everything)
- Very specific: line 134
Use proper image components (e.g., Next.js <Image>) over <img> tags
- Very specific: line 138
Write assertions inside it() or test() blocks
- Distinctive: line 139
Avoid done callbacks in async tests - use async/await instead
- Very specific: line 140
Don't use .only or .skip in committed code
- Very specific: line 141
Keep test suites reasonably flat - avoid excessive describe nesting
- Distinctive: line 148
Meaningful naming: - Use descriptive names for functions, variables, and types
- Distinctive: line 152
Documentation: - Add comments for complex logic, but prefer self-documenting code
- Very specific: line 158
Use the provided Taskfile.yml to run common commands.
- Distinctive: line 209
Use VS Code settings to configure Ollama host, models, and completions.
- Distinctive: line 211
Use the Ollama sidebar for model lifecycle management (pull, run, stop, delete).
- Very specific: line 213
Use the command palette commands like Ollama: Build Modelfile to build custom models.
- Distinctive: line 221
Use the provided test suites:
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent Instructions: Visual Studio Code Extension Integrating Ollama into GitHub Copilot Chat
Welcome! This document guides you through the recommended workflows, conventions, and tooling when working on the Opilot VS Code extension project. Follow these instructions strictly to ensure consistency, quality, and smooth collaboration.
Before Starting Work
- Create or switch to the correct branch before editing code.
- Branch name format:
[type]/[short-title](e.g.,feat/add-ollama-integration).
Project Overview
You are working on the Opilot extension, which integrates Ollama models into GitHub Copilot Chat inside VS Code.
Key Features to Keep in Mind
- Local and cloud Ollama model usage inside Copilot Chat.
- Custom Ollama sidebar for model management.
@ollamachat participant for dedicated conversations.- Inline code completions using local models.
- Modelfile creation, editing, and building with syntax support.
- Streaming responses and vision model support.
- Local execution for privacy.
- Configuration via VS Code settings.
Development Environment Setup
Prerequisites:
- Node.js 20+
- pnpm (version pinned in
package.json) - VS Code 1.109.0 or higher
- GitHub Copilot Chat extension installed
- Ollama installed locally or remote access configured
Installing Ollama:
- Download from https://ollama.ai/download
- Start Ollama app or run
ollama serve - Login to Ollama Cloud if using cloud models (
ollama login)
Extension Installation:
- Install from VS Code Marketplace or
.vsixfile
- Install from VS Code Marketplace or
Code Quality Standards
This project uses Ultracite, a zero-config preset built on Biome that enforces strict code quality standards through automated formatting and linting. The project has migrated from oxlint/oxfmt to Biome via Ultracite, so check-formatting and format tasks are no longer needed — ultracite check and ultracite fix cover both linting and formatting in a single command.
Quick Reference
- Lint and format code:
pnpm dlx ultracite fix - Check for issues:
pnpm dlx ultracite check - Diagnose setup:
pnpm dlx ultracite doctor
Core Principles
Write code that is accessible, performant, type-safe, and maintainable. Focus on clarity and explicit intent over brevity.
Type Safety & Explicitness
- Use explicit types for function parameters and return values when they enhance clarity
- Prefer
unknownoveranywhen the type is genuinely unknown - Use const assertions (
as const) for immutable values and literal types - Leverage TypeScript's type narrowing instead of type assertions
- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
Modern JavaScript/TypeScript
- Use arrow functions for callbacks and short functions
- Prefer
for...ofloops over.forEach()and indexedforloops - Use optional chaining (
?.) and nullish coalescing (??) for safer property access - Prefer template literals over string concatenation
- Use destructuring for object and array assignments
- Use
constby default,letonly when reassignment is needed, nevervar
Async & Promises
- Always
awaitpromises in async functions - don't forget to use the return value - Use
async/awaitsyntax instead of promise chains for better readability - Handle errors appropriately in async code with try-catch blocks
- Don't use async functions as Promise executors
React & JSX
- Use function components over class components
- Call hooks at the top level only, never conditionally
- Specify all dependencies in hook dependency arrays correctly
- Use the
keyprop for elements in iterables (prefer unique IDs over array indices) - Nest children between opening and closing tags instead of passing as props
- Don't define components inside other components
- Use semantic HTML and ARIA attributes for accessibility:
- Provide meaningful alt text for images
- Use proper heading hierarchy
- Add labels for form inputs
- Include keyboard event handlers alongside mouse events
- Use semantic elements (
<button>,<nav>, etc.) instead of divs with roles
Error Handling & Debugging
- Remove
console.log,debugger, andalertstatements from production code - Throw
Errorobjects with descriptive messages, not strings or other values - Use
try-catchblocks meaningfully - don't catch errors just to rethrow them - Prefer early returns over nested conditionals for error cases
Code Organization
- Keep functions focused and under reasonable cognitive complexity limits
- Extract complex conditions into well-named boolean variables
- Use early returns to reduce nesting
- Prefer simple conditionals over nested ternary operators
- Group related code together and separate concerns
Security
- Add
rel="noopener"when usingtarget="_blank"on links - Avoid
dangerouslySetInnerHTMLunless absolutely necessary - Don't use
eval()or assign directly todocument.cookie - Validate and sanitize user input
Performance
- Avoid spread syntax in accumulators within loops
- Use top-level regex literals instead of creating them in loops
- Prefer specific imports over namespace imports
- Avoid barrel files (index files that re-export everything)
- Use proper image components (e.g., Next.js
<Image>) over<img>tags
Testing
- Write assertions inside
it()ortest()blocks - Avoid done callbacks in async tests - use async/await instead
- Don't use
.onlyor.skipin committed code - Keep test suites reasonably flat - avoid excessive
describenesting
When Biome Can't Help
Biome's linter will catch most issues automatically. Focus your attention on:
- Business logic correctness - Biome can't validate your algorithms
- Meaningful naming - Use descriptive names for functions, variables, and types
- Architecture decisions - Component structure, data flow, and API design
- Edge cases - Handle boundary conditions and error states
- User experience - Accessibility, performance, and usability considerations
- Documentation - Add comments for complex logic, but prefer self-documenting code
Task Execution Using Taskfile
Use the provided Taskfile.yml to run common commands. Run tasks with:
task <taskname>Common tasks
| Task Name | Description | Usage Example |
| check-types | Type checking | task check-types |
| lint | Run linter and formatting check | task lint |
| lint-fix | Auto-fix lint and formatting issues | task lint-fix |
| compile | Compile the extension | task compile |
| unit-tests | Run unit tests | task unit-tests |
| unit-test-coverage | Unit tests with coverage | task unit-test-coverage |
| extension-tests | Run VS Code extension tests | task extension-tests |
| integration-tests | Run integration tests (pulls models first) | task integration-tests |
| precommit | Run pre-commit checks | task precommit |
| release | Release the extension | task release |
| watch | Watch source and recompile | task watch |
Code Contribution Workflow
- Create or switch to the correct branch.
Run pre-commit tasks before committing:
task precommit- Test your changes thoroughly:
- Unit tests:
task unit-tests - Extension tests:
task extension-tests - Integration tests:
task integration-tests
- Unit tests:
Build the extension before release or PR:
task compile- Push your branch and create a pull request.
Extension-Specific Notes
- The extension auto-detects Ollama at
http://localhost:11434by default. - Use VS Code settings to configure Ollama host, models, and completions.
- For inline code completions, configure
ollama.completionModeland toggleollama.enableInlineCompletions. - Use the Ollama sidebar for model lifecycle management (pull, run, stop, delete).
- Manage modelfiles with the dedicated Modelfile Manager sidebar.
- Use the command palette commands like
Ollama: Build Modelfileto build custom models. - Leverage streaming support for real-time response in chat.
Debugging and Testing
- Launch the extension in VS Code Extension Development Host with F5.
Use the provided test suites:
- Unit tests with Vitest
- Extension integration tests
- Integration tests with pulled models
- Coverage target: 85% or higher.
Resources
- Ollama main repo: https://github.com/ollama/ollama
- Ollama Model Library: https://ollama.ai/library
- Ollama API Docs: https://github.com/ollama/ollama/blob/main/docs/api.md
- Ollama Modelfile Docs: https://github.com/ollama/ollama/blob/main/docs/modelfile.md
- VS Code Language Model API: https://code.visualstudio.com/api/references/vscode-api#LanguageModelsAPI
Summary
- Create or switch to a branch before coding.
- Run tasks via the Taskfile for consistency.
- Use Ultracite (Biome) for linting and formatting —
ultracite checkandultracite fixhandle both. - Test, lint, and build before pushing changes.
- Follow branch naming conventions.
- Use VS Code settings and extension UI for Ollama integration features.
Happy coding! 🚀
Other versions1 project uses a version of this.
Word for word · 1
- selfagency/opilot★ 90100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repositoryOne other file it gives its agents.
- .github/copilot-instructions.mdCopilot instructions
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

