Product changelog
Automatically sourced from the CursorToys extension repository.
CursorToys

The Guide’s entry for version 2025.5.26 notes that the average developer, when confronted with a simple HTTP request, will usually respond by spawning exactly seventeen response tabs, none of which they meant to keep, all of which they will lose anyway. This release introduces a response panel that behaves more like a sensible life-form: it updates in place, politely, and without multiplying.
v2025.5.26 — Mostly Harmless Panels and Rooted Environments
HTTP Environments at Project Root
Breaking Changes
- HTTP environment files moved to the project root:
.env,.env.local,.env.dev, etc. must live at the workspace root. The extension no longer reads or creates.{baseFolder}/http/environments/,.environments/, or related folders. - Removed setting
cursorToys.environmentsFolder: Use standard project-root dotenv files instead.
Added
- Project-root env discovery: Autocomplete, hover, watchers, and
# @envresolution use.env*files at the workspace root (.env.exampleis documentation-only and not listed as a runnable environment). - Initialize command: "CursorToys: Initialize Project Environment Files" creates
.envand.env.exampleat the workspace root. - HTTP response panel (default): HTTP responses are shown in a reusable webview panel that updates in place when you re-run the request (instead of opening many editor tabs). Configure via
cursorToys.httpRequestResponseView(panel/editor).
Changed
- Open environments command: Reveals
.envat the project root (or the workspace root folder if.envis missing). - Share/import: Environment shareables and bundles use project-root filenames (legacy
environments/...paths in imports are normalized to the root).
DeepFlow Sidebar
Added
- DeepFlow activity bar panel (experimental): Dedicated activity bar icon (
resources/deepflow.svg) opens an exclusive DeepFlow side panel. Enable under Settings → Cursor Toys › Experimental → DeepFlow (cursorToys.experimental.deepflow, default off). - DeepFlow specs view: Panel lists
.deepflow/specswith Drafts, In development (active), and Archive stages; per-task A-B-C files (APPROACH.md,BUSINESS_CONTEXT.md,COMPLETION_REPORT.md). - DeepFlow actions: Send to chat uses
@task folder refs and skill activation commands (Initialize DeepFlow,Approve task,Complete task). Plan/execute on a task send the draft or active folder only. - Initialize DeepFlow: When
.deepflow/specsis missing, the tree shows Initialize DeepFlow (click or toolbar). If.cursor/skills/deep-flow/SKILL.mdis missing, prompts to download the skill from godrix/deep-flow; then opens chat withInitialize DeepFlow(skill activation command). - DeepFlow empty stages: Stages with no task folders (e.g.
active/only containing.gitkeep) show an explicit empty message instead of a blank/spinning row; removed spinning icon on In development. - New DeepFlow Spec panel: choose type (bug, feature, refactor, chore, docs, spike), title, and description; Send to chat uses Remote Telegram-style injection (
cursorInject.send/ paste flow). - Open spec files: fixed tree click on A-B-C files (stable file URI resolution).
- Chat auto-submit: Windows fallback via PowerShell (
Ctrl+Enter); warning when text is pasted but submit fails (DeepFlow, Remote Chat, inject command), with platform hints (Linux: wmctrl/xdotool).
Sidebar View Visibility
Added
- Hide sidebar resource views: New setting
cursorToys.sidebar.hiddenViewslets you hide individual CursorToys explorer sections (Notepads, Commands, Prompts, Cursor Plans, Skills, Cursor Hooks, MCPB Packages). Default is empty (all visible). Changes apply when you save settings without reloading the window. DeepFlow is not in this list; it uses the experimental activity bar panel instead.
Changed
- Chat injection (shared): DeepFlow, Remote Chat,
cursorInject.send, and Refine and Send to Chat use the same paste-and-submit flow; warns when text is pasted but auto-submit fails (Cmd+Enter/Ctrl+Enter).
v1.13.1 — Share Skills Without Leaving the Tree
Fixed
- Skills Explorer — Share as CursorToys: CursorToys: Share as CursorToys (Skill) is now available from the Skills sidebar for personal skills (
~/.cursor/~/.claude), workspace skills, and when right-clicking SKILL.md (not only the skill folder row). The shareable generator receives the correctSKILL.mdpath when the command is invoked from tree items (SkillFileItem), not only from editor URIs.
v1.13.0 — The Guide to Distant Conversations and Depleted Budgets
Added
- Remote Chat Bridge (Telegram Connection): Tired of coding isolated in your own dark corner of the galaxy? You can now link your Cursor chats directly to a Telegram channel. Summaries of your progress are automatically "teleported" to the channel, and reply messages you receive there are injected back into the chat via cursorInject. The Guide classifies this as "the perfect tool for when you want your teammates to judge your code in real-time, without them actually needing to open an editor, which is more than most bureaucracies manage to achieve."
- AI Spending Tracker: We’ve introduced a status bar that monitors your Cursor API usage (Auto % and API %). It uses SQL wizardry to sniff out your session token directly from Cursor’s local database. The Guide warns: "Staring at your AI quota meter is a profound experience, comparable to gazing into the event horizon of a black hole: you know the end is near, but you just can’t look away."
Technical notes
- cursor-toys-remote-chat Skill: We’ve implemented a skill that handles writing the summaries (.cursor/remote/session/summary-*.json). The extension monitors these files and takes care of "hurling" them to the Telegram channel.
- Control Commands: We’ve added commands to start/pause remote chat, link chats, initialize sessions, and configure both the Telegram and Spending bridges.
- SQLite Integration: The spending tracker utilizes sql.js for session token auto-detection.
v1.12.1 - Mostly Harmless MCP Bundles
Added
MCPB (MCP Bundle) support
- Install from .mcpb: You may now select a
.mcpbfile (a ZIP in disguise, as per the Model Context Protocol bundles spec) and have CursorToys extract it into~/.mcpb/, read itsmanifest.json, and offer to add the server to your Cursor MCP config (~/.cursor/mcp.json). Manifest versions 0.1 through 0.4 are accepted; the universe may add more later. - Preview before saving: Before anything is written to
mcp.json, a preview panel opens. It displays the package name, server type, command, args, and—in a fit of user-friendly behaviour—editable environment variable values. You may adjust API keys, paths, or the meaning of life (or at least the env vars) in input fields. Only when you click Add to Cursor MCP does the extension write to your config. If you click Cancel, the extracted folder is removed and nothing is written; the Guide notes that this is "exactly the kind of thing that prevents total chaos, except when it doesn't." - Sidebar tree — MCPB Packages: A new view in the Explorer sidebar lists installed MCPB packages under MCPB Packages. Each entry shows the package label (from the manifest); you may reveal the package folder in the system file manager or Uninstall it. Uninstalling removes the folder from
~/.mcpband the corresponding entry from~/.cursor/mcp.json. The Guide advises: "Always know where your towel is, and where your MCP servers are." - Menu and commands: Install MCPB appears in the CursorToys status bar menu and in the Command Palette. A refresh button on the MCPB Packages view and context actions (Reveal in Folder, Uninstall) complete the experience.
Fixed - The Case of the Vanishing Extension
- Extension not working when installed from VSIX: When the extension was installed from a
.vsixpackage (rather than run via Debug), it could fail to activate or run correctly. This was caused by bundling a runtime dependency (adm-zip) in the extension. The VS Code packaging process does not always bundlenode_modulesfrom npm dependencies in the same way as the development environment, so code that works in the Extension Development Host (F5) can break when the same code runs from an installed VSIX. The fix was to remove the external dependency and extract.mcpb(ZIP) files using the system:unzipon macOS/Linux and PowerShellExpand-Archiveon Windows. The extension now has no runtime npm dependencies and behaves the same whether you run it from Debug or install it from a VSIX.
Technical notes
- Paths: Packages live in
~/.mcpb/<serverId>/; the server ID is derived from the manifestname(sanitized). The Cursor global config file used is~/.cursor/mcp.json. - Manifest: The extension reads
server.mcp_config(command, args, env) and appliesplatform_overridesfor the current OS (darwin,win32,linux). Placeholders${__dirname}in args and env are replaced with the package directory path. - Extraction: .mcpb files (ZIP) are unpacked using the system (
unzipon macOS/Linux, PowerShell on Windows); no runtime npm dependency is required (see v1.12.1).
v1.11.0 - The Hitchhiker’s Guide to Updates
Added
Chrome Extension Support

- Web-to-Cursor workflow: The CursorToys Cursor extension now works together with the CursorToys Chrome extension so you can send selected text from any web page straight into Cursor.
- Deeplink contract: The extension registers a URI handler for
cursor://godrix.cursor-toys/annotation. When the Chrome extension triggers "Send to CursorToys", it opens this deeplink with the selection and page context. - Annotation panel: Incoming deeplinks open the Annotation panel inside Cursor, showing:
- The selected text (code/content from the page)
- Clickable source URL and page title
- Send to Chat button to send the selection and source context to the AI chat in one click
- Parameters supported:
code(selection),sourceUrl,sourceTitle; URL length limit 8000 characters (the Chrome extension truncates or notifies when needed). - Chrome Extension: Available in the Chrome Web Store.
Release Notes Panel ("What's New")
- Update notification: When the extension is updated, a What's New panel opens once with the latest release notes (changelog).
- Manual access: You can open it anytime from the CursorToys menu (status bar) or via the command CursorToys: What's New.
- Changelog from GitHub: Release notes are loaded from the repository at runtime so the extension package stays small (CHANGELOG is not shipped inside the .vsix).
Changed
- URI handler: Handles annotation deeplinks from the Chrome extension; validates URL length before opening the panel.
- Menu: Added What's New as the first option in the CursorToys quick pick menu.
[1.10.0] - 2026-02-16
Added
🧪 HTTP Request Assertions
- Test Automation: Complete assertion system for HTTP request testing
- New
@assert()annotation syntax for validating HTTP responses - Parse assertions from comment blocks in
.reqfiles - Validate responses against expected values automatically
- Display assertion results inline in
.resfiles
- New
- Comprehensive Operators: Support for 27+ assertion operators
- Comparison:
equals,notEquals,gt,gte,lt,lte - String Operations:
contains,notContains,startsWith,endsWith,matches,notMatches - Type Checks:
isNull,isNotNull,isEmpty,isNotEmpty,isDefined,isUndefined - Value Checks:
isTruthy,isFalsy,isNumber,isString,isBoolean,isArray,isJson - Other Operations:
in,notIn,between,length
- Comparison:
- Flexible Syntax: Multiple assertion formats supported
- 4 parameters with description:
@assert("description", "expression", "operator", value) - 3 parameters without description:
@assert("expression", "operator", value) - 2 parameters (no value):
@assert("expression", "operator")
- 4 parameters with description:
- Expression Resolution: Access response properties with dot notation
- Status code:
res.status - Headers:
res.headers.content-type - Body properties:
res.body.userId,res.body.users[0].name - Nested objects and arrays fully supported
- Status code:
- Rich Result Display: Formatted assertion results in response files
- Pass/fail indicator (✓/✗)
- Actual vs expected values for failures
- Error messages for invalid assertions
- Summary statistics (passed/total)
- Configuration Options: Fine-tune assertion behavior
cursorToys.httpAssertionsEnabled: Enable/disable assertions (default: true)cursorToys.httpAssertionsShowInline: Show results inline in.resfiles (default: true)cursorToys.httpAssertionsFailOnError: Stop execution on assertion failure (default: false)
- New Commands:
cursor-toys.runAssertions: Run assertions for HTTP request file
- Configurable Environments Folder: Setting
cursorToys.environmentsFolder(default:.environments) so environment files can live in.cursor/http/.environments/or a custom folder name
📝 New Files
**src/assertionTypes.ts**: TypeScript types and interfaces for assertion systemAssertionOperator: All supported operatorsAssertion: Assertion definition structureAssertionResult: Validation result formatResponseData: HTTP response structure
**src/assertionParser.ts**: Parser for extracting assertions from request filesextractAssertions(): Extract all assertions from file contentvalidateAssertionSyntax(): Validate assertion syntaxremoveAssertionBlocks(): Clean assertions from request content- Support for regex patterns, strings, numbers, booleans, null values
**src/assertionValidator.ts**: Validator for executing assertions against responsesvalidateAssertions(): Run all assertions against HTTP responseformatAssertionResults(): Format results for display- Expression resolver with dot notation and array indexing
- Comprehensive operator evaluation logic
Changed
🔄 HTTP Request Executor Enhanced
**src/httpRequestExecutor.ts**:- Integrated assertion parsing and validation
- Extract and execute assertions automatically on request execution
- Include assertion results in response output
- Clean request content before execution (remove assertion blocks)
**src/httpCodeLensProvider.ts**:- Added "Run Assertions" CodeLens for request files with assertions
- Visual indicator for testable requests
- New command integration for running assertions
**package.json**:- Updated version to 1.10.0
- Added assertion configuration options
- Registered new
cursor-toys.runAssertionscommand - Updated extension description highlighting new assertion capabilities
📚 HTTP Documentation Skill
- Built-in skill for HTTP Requests: Install the "HTTP Requests Documentation" Agent Skill directly from the extension
- How to use: Right-click the HTTP folder (e.g.
.cursor/http/) in the Explorer and choose "CursorToys: Add Skill: HTTP Requests Documentation" - Skill is installed in your personal skills folder; the AI uses it when you work with
.req/.requestfiles, environments, and assertions
- How to use: Right-click the HTTP folder (e.g.
**src/utils.ts** –createHttpDocsSkill/generateHttpSkillContent:- Generated skill content aligned with canonical
http-request-docs-cursor-toysSKILL.md - Updated frontmatter description for better discoverability
- Full assertion operators list with categories (Comparison, String, Type Checks, Value Checks, Other)
- Best Practices section as bold items with paragraphs (replacing numbered list)
- Response Handling updated with CLI test-runner bullet (Jest-style output)
- Environment decorators and inline variables wording matched to skill doc
- File location and troubleshooting reference
.cursor/http/and.cursor/http/.environments/for consistency
- Generated skill content aligned with canonical
Technical Details
🏗️ Architecture
- Separation of Concerns: Three dedicated modules for assertions
- Types (
assertionTypes.ts): Clean type definitions - Parser (
assertionParser.ts): Extraction and syntax validation - Validator (
assertionValidator.ts): Runtime validation and formatting
- Types (
- Flexible Parsing: Regex-based parser supporting multiple formats
- Handles quoted strings, numbers, booleans, null, regex patterns
- Line number tracking for error reporting
- Comment block detection (
/* ... */)
- Expression Evaluation: Safe property access with dot notation
- Handles nested objects:
res.body.user.profile.name - Array indexing:
res.body.users[0],res.body.items[5].id - Undefined/null safety with graceful fallback
- Handles nested objects:
- Result Formatting: Clean, readable output for developers
- Pass/fail symbols (✓/✗)
- Expected vs actual values for failures
- Summary statistics at the end
- Integration with
.resfiles
📚 Use Cases
- API Testing: Validate API responses automatically
- Integration Testing: Test HTTP endpoints in development
- Contract Testing: Ensure APIs meet expected contracts
- Regression Testing: Catch breaking changes early
- Development Workflow: Test APIs without leaving editor
🎯 Example Usage
/*
* @assert("Status should be 200", "res.status", "equals", 200)
* @assert("Content-Type should be JSON", "res.headers.content-type", "contains", "application/json")
* @assert("User ID should exist", "res.body.userId", "isDefined")
* @assert("User name should not be empty", "res.body.name", "isNotEmpty")
* @assert("User age should be greater than 18", "res.body.age", "gt", 18)
*/
GET https://api.example.com/user/123
[1.9.0] - 2026-02-07
Added
🎓 Skills Marketplace Integration
- Tech Leads Club Integration: Complete integration with Tech Leads Club Agent Skills marketplace
- Browse and discover community-driven skills from Tech Leads Club
- New command
cursor-toys.browseRecommendations: Browse Skills Marketplace (replaces old recommendations browser) - Elegant marketplace interface with category filters and search
- Direct installation via terminal with
npx @tech-leads-club/agent-skills - GitHub integration to view skills source code
- Visual indicators for skill features (references, scripts, assets folders)
- Skills Registry Configuration:
- New setting
cursorToys.skillsRegistryUrl: URL to Agent Skills registry (default: Tech Leads Club) - Smart caching system (1 hour memory cache, 24 hours disk cache)
- Automatic fallback to cached data when offline
- New setting
🌐 Enhanced HTTP Helper Functions
- New Dynamic Helpers: Added 4 new helper functions for HTTP requests
{{@userAgent()}}: Generate random browser User-Agent string (Chrome, Safari, Firefox){{@ip()}}: Generate random IPv4 address{{@lorem(count)}}: Generate Lorem Ipsum text (1 to 100 words, default 5){{@randomFrom("a", "b", "c")}}: Pick random item from list of arguments
- Use Cases: Perfect for API testing, mock data generation, and load testing
📝 HTTP Documentation Generator
- llms.txt Generator: New command
cursor-toys.generateHttpLlms- Automatically generates comprehensive HTTP features documentation
- Includes examples for all formats: cURL, REST Client, variables, helpers
- Available in context menu for HTTP folders
- Documents all helper functions, environment variables, and decorators
- Auto-generated on HTTP folder initialization
Changed
🔄 Recommendations System Refactoring
- Removed Legacy Features: Streamlined recommendations system
- Removed old recommendations index system (CursorToys marketplace)
- Removed project context detection and auto-recommendations on startup
- Removed
cursor-toys.checkRecommendationscommand - Simplified to focus on Skills Marketplace integration
- Settings Migration:
- Removed:
cursorToys.recommendationsIndexUrl(replaced byskillsRegistryUrl) - Removed:
cursorToys.recommendationsIndexGistId(no longer needed) - Removed:
cursorToys.recommendationsCheckOnStartup(auto-check removed) - Kept:
cursorToys.recommendationsEnabled(now controls Skills Marketplace) - Kept:
cursorToys.recommendationsSuggestInterval(reserved for future use)
- Removed:
- Menu Updates:
- Main menu now shows "Open Skills Marketplace" instead of "Open Marketplace"
- Removed "Check Recommendations" option from main menu
- Clearer focus on Skills from Tech Leads Club
🛠️ Backend Architecture
- RecommendationsManager Refactoring: Complete rewrite for skills-only focus
- New method
getAllSkills(): Fetch all skills from registry - Removed
getRecommendationsForContext(): No longer needed - Removed
detectProjectContext(): Project analysis removed - Removed
shouldShowRecommendations(): Auto-suggestions removed - Simplified caching system (memory + disk)
- Maintained backward compatibility with deprecated methods
- New method
- RecommendationsBrowserPanel Refactoring: New Skills Marketplace UI
- Redesigned for skill browsing experience
- Category-based filtering with Tech Leads Club categories
- Author and version information display
- Subfolder detection (references, scripts, assets)
- Install command copy and terminal integration
- GitHub repository links for each skill
Technical Details
Enhanced Files
**src/recommendationsManager.ts**:- Simplified to focus on skills registry fetching
- New interface
SkillsRegistrywith categories and skills - Smart caching with configurable TTL (1h memory, 24h disk)
- Removed all project context detection logic
- Maintained backward compatibility for deprecated methods
**src/recommendationsBrowserPanel.ts**:- Complete UI redesign for skills marketplace
- Category filtering with visual badges
- Search functionality across skills
- Install command generation and clipboard copy
- Terminal integration for direct installation
- GitHub integration for source code viewing
- Visual indicators for skill subfolders
**src/httpRequestExecutor.ts**:- Added 4 new helper functions:
@userAgent(),@ip(),@lorem(count),@randomFrom(...) - Enhanced helper function registry
- Improved helper function documentation
- Added 4 new helper functions:
**src/utils.ts**:- New function
createHttpLlmsFile(): Generate HTTP documentation - Comprehensive llms.txt template with all features documented
- Auto-generation support for HTTP folder initialization
- New function
**src/extension.ts**:- Removed
checkRecommendationsOnStartup()function - Removed
workspaceChangeListenerfor recommendations - Updated menu items for Skills Marketplace
- Added
generateHttpLlmscommand registration - Simplified command registrations (removed unused recommendation commands)
- Removed
**package.json**:- Version bumped from 1.8.1 to 1.9.0
- Added
cursor-toys.generateHttpLlmscommand - Updated settings: new
skillsRegistryUrl, removed old recommendation URLs - Updated command descriptions for Skills Marketplace
- Maintained activation events for Skills Marketplace
New Commands
cursor-toys.generateHttpLlms: Generate comprehensive HTTP documentation (llms.txt)
Removed Commands
cursor-toys.checkRecommendations: Automatic project recommendations (replaced by Skills Marketplace)
Configuration Changes
- Added:
cursorToys.skillsRegistryUrl- URL to Tech Leads Club skills registry - Removed:
cursorToys.recommendationsIndexUrl- Old recommendations index URL - Removed:
cursorToys.recommendationsIndexGistId- Old Gist-based recommendations - Maintained:
cursorToys.recommendationsEnabled- Now controls Skills Marketplace - Maintained:
cursorToys.recommendationsSuggestInterval- Reserved for future features
Use Cases
Browsing Skills Marketplace:
- Run "CursorToys: Browse Recommendations Marketplace" command (or use main menu)
- Browse skills by category or search by keyword
- Click "Install in Cursor" to run installation in terminal
- Or copy install command to clipboard
- View skill source code on GitHub
Using New HTTP Helpers:
## Test Request with Random Data
POST {{BASE_URL}}/api/feedback
User-Agent: {{@userAgent()}}
X-Forwarded-For: {{@ip()}}
Content-Type: application/json
{
"feedback": "{{@lorem(20)}}",
"source": "{{@randomFrom("web", "mobile", "api")}}"
}
Generating HTTP Documentation:
- Right-click on
.cursor/http/folder in Explorer - Select "CursorToys: Generate llms.txt"
- Comprehensive documentation is created in HTTP folder
- Share with team or use as reference
Migration Guide
For Users:
- Old recommendations index URLs are no longer supported
- Skills Marketplace replaces old recommendations system
- All skills now come from Tech Leads Club community registry
- No action needed - just explore the new Skills Marketplace!
For Extension Developers:
- If using
getAllRecommendations(): Now returns skills in compatible format - If using
getRecommendationsForContext(): Deprecated, usegetAllSkills()instead - If checking project context: Feature removed, use Skills Marketplace directly
[1.8.0] - 2026-01-24
Added
🎓 Enhanced Skills Management
- Save as Personal Skill: New command
cursor-toys.save-as-user-skillto move skills from project to personal folder- Available via context menu for skill folders
- Moves skills to
~/.cursor/skills/or~/.claude/skills/based on configuration - Automatically creates personal skills folder if needed
- Create Skill Command: New command
cursor-toys.createSkillto create new skills- Available from Skills view title bar and context menu
- Creates new skill folder with SKILL.md file
- Supports both personal and project skills
- Enhanced Sharing for Commands and Prompts:
- New command
cursor-toys.shareUserCommandAsCursorToys: Share personal commands as CursorToys format - New command
cursor-toys.shareUserPromptAsCursorToys: Share personal prompts as CursorToys format - Available in context menu for Commands and Prompts views
- New command
Changed
🔧 AI Provider Architecture Refactoring
- Simplified AI Implementation: Refactored from abstract provider system to direct API implementation
- Removed
BaseAIProviderabstract class andaiProvidersmodule - Added direct Gemini API implementation (
geminiApi.ts) using nativefetch - Removed
@google/genaidependency for lighter bundle size - Reduced code complexity and improved maintainability
- Removed
- Improved Error Handling: Enhanced error messages and timeout handling
- Better error messages for API key validation
- Improved timeout error messages with retry information
- Enhanced quota/rate limit error handling with retry time extraction
- More detailed error context for debugging
- API Key Management: Streamlined API key management
- Renamed commands:
configureAIProvider→configureGeminiApiKey,removeAIProviderKey→removeGeminiApiKey - Simplified API key storage and retrieval using VS Code Secrets API directly
- Improved validation flow
- Better error messages for configuration issues
- Renamed commands:
🎯 Skills Management Improvements
- Folder-Based Structure: Updated Skills tree view to use folder-based structure
- Skills are now displayed as folders (not individual files)
- Context menu actions work on skill folders
- Better visual organization matching actual file structure
- Command Title Consistency: Updated command titles for better clarity
- "Generate Deeplink" commands now consistently named
- "Share as CursorToys" commands clearly distinguished from deeplinks
- Improved command palette organization
- Context Menu Organization: Improved context menu structure
- Removed category-level share actions from Commands and Prompts views
- Better organization of sharing options
- Clearer separation between deeplink and CursorToys sharing
⌨️ Keyboard Shortcuts
- Refine Selection Shortcut: Removed
whenclause fromrefineSelectionWithAIshortcut- Shortcut now works globally, not just when text is selected
- More consistent behavior with other refinement commands
Changed
🤖 AI Text Refinement Refactoring
- Simplified Architecture: Refactored AI text refinement to use direct API implementation
- Replaced abstract provider system with direct Gemini API calls (
geminiApi.ts) - Removed
@google/genaidependency in favor of nativefetchimplementation - Simplified API key management (renamed
configureAIProvider→configureGeminiApiKey) - Updated configuration settings (
aiProvider,aiModel,aiRefinePrompt,aiRequestTimeout→geminiModel,geminiRefinePrompt,geminiRequestTimeout) - Improved error handling and timeout management
- Added new
processWithPromptcommand for custom prompt processing
- Replaced abstract provider system with direct Gemini API calls (
Technical Details
Enhanced Files
**src/geminiApi.ts** (NEW):- New direct Gemini API implementation using native
fetch - No external dependencies (removed
@google/genai) - Improved error handling with detailed error messages
- Better timeout handling with AbortController
- Enhanced quota/rate limit error detection
- New direct Gemini API implementation using native
**src/aiProviders/geminiProvider.ts**(REMOVED):- Removed in favor of direct API implementation
**src/aiProviders/index.ts**(REMOVED):- Removed abstract provider system
**src/textRefiner.ts**:- Refactored to use direct
callGeminiApifunction - Added
processWithPromptfunction for custom prompt processing - Improved error handling flow
- Better integration with new direct API architecture
- Added support for reading prompts from project and personal folders
- Refactored to use direct
**src/extension.ts**:- Added
save-as-user-skillcommand registration - Added
createSkillcommand registration - Added
shareUserCommandAsCursorToysandshareUserPromptAsCursorToyscommands - Added
processWithPromptcommand registration - Updated AI command registrations (renamed
configureAIProvider→configureGeminiApiKey,removeAIProviderKey→removeGeminiApiKey) - Updated Skills tree provider integration
- Improved context menu organization
- Updated command titles for consistency
- Added
**src/shareableGenerator.ts**:- Enhanced to support new sharing commands for Commands and Prompts
- Improved validation for Skills sharing
**src/shareableImporter.ts**:- Enhanced Skills import flow
- Improved folder structure handling for Skills
**src/userSkillsTreeProvider.ts**:- Updated to handle folder-based items correctly
- Improved context value handling for skill folders
- Better integration with new commands
**package.json**:- Version bumped from 1.7.0 to 1.8.0
- Added new activation events for Skills commands and
processWithPrompt - Updated activation events for AI commands (renamed
configureAIProvider→configureGeminiApiKey) - Updated configuration settings (
aiProvider,aiModel,aiRefinePrompt,aiRequestTimeout→geminiModel,geminiRefinePrompt,geminiRequestTimeout) - Removed
@google/genaidependency (replaced with native fetch implementation) - Updated command titles for consistency
- Reorganized command palette entries
- Improved keyboard shortcut configuration
New Commands
cursor-toys.save-as-user-skill: Move skill from project to personal foldercursor-toys.createSkill: Create new skill folder with SKILL.mdcursor-toys.shareUserCommandAsCursorToys: Share personal command as CursorToys formatcursor-toys.shareUserPromptAsCursorToys: Share personal prompt as CursorToys formatcursor-toys.processWithPrompt: Process text with a custom prompt from your prompts library
Renamed Commands
cursor-toys.configureAIProvider→cursor-toys.configureGeminiApiKey: Configure Gemini API keycursor-toys.removeAIProviderKey→cursor-toys.removeGeminiApiKey: Remove Gemini API key
Use Cases
Moving Skills to Personal Library:
- Right-click on skill folder in Skills view
- Select "Move to Personal Skills"
- Skill is moved to
~/.cursor/skills/or~/.claude/skills/ - Skill is now available across all projects
Creating New Skills:
- Click "Create Skill" button in Skills view title bar
- Enter skill name
- Choose Personal or Project location
- SKILL.md file is created and opened in editor
Sharing Personal Commands/Prompts:
- Right-click on command or prompt in tree view
- Select "Share as CursorToys"
- Shareable link is copied to clipboard
- Share with team members
Processing Text with Custom Prompts:
- Select text in editor or copy to clipboard
- Run "CursorToys: Process with Prompt" command
- Select a prompt from your personal or project prompts library
- Text is processed with the selected prompt and replaced/clipped
[1.7.0] - 2026-01-23
Added
🤖 AI-Powered Text Refinement
- AI Text Refiner: Refine text and code using AI providers
- New command
cursor-toys.refineSelectionWithAI: Refine selected text in editor with AI - New command
cursor-toys.refineClipboardWithAI: Refine clipboard text with AI - Keyboard shortcuts:
Cmd+Shift+R(selection) andCmd+Alt+Shift+R(clipboard) - Support for multiple AI providers (currently Google Gemini)
- Configurable AI model and refinement prompt
- Secure API key storage using VS Code Secrets API
- New command
- AI Provider Commands:
cursor-toys.configureAIProvider: Configure AI provider and API keycursor-toys.removeAIProviderKey: Remove stored API key
- Gemini Provider: Complete integration with Google Gemini API
- Support for Gemini 2.5 Flash and Pro models
- Automatic model selection (defaults to gemini-2.5-flash)
- Safety settings optimized for code and text refinement
- Configurable request timeout (default: 30 seconds)
- Comprehensive error handling with user-friendly messages
- AI Configuration Options:
cursorToys.aiProvider: Choose AI provider (default: "gemini")cursorToys.aiModel: Specify AI model (e.g., "gemini-2.5-flash", "gemini-2.5-pro")cursorToys.aiRefinePrompt: Customize refinement promptcursorToys.aiRequestTimeout: Set request timeout in seconds (default: 30)
Changed
- HTTP Environment Management: Enhanced environment folder creation
- Automatically creates HTTP folder with llms.txt when environments are initialized
- llms.txt provides comprehensive documentation on HTTP features and usage
- Includes examples for cURL, REST Client format, variables, and helper functions
- Updates to environment manager ensure HTTP folder exists before operations
Technical Details
New Files
**src/textRefiner.ts**: Core text refinement systemrefineClipboard(): Refine clipboard text with AIrefineSelectedText(): Refine selected text in editorgetAIProvider(): Factory function for AI provider instances- Progress indicators and error handling
- Automatic API key configuration flow
**src/aiProviders/index.ts**: AI provider interface and typesAIProviderinterface: Standard interface for all AI providersAIProviderType: Type union for supported providers- Provider discovery and validation
**src/aiProviders/geminiProvider.ts**: Google Gemini implementation- Singleton pattern for global access
- API key management with VS Code Secrets
- Text refinement with safety settings
- Model validation and configuration
- Comprehensive error handling
Enhanced Files
**src/extension.ts**:- Registered AI refinement commands
- Added keyboard shortcuts for refinement
- Integrated AI provider configuration commands
- Added context menu items for text refinement
**src/environmentManager.ts**:- Enhanced
createEnvironment()to create HTTP folder and llms.txt - Enhanced
initializeDefaultEnvironments()to ensure HTTP folder exists - Enhanced
createFileWatcher()to create HTTP folder when needed - Automatic llms.txt creation for HTTP documentation
- Enhanced
**src/utils.ts**:- Added
createHttpLlmsFile(): Creates comprehensive HTTP documentation - llms.txt includes all HTTP features: cURL, REST Client, variables, helpers
- Added
**package.json**:- Version bumped from 1.6.0 to 1.7.0
- Added AI refinement commands
- Added AI configuration options
- Added keyboard shortcuts for refinement
- Added context menu items for selection refinement
- Added dependency:
@google/genaifor Gemini integration
New Commands
cursor-toys.refineSelectionWithAI: Refine selected text with AIcursor-toys.refineClipboardWithAI: Refine clipboard text with AIcursor-toys.configureAIProvider: Configure AI provider and API keycursor-toys.removeAIProviderKey: Remove stored AI provider key
Configuration Options Added
cursorToys.aiProvider: AI provider to use (default: "gemini")cursorToys.aiModel: AI model to use (optional, provider default if empty)cursorToys.aiRefinePrompt: Prompt for text refinementcursorToys.aiRequestTimeout: Request timeout in seconds (default: 30)
Keyboard Shortcuts
Cmd+Shift+R/Ctrl+Shift+R: Refine selected textCmd+Alt+Shift+R/Ctrl+Alt+Shift+R: Refine clipboard text
Dependencies Added
@google/genai: Google Gemini API client (version ^1.38.0)
Use Cases
Refining Text in Editor:
- Select text or code in editor
- Press
Cmd+Shift+Ror use Command Palette: "CursorToys: Refine Selection with AI" - Text is refined and replaced in place
- First-time use prompts for API key configuration
Refining Clipboard Text:
- Copy text to clipboard
- Press
Cmd+Alt+Shift+Ror use Command Palette: "CursorToys: Refine Clipboard Text with AI" - Clipboard is updated with refined text
- Paste refined text anywhere
Configuring AI Provider:
- Use Command Palette: "CursorToys: Configure AI Provider"
- Enter your Google Gemini API key (get from https://aistudio.google.com/apikey)
- Key is securely stored using VS Code Secrets API
- Optional: Configure AI model in settings (e.g., "gemini-2.5-pro")
Customizing Refinement Prompt:
- Open VS Code settings
- Search for "CursorToys AI Refine Prompt"
- Customize the prompt (e.g., "Make this more concise and professional")
- Refinement uses your custom prompt
Benefits:
- Improve Code Quality: Fix typos, improve clarity, enhance documentation
- Enhance Writing: Refine commit messages, comments, and documentation
- Quick Cleanup: Clean up messy text from external sources
- Context Preservation: AI maintains original language and context
- Seamless Workflow: Refine without leaving Cursor/VS Code
[1.6.0] - 2026-01-XX
Added
🎯 Skills Management
- Skills Support: Complete support for Cursor Skills
- New "Skills" view in Explorer sidebar to browse and manage skills
- Support for both personal skills (
~/.cursor/skills/,~/.claude/skills/) and project skills (workspace/.cursor/skills/,workspace/.claude/skills/) - Visual tree view with hierarchical folder structure (Category → Skill Folder → SKILL.md)
- Automatic tree view refresh on file changes
- Drag-and-drop support for organizing skills between folders
- Skills Commands:
cursor-toys.openSkill: Open SKILL.md file in editorcursor-toys.generateSkillDeeplink: Generate deeplink for skillcursor-toys.shareAsCursorToysSkill: Share skill as CursorToys formatcursor-toys.shareAsCursorToysSkillFolder: Share skills folder as bundlecursor-toys.deleteSkill: Delete skill foldercursor-toys.renameSkill: Rename skill foldercursor-toys.revealSkill: Reveal skill in file systemcursor-toys.refreshSkills: Refresh skills tree view
- Skills Sharing: Complete sharing infrastructure for skills
- Share individual skills via deeplink (
cursor://.../skill?name={skillName}&text={content}) - Share individual skills via CursorToys compressed format
- Share skills folders as bundles (
cursortoys://SKILL_BUNDLE:...) - Import skills from deeplinks and shareables
- Support for both personal and project skills import
- Share individual skills via deeplink (
- Skills Tree View Features:
- Hierarchical display: Category (Personal/Workspace) → Skill Folders → SKILL.md
- Visual distinction between personal and workspace skills
- Context menu with all management options
- File system watchers for real-time updates
- Support for
.cursor/skills/and.claude/skills/folders
- Skills CodeLens: CodeLens support for SKILL.md files
- "Share as Deeplink" and "Share as CursorToys" actions in SKILL.md files
- Automatic detection of SKILL.md files in skills folders
🎨 UI Improvements
- Personal Commands View: Enhanced to match Hooks and Plans structure
- Now displays categories at root level: "Personal (~/.cursor)" and "{workspaceName} (workspace)"
- Better organization with clear separation between personal and project commands
- Maintains backward compatibility with existing folder structure
- Personal Prompts View: Enhanced to match Hooks and Plans structure
- Now displays categories at root level: "Personal (~/.cursor)" and "{workspaceName} (workspace)"
- Better organization with clear separation between personal and project prompts
- Maintains backward compatibility with existing folder structure
Changed
- UserCommandsTreeProvider: Updated to show Personal/Workspace categories
- Added
'category'type to tree items - Root level now shows categories instead of direct files
- Improved drag-and-drop handling for categories
- Added
- UserPromptsTreeProvider: Updated to show Personal/Workspace categories
- Added
'category'type to tree items - Root level now shows categories instead of direct files
- Improved drag-and-drop handling for categories
- Added
- Shareable Generator: Extended to support skills type
- Added
generateShareableForSkillFolder(): Generate shareable for skills folder bundle - Added
collectSkillFoldersFromFolder(): Helper to collect skill folders recursively - Added skill type to all shareable functions
- Validation of SKILL.md file naming
- Added
- Shareable Importer: Enhanced to handle skills imports
- Added
importSkillBundle(): Import skills bundle from shareable - Support for
cursortoys://SKILL:andcursortoys://SKILL_BUNDLE:protocols - Skills import flow with personal/project location choice
- Creates skill folder structure (folder with SKILL.md inside)
- Added
- Deeplink Generator/Importer: Extended to support skills
- Added skill type detection in
getFileTypeFromPath() - Support for
cursor://.../skill?name={skillName}&text={content}format - Skills deeplink generation uses skill folder name as skill name
- Skills import creates folder structure automatically
- Added skill type detection in
- CodeLens Provider: Enhanced to detect SKILL.md files
- Added skill type detection
- CodeLens actions for SKILL.md files
- Utils Enhanced: Added skills path helpers
getSkillsPath(): Get path to skills folder (personal or project)getPersonalSkillsPaths(): Get personal skills paths (includes both .cursor and .claude)isSkillFolder(): Check if folder contains SKILL.mdgetFileTypeFromPath(): Extended to detect skill files (SKILL.md)
Technical Details
New Files
**src/userSkillsTreeProvider.ts**: Complete skills management system- Tree provider for skills with drag-and-drop support
- Hierarchical folder structure display (Category → Skill Folder → SKILL.md)
- Support for both personal and project skills
- Context menu integration
- File system integration for opening and revealing files
- Visual icons for skill folders and SKILL.md files
Enhanced Files
**src/utils.ts**:- Added
getSkillsPath(): Get skills folder path - Added
getPersonalSkillsPaths(): Get personal skills paths array - Added
isSkillFolder(): Check if folder is a skill folder - Extended
getFileTypeFromPath()to detect'skill'type
- Added
**src/userCommandsTreeProvider.ts**:- Added
'category'type support - Modified
getChildren()to return Personal/Workspace categories at root - Updated
getTreeItem()to handle category items - Enhanced drag-and-drop to support categories
- Added
**src/userPromptsTreeProvider.ts**:- Added
'category'type support - Modified
getChildren()to return Personal/Workspace categories at root - Updated
getTreeItem()to handle category items - Enhanced drag-and-drop to support categories
- Added
**src/deeplinkGenerator.ts**:- Added
'skill'type support - Extended
generateDeeplink()to accept skill type - Updated
buildDeeplink()to handle skills (uses folder name as skill name)
- Added
**src/deeplinkImporter.ts**:- Added
'skill'type support - Extended
parseDeeplinkUrl()to recognize skill type - Updated
getDestinationPath()to create skill folder structure - Enhanced import flow to create folders for skills
- Added
**src/shareableGenerator.ts**:- Added
generateShareableForSkillFolder(): Generate skills bundle - Added
collectSkillFoldersFromFolder(): Helper function - Extended all shareable functions to support skill type
- Added
**src/shareableImporter.ts**:- Added
importSkillBundle(): Import skills bundle - Extended
parseShareableUrl()to recognize SKILL type - Updated
getDestinationPath()to handle skills
- Added
**src/codelensProvider.ts**:- Added skill type detection
- CodeLens actions for SKILL.md files
**src/extension.ts**:- Registered
UserSkillsTreeProviderand tree view - Registered all skills-related commands
- Added FileSystemWatcher for skills folders
- Added helper functions for skills commands
- Registered
**package.json**:- Added
cursor-toys.userSkillsview - Added all skills-related commands
- Added context menu items for skills
- Added activation events for skills view
- Updated version to 1.6.0
- Added
[1.5.2] - 2026-01-05
Added
🔧 Inline Variables and Helper Functions for HTTP Requests
- Inline Variable Support: Define variables directly in HTTP request files using
# @vardecorator- Format:
# @var VAR_NAME=valueor# @var VAR_NAME value - Support for global variables (before first
##section) - Support for section-specific variables (override global)
- Cascading behavior: section variables override global variables
- Case-insensitive variable matching in hover provider
- Variables are excluded from environment variable substitution (variables with
@prefix are processed separately)
- Format:
- Helper Functions: Built-in helper functions for dynamic values
{{@prompt("label")}}- Prompt user for input value with custom label{{@randomIn(min, max)}}- Generate random integer between min and max (inclusive){{@datetime}}or{{@datetime("format")}}- Current date/time (ISO, timestamp, date, time, or custom format){{@uuid()}}- Generate random UUID v4{{@randomString(length)}}- Generate random alphanumeric string of specified length
- Enhanced Hover Provider: Improved variable hover information
- Shows
# @varvariable definitions when hovering over variables - Displays variable source (file-level
# @varvs environment file) - Provides helpful tips for defining variables
- Shows when
# @varvalues override environment variables
- Shows
- Syntax Highlighting: Enhanced syntax highlighting for inline variables
# @vardecorator highlighted as control directive- Variable name highlighted separately
- Helper expressions (
{{@helper()}}) highlighted as function calls - Visual distinction between file variables and environment variables
- REST Client Format Enhancement: Improved parsing to skip comments and empty lines
- Better handling of
# @vardecorators in REST Client format - Preserves variable definitions during request parsing
- Better handling of
📋 Cursor Plans Management
- Plans Management: New system to manage Cursor plan files
- New "Cursor Plans" view in Explorer sidebar to browse and manage plans
- Support for both personal plans (
~/.cursor/plans/) and project plans (workspace/.cursor/plans/) - Visual tree view with hierarchical folder structure
- Automatic tree view refresh on file changes
- Drag-and-drop support for organizing plans between folders
- Plans Commands:
cursor-toys.openPlan: Open plan file in editorcursor-toys.generatePlanShareable: Generate shareable for plancursor-toys.deletePlan: Delete plan filecursor-toys.renamePlan: Rename plan filecursor-toys.revealPlan: Reveal plan in file systemcursor-toys.refreshPlans: Refresh plans tree viewcursor-toys.shareAsCursorToysPlan: Share plan as CursorToys formatcursor-toys.shareAsCursorToysPlanFolder: Share plan folder as bundle
- Plans Sharing: Complete sharing infrastructure for plans
- Share individual plans via CursorToys compressed format
- Share plan folders as bundles
- Share plans via GitHub Gist with metadata
- Import plans from shareables and bundles
- Support for both personal and project plans import
- Plans Tree View Features:
- Hierarchical display of plans organized in folders
- Visual distinction between personal and workspace plans
- Context menu with all management options
- File system watchers for real-time updates
- Support for
.plan.mdfile extension
Changed
- Shareable Generator: Extended to support plans type
- Added
generateShareableForPlanFolder(): Generate shareable for plan folder bundle - Added plan type to all shareable functions
- Validation of
.plan.mdfile extension - Support for plan bundles in project bundles
- Added
- Shareable Importer: Enhanced to handle plans imports
- Added
importPlanBundle(): Import plan bundle from shareable - Support for
cursortoys://PLAN:andcursortoys://PLAN_BUNDLE:protocols - Plans import flow with personal/project location choice
- Validation of
.plan.mdfile extension on import
- Added
- GistManager: Updated to support plans type
- Added
'plan'to supported types in metadata - Support for plan type in Gist description building
- Added
plan_bundleto bundle types
- Added
- Utils Enhanced: Added plans path helpers
getPlansPath(): Get path to plans folder (personal or project)getPersonalPlansPaths(): Get personal plans pathsisPlanFile(): Check if file has.plan.mdextensiongetFileTypeFromPath(): Extended to detect plan files
Technical Details
New Files
**src/userPlansTreeProvider.ts**: Complete plans management system- Tree provider for plans with drag-and-drop support
- Hierarchical folder structure display
- Support for both personal and project plans
- Context menu integration
- File system integration for opening and revealing files
- Visual icons for plans files
Enhanced Files
**src/httpRequestExecutor.ts**:- Added
extractFileVariables(): Extract variables defined with# @vardecorator - Added
replaceFileVariables(): Replace{{VAR_NAME}}with file variable values - Added
replacePromptVariables(): Replace{{@prompt()}}expressions with user input - Added helper functions system:
@prompt,@randomIn,@datetime,@uuid,@randomString - Enhanced REST Client format parsing to preserve
# @vardecorators and comments - Improved variable substitution order: environment variables → file variables → prompt/helper expressions
- Support for cascading variables (global → section-specific)
- Added
**src/httpEnvironmentProviders.ts**:- Enhanced hover provider to detect and display
# @varvariable definitions - Added case-insensitive variable matching for file variables
- Improved hover tooltips to show variable source (
# @varvs environment file) - Added helpful tips for defining variables when not found
- Shows when
# @varvalues override environment variables
- Enhanced hover provider to detect and display
**syntaxes/http-request.tmLanguage.json**:- Added syntax highlighting for
# @vardecorator pattern - Added highlighting for helper expressions (
{{@helper()}}) - Proper scoping for variable decorators and helper functions
- Added syntax highlighting for
**src/extension.ts**:- Registered UserPlansTreeProvider for plans view
- Added 8 new plans-related commands
- Integrated plans file watchers for real-time updates
- Added helper functions for plans command arguments
- Support for plans in context menus
**src/shareableGenerator.ts**:- Added
generateShareableForPlanFolder()function - Extended type definitions to include
'plan' - Validation logic for
.plan.mdfile extension - Support for plans in project bundles
- Added
collectPlanFilesFromFolder()helper function
- Added
**src/shareableImporter.ts**:- Added
importPlanBundle()function for plan bundle import - Extended type definitions to include
'plan' - Support for
cursortoys://PLAN:andcursortoys://PLAN_BUNDLE:protocol parsing - Plans destination path handling
- Support for plans in Gist imports
- Added
**src/gistManager.ts**:- Extended
CursorToysMetadatatype to include'plan' - Updated type definitions in helper functions
- Added
plan_bundleto bundle types
- Extended
**src/utils.ts**:- Added
getPlansPath()function - Added
getPersonalPlansPaths()function - Added
isPlanFile()helper function - Extended
getFileTypeFromPath()to detect plan files
- Added
**package.json**:- Added
cursor-toys.userPlansview contribution - Added 8 new plans commands
- Added plans context menu items
- Added view title actions for plans tree
- Added activation events for plans view
- Added
New View
cursor-toys.userPlans: Cursor Plans tree view in Explorer sidebar- Shows both personal and project plans files
- Displays plans organized in folders
- Context menu with all plans management actions
Use Cases
Using Inline Variables:
# @var API_BASE=https://api.example.com
# @var API_KEY=your-key-here
# @var USER_ID=12345
## Get User
GET {{API_BASE}}/users/{{USER_ID}}
Authorization: Bearer {{API_KEY}}
Using Helper Functions:
## Create User with Random Data
POST {{BASE_URL}}/api/users
Content-Type: application/json
{
"id": "{{@uuid()}}",
"name": "User{{@randomString(8)}}",
"age": {{@randomIn(18, 65)}},
"createdAt": "{{@datetime}}",
"email": "{{@prompt("Enter email")}}"
}
Cascading Variables:
# @var TIMEOUT=5000
## Request 1
GET {{BASE_URL}}/api/users
# Uses TIMEOUT=5000 (global)
# @var TIMEOUT=10000
## Request 2
GET {{BASE_URL}}/api/posts
# Uses TIMEOUT=10000 (section-specific, overrides global)
Managing Cursor Plans:
- View plans in "Cursor Plans" view in Explorer sidebar
- Create plans with
.plan.mdextension in.cursor/plans/folder - Organize plans in subfolders with drag-and-drop
- Share individual plans or entire folders with team
Sharing Plans:
- Right-click on plan in tree view
- Choose "Share Plan" (CursorToys format) or "Share via GitHub Gist"
- Share link with team members
- Recipients import with
Cmd+Shift+I
Importing Plans:
- Press
Cmd+Shift+Iin Cursor - Paste plan shareable link or Gist URL
- Choose Personal or Project location
- Plan is imported and ready to use
[1.5.1] - 2026-01-05
Added
🌐 REST Client Format Support for HTTP Requests
- REST Client Format: Support for REST Client format (HTTP Request File format) in addition to curl commands
- Format:
METHOD URLwith headers and body separated by empty line - Use
###separator (three hashes) for multiple requests in same file - Parse requests with METHOD URL pattern (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)
- Support URLs with variables like
{{BASE_URL}}in addition tohttp://andhttps:// - Convert REST Client format to curl commands for execution
- Automatic format detection (tries REST Client format before curl)
- Format:
- CodeLens Support: Full CodeLens support for REST Client format requests
- Show "Send Request" and "Copy as cURL" actions on request lines
- Detect
###separators to identify individual requests - Preserve request titles from
###separator comments - Support environment variables in URLs and headers
- Syntax Highlighting: Enhanced syntax highlighting for REST Client format
- Highlight HTTP methods as keywords
- Highlight URLs and environment variables
- Highlight headers with proper formatting
- Highlight
###separator as punctuation
🔄 Environment File Watchers
- File Watchers: Automatic monitoring of environment file changes
- Monitor
.envfile changes in environments folder - Automatically invalidate cache when environment files are modified
- Support multiple workspace folders with individual watchers
- Fire environment change events to notify listeners
- Clean up watchers on workspace folder removal
- Dispose watchers properly on extension deactivation
- Monitor
- Cache Management: Improved cache invalidation
- Clear cache on file create, change, or delete events
- Per-workspace cache management
- Per-environment cache clearing support
Changed
- HTTP Request Parsing: Enhanced to support multiple formats
- Try REST Client format parsing before curl parsing
- Support both curl commands and REST Client format in same file
- Respect
###separator to stop parsing at request boundaries
- Request Extraction: Refactored to handle both formats
extractCurlFromSection()renamed toextractRequestFromSection()- Support extraction of REST Client format requests
- Preserve original formatting for body content
Technical Details
Enhanced Files
**src/httpRequestExecutor.ts**:- Added
parseRestClientFormat(): Parse METHOD URL format requests - Added
isRestClientFormat(): Detect REST Client format - Added
convertRestClientToCurl(): Convert format for execution - Updated
parseHttpRequest(): Try REST Client format before curl - Refactored
extractCurlFromSection()toextractRequestFromSection() - Support for
###separator detection - Preserve line breaks and empty lines for body separation
- Added
**src/httpCodeLensProvider.ts**:- Added REST Client pattern matching for METHOD URL format
- Detect
###separators to identify individual requests - Support request titles from
###separator comments - Show CodeLens on request lines with proper positioning
**src/environmentManager.ts**:- Added
fileWatchersMap andworkspacePathsSet - Implemented
setupFileWatchers(): Initialize watchers on activation - Added
updateFileWatchers(): Handle workspace folder changes - Added
createFileWatcher(): Create watcher per workspace - Added
clearEnvironmentCache(): Clear cache for specific environment - Added
clearWorkspaceCache(): Clear cache for workspace - Added
dispose(): Clean up watchers on deactivation
- Added
**src/extension.ts**:- Integrated file watcher setup in
activate()function - Added watcher disposal in
deactivate()function
- Integrated file watcher setup in
**syntaxes/http-request.tmLanguage.json**:- Added REST Client format pattern matching
- Highlight HTTP methods, URLs, headers, and environment variables
- Support
###separator highlighting as punctuation - Proper scoping for REST Client format elements
Use Cases
REST Client Format Example:
### Get All Users
GET {{BASE_URL}}/api/users
Authorization: Bearer {{API_KEY}}
### Create User
POST {{BASE_URL}}/api/users
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
Benefits:
- Familiar Format: Use the same format as VS Code REST Client extension
- Better Readability: Cleaner syntax than curl commands for simple requests
- Multiple Requests: Use
###separator to organize multiple requests in one file - Environment Variables: Full support for
{{variable}}syntax - Automatic Updates: Environment files are automatically reloaded when changed
[1.5.0] - 2026-01-04
Added
🪝 Cursor Hooks Management
- Hooks File Management: New system to manage Cursor hooks.json files
- New "Cursor Hooks" view in Explorer sidebar to browse and manage hooks
- Support for both personal hooks (
~/.cursor/hooks.json) and project hooks (workspace/.cursor/hooks.json) - Visual tree view with hooks file and associated scripts
- Automatic tree view refresh on file changes
- Hooks Commands:
cursor-toys.createHooksFile: Create new hooks.json file (personal or project)cursor-toys.openHooks: Open hooks.json file in editorcursor-toys.deleteHooks: Delete hooks.json filecursor-toys.revealHooks: Reveal hooks.json in file systemcursor-toys.shareHooks: Share hooks.json as CursorToys shareablecursor-toys.shareHooksViaGist: Share hooks.json via GitHub Gistcursor-toys.refreshHooks: Refresh hooks tree view
- Hook Scripts Management: Full support for managing hook scripts referenced in hooks.json
cursor-toys.openHookScript: Open hook script file in editorcursor-toys.shareHookScript: Share hook script as shareablecursor-toys.shareHookScriptViaGist: Share hook script via GitHub Gistcursor-toys.revealHookScript: Reveal hook script in file systemcursor-toys.deleteHookScript: Delete hook script file
- Hooks Sharing: Complete sharing infrastructure for hooks
- Share hooks.json via CursorToys compressed format
- Share hooks.json via GitHub Gist with metadata
- Import hooks from shareables with
Cmd+Shift+I - Validation of hooks.json structure before sharing
- Support for both personal and project hooks import
- Hooks Tree View Features:
- Hierarchical display of hooks.json file and referenced scripts
- Automatic detection of hook scripts from hooks.json content
- Visual distinction between hooks file and scripts
- Context menu with all management options
- File system watchers for real-time updates
Changed
- Shareable Generator: Extended to support hooks type
- Added
generateShareableForHooks(): Generate shareable for hooks.json - Added
generateGistShareableForHooks(): Create Gist for hooks.json - Validation of hooks.json structure (version and hooks fields required)
- Special handling for hooks.json file naming
- Added
- Shareable Importer: Enhanced to handle hooks imports
- Added
importHooks(): Import hooks.json from shareable - Support for
cursortoys://HOOKS:protocol - Hooks import flow with personal/project location choice
- Validation of hooks.json structure on import
- Added
- GistManager: Updated to support hooks type
- Added
'hooks'to supported types in metadata - Support for hooks type in Gist description building
- Added
- Utils Enhanced: Added hooks path helpers
getHooksPath(): Get path to hooks.json (personal or project)getPersonalHooksPath(): Get personal hooks.json path (~/.cursor/hooks.json)getFileTypeFromPath(): Extended to detect hooks.json files
- File System Watchers: Added watchers for hooks.json files
- Personal hooks watcher (
~/.cursor/hooks.json) - Project hooks watcher (
workspace/.cursor/hooks.json) - Automatic tree view refresh on file changes
- Personal hooks watcher (
Technical Details
New Files
**src/hooksManager.ts**: Complete hooks management systemcreateHooksFile(): Create hooks.json with default structurehooksFileExists(): Check if hooks.json existsvalidateHooksFile(): Validate hooks.json structuregetHookScripts(): Extract script paths from hooks.json- Default hooks template with examples
**src/userHooksTreeProvider.ts**: Tree provider for hooks- Hierarchical display of hooks and scripts
- Support for both personal and project hooks
- Context menu integration
- File system integration for opening and revealing files
- Visual icons for hooks file vs scripts
Enhanced Files
**src/extension.ts**:- Registered UserHooksTreeProvider for hooks view
- Added 12 new hooks-related commands
- Integrated hooks file watchers for real-time updates
- Added helper functions for hooks command arguments
- Support for hooks in context menus
**src/shareableGenerator.ts**:- Added
generateShareableForHooks()function - Added
generateGistShareableForHooks()function - Extended type definitions to include
'hooks' - Validation logic for hooks.json structure
- Added
**src/shareableImporter.ts**:- Added
importHooks()function for hooks import - Extended type definitions to include
'hooks' - Support for
cursortoys://HOOKS:protocol parsing - Hooks destination path handling
- Added
**src/gistManager.ts**:- Extended
CursorToysMetadatatype to include'hooks' - Updated type definitions in helper functions
- Extended
**src/utils.ts**:- Added
getHooksPath()function - Added
getPersonalHooksPath()function - Extended
getFileTypeFromPath()to detect hooks.json
- Added
**package.json**:- Version bumped from 1.4.2 to 1.5.0
- Added
cursor-toys.userHooksview contribution - Added 12 new hooks commands
- Added hooks context menu items
- Added view title actions for hooks tree
- Added activation events for hooks view
New View
cursor-toys.userHooks: Cursor Hooks tree view in Explorer sidebar- Shows both personal and project hooks.json files
- Displays hook scripts referenced in hooks.json
- Context menu with all hooks management actions
Use Cases
Managing Cursor Hooks:
- Click "Create Hooks File" button in Cursor Hooks view
- Choose between Personal (all projects) or Project (workspace-specific)
- Edit hooks.json to configure your hooks
- Referenced scripts appear automatically in the tree view
Sharing Hooks:
- Right-click on hooks.json in tree view
- Choose "Share Hooks" (CursorToys format) or "Share via GitHub Gist"
- Share link with team members
- Recipients import with
Cmd+Shift+I
Importing Hooks:
- Press
Cmd+Shift+Iin Cursor - Paste hooks shareable link or Gist URL
- Choose Personal or Project location
- hooks.json is imported and ready to use
[1.4.2] - 2026-01-04
Added
- Share via GitHub Gist in Personal Commands: Added "Share via GitHub Gist" option to context menu of Personal Commands view
- Share via GitHub Gist in Personal Prompts: Added "Share via GitHub Gist" option to context menu of Personal Prompts view
Changed
- Simplified StatusBar Menu: Streamlined quick access menu (CursorToys icon in status bar) to show only most relevant commands:
- Added: New Notepad, Minify File, Trim Clipboard
- Kept: Open Marketplace, Check Recommendations, Import from URL
- Removed: Refresh Recommendations, Generate Deeplink, Import from Gist, Send to Chat, HTTP Request (still accessible via Command Palette and context menus)
[1.4.1] - 2026-01-02
Added
🔄 Cascading Environment Decorators for HTTP Requests
- 3-Level Environment Cascading: Environment decorators now cascade through three levels for better flexibility
- Section-specific:
# @env devplaced before a section (##) applies only to that section - Previous section inheritance: Sections without explicit decorator inherit from previous section
- Global environment:
# @env prodat the top of file applies to all sections without explicit decorator
- Section-specific:
- Smart Environment Propagation: Environment settings cascade down until explicitly changed
- Reduces repetition - no need to add
# @envbefore every section - More intuitive behavior - sections inherit parent environment by default
- Explicit decorators always override inherited values
- Reduces repetition - no need to add
- CodeLens Environment Display: CodeLens now shows environment name only when variables are present
- Format:
Send Request: Section Title [env]when section has variables - Format:
Send Request: Section Titlewhen section has no variables - Cleaner UI - environment indicator only shown when relevant
- Format:
- Standalone cURL Support: Standalone cURL commands (not in sections) also support cascading
- Inherits from global environment decorator if present
- Environment shown in CodeLens only if variables detected
- Hover Provider Cascading: Variable hover now uses same 3-level cascading logic
- Shows correct environment for each variable based on cascade
- Recursive environment detection for inheritance chain
Enhanced
🎨 Syntax Highlighting for HTTP Request Files
- Environment Decorator Syntax: New syntax highlighting for
# @envdecorators# @envkeyword highlighted as control directive (keyword.control.directive.env)- Environment name highlighted as type entity (entity.name.type.env-name)
- Makes decorators visually distinct from regular comments
- Variable Syntax Highlighting: Enhanced highlighting for environment variables
{{variableName}}pattern now highlighted as environment variable- Variable name inside braces highlighted separately (variable.parameter.env-variable)
- Improves visibility of variables in HTTP request files
- Comment Support: Added block comment support (
/* */) for HTTP request files- Block comments properly highlighted as comment.block.http-request
- Consistent with other language syntax highlighting
Changed
- Version: Bumped from 1.4.0 to 1.4.1
- Environment Detection Logic: Refactored environment detection into modular functions
findSectionEnvironment(): Finds section-specific decoratorfindPreviousSectionEnvironment(): Finds inherited environment from previous sectionfindGlobalEnvironment(): Finds global environment at file topgetEnvironmentForSection(): Orchestrates 3-level cascade
- HTTP CodeLens Provider: Updated to support cascading and conditional environment display
- Detects global environment at file start
- Initializes section environment with global value
- Maintains environment state across sections (no reset)
- Shows environment in title only when variables present
- HTTP Request Executor: Updated to use new cascading logic
- Applies same 3-level environment detection
- Properly resolves variables using cascaded environment
- Validates variables against correct environment
- HTTP Environment Providers: Enhanced hover and completion providers
- Hover provider uses recursive cascading logic
- Shows correct environment name in hover tooltip
- Suggests available environments in completion
Technical Details
Enhanced Files
**src/httpCodeLensProvider.ts**:- Added global environment detection at file start
- Changed
currentEnvinitialization to useglobalEnvinstead ofnull - Removed environment reset when starting new sections (maintains cascade)
- Added comment explaining inheritance behavior: "DO NOT reset currentEnv - maintain inheritance cascade"
- Environment inheritance now explicit:
envName: currentEnv // Inherits from previous section or global
**src/httpEnvironmentProviders.ts**:- Refactored
getEnvironmentForLine()to implement 3-level cascade - Added
findSectionEnvironment(): Section-specific decorator detection - Added
findPreviousSectionEnvironment(): Recursive inheritance from previous section - Added
findGlobalEnvironment(): Global decorator detection at file top - Updated decorator search logic to stop at section boundaries or non-comment lines
- Improved comment handling in environment detection
- Refactored
**src/httpRequestExecutor.ts**:- Refactored
getEnvironmentForSection()to use modular helper functions - Added
findSectionEnvironment(): Section-specific decorator detection - Added
findPreviousSectionEnvironment(): Recursive inheritance detection - Added
findGlobalEnvironment(): Global decorator detection - Updated environment detection to support 3-level cascading
- Consistent behavior with other HTTP environment providers
- Refactored
**syntaxes/http-request.tmLanguage.json**:- Added block comment syntax pattern (
/* */) - Added environment decorator pattern (
# @env name) - Added variable pattern highlighting (
{{variableName}}) - Captures for keyword and entity name in decorators
- Captures for variable parameters
- Added block comment syntax pattern (
Use Cases
Cascading Environments Example:
# @env prod
## Get All Users
curl --request GET \
--url {{base_url}}/api/users
# Uses 'prod' environment (inherited from global)
# @env dev
## Create User
curl --request POST \
--url {{base_url}}/api/users \
--header 'Content-Type: application/json' \
--data '{"name": "John"}'
# Uses 'dev' environment (explicit decorator)
## Update User
curl --request PUT \
--url {{base_url}}/api/users/1 \
--header 'Content-Type: application/json' \
--data '{"name": "Jane"}'
# Uses 'dev' environment (inherited from previous section)
# @env staging
## Delete User
curl --request DELETE \
--url {{base_url}}/api/users/1
# Uses 'staging' environment (explicit decorator)
Benefits:
- Less Repetition: Set global environment once at the top, override only when needed
- Better Organization: Group related sections with same environment
- Clearer Intent: Explicit decorators show when environment changes
- Flexible Workflow: Mix environments in single file without repetition
[1.4.0] - 2026-01-01
Fixed
- Fixed GitHub token placeholder in README to avoid false positive in package security scan
- Changed placeholder format to use clear text instead of x's pattern
- Prevents vsce package from detecting placeholder as real token during packaging
Added
🎯 Recommendations System
- Project Context Detection: Automatically detects project languages, frameworks, and context
- Detects languages: JavaScript, TypeScript, Python, Java, Go, Rust, Ruby, PHP, Elixir
- Detects frameworks: React, Next.js, Vue, Angular, Svelte, Express, NestJS, Jest, Playwright
- Detects special contexts: Git, GitHub workflows, Docker, Kubernetes, Terraform, monorepos
- Analyzes package.json, requirements.txt, Cargo.toml, and other project files
- Smart Recommendations: Suggests relevant commands, prompts, and rules based on project context
- Automatic popup when opening workspace (configurable interval)
- Filters recommendations by detected languages and frameworks
- Comes with official curated recommendations out of the box
- Supports custom recommendations index (GitHub Gist or raw URL)
- Recommendations Browser: Marketplace-style interface for browsing and installing recommendations
- Grid layout with cards showing name, description, type, and tags
- Search by name, description, or tags
- Filter by type (commands, prompts, rules)
- Multi-select installation
- Preview recommendations before installing
- Dark mode support with VS Code theme integration
- YAML Frontmatter Support: Parse metadata from markdown files
- Extract description, tags, category, author, version
- Improves discoverability and organization
- Compatible with existing files (optional metadata)
- Recommendations Commands:
cursor-toys.checkRecommendations: Check recommendations for current projectcursor-toys.browseRecommendations: Open recommendations marketplace browsercursor-toys.refreshRecommendations: Clear recommendations cache and refresh
- Recommendations Configuration:
cursorToys.recommendationsEnabled: Enable/disable recommendations system (default: true)cursorToys.recommendationsCheckOnStartup: Check on workspace open (default: true)cursorToys.recommendationsSuggestInterval: Days between suggestions (default: 7)cursorToys.recommendationsIndexUrl: URL to remote recommendations indexcursorToys.recommendationsIndexGistId: Alternative Gist ID for recommendations index (default: official CursorToys recommendations)
- Caching System: Performance-optimized with memory and disk caching
- Memory cache: 1 hour TTL
- Disk cache: 24 hours TTL
- Automatic cache refresh when expired
- Manual cache clear command
Enhanced
- YAML Parsing: New utility functions in
utils.tsfor parsing YAML frontmatter - Context Detection: Smart project analysis for better recommendations matching
- Import System: Recommendations use existing import infrastructure for seamless installation
[1.3.0] - 2026-01-01
Added
📓 Project Notepads
- Notepads Management: New workspace-specific notepad system for project documentation
- New "Project Notepads" view in Explorer sidebar to browse and manage notepads
- Notepads stored in
.{baseFolder}/notepads/folder (e.g.,.cursor/notepads/) - Workspace-specific notepads (not personal - tied to current project)
- Hierarchical folder structure with drag-and-drop support
- Automatic tree view refresh on file changes
- Notepad Commands:
cursor-toys.createNotepad: Create new notepad in current workspacecursor-toys.openNotepad: Open notepad filecursor-toys.generateNotepadShareable: Generate shareable for notepadcursor-toys.deleteNotepad: Delete notepadcursor-toys.renameNotepad: Rename notepadcursor-toys.revealNotepad: Reveal notepad in file systemcursor-toys.refreshNotepads: Refresh notepads tree view
- Notepad Sharing: Full sharing support for notepads
- Share single notepads via CursorToys format
- Share entire notepads folder as bundle
- Import notepads from shareables and bundles
- Context menu integration in
.{baseFolder}/notepads/folder
- Notepad Features:
- Create notepads with markdown format
- Organize notepads in subfolders
- Drag and drop files between folders
- Filter by allowed extensions
- Alphabetical sorting
- File system watchers for real-time updates
🌐 GitHub Gist Integration
- Gist Sharing: Share files and bundles via GitHub Gist
- New command
cursor-toys.shareViaGist: Share single file as GitHub Gist - New command
cursor-toys.shareFolderViaGist: Share entire folder as Gist bundle - Support for all file types: commands, rules, prompts, notepads, HTTP, environments
- Automatic metadata generation with CursorToys format
- Gist description with file type and date
- New command
- Gist Import: Import files from GitHub Gist
- Enhanced
cursor-toys.importcommand to accept Gist URLs or IDs - Automatic format detection (Gist URL, ID, deeplink, or CursorToys)
- Support for single file and bundle imports from Gist
- Validates Gist format and extracts metadata
- Enhanced
- GitHub Token Management:
cursor-toys.configureGitHubToken: Configure GitHub Personal Access Tokencursor-toys.removeGitHubToken: Remove stored GitHub token- Secure token storage using VS Code Secrets API
- Token validation before Gist creation
- Gist Features:
- Public or private Gist creation
- Configurable default visibility via
cursorToys.gistDefaultVisibilitysetting - URL copied to clipboard automatically
- Support for Gist URLs, raw URLs, and Gist IDs
- CursorToys metadata embedded in Gist for format validation
- Size validation (100MB GitHub limit)
- Bundle support with multiple files
- Gist Manager: Complete Gist management system
- Singleton pattern for global access
- Token management with validation
- Gist creation and fetching
- Metadata building and parsing
- URL parsing and validation
- HTTPS request handling with error management
Changed
- Import Command Enhanced: Now supports GitHub Gist URLs and IDs
- Accepts
gist.github.comURLs,gist.githubusercontent.comraw URLs, and Gist IDs - Automatic format detection (Gist, deeplink, or CursorToys)
- Updated prompt text: "supports: files, bundles, deeplinks, Gists"
- Validation for all supported formats
- Accepts
- Shareable Generator: Extended to support notepads and Gist creation
- Added
generateShareableForNotepadFolder(): Bundle all notepad files - Added
generateGistShareable(): Create single-file Gist - Added
generateGistShareableForBundle(): Create multi-file Gist bundle - Support for notepad type in all shareable functions
- Added
- Shareable Importer: Enhanced to handle notepads and Gists
- Added
importNotepadBundle(): Import bundle of notepad files - Added
importFromGist(): Import files from GitHub Gist - Support for notepad type in import flows
- Gist format validation and metadata extraction
- Bundle type detection for Gist imports
- Added
- Utils Enhanced: Added notepad path helpers
getNotepadsPath(): Get path to notepads folder (workspace-specific)- Updated
getFileTypeFromPath()to detect notepad files - Support for
.{baseFolder}/notepads/folder structure
- Context Menu: Extended to support notepads and Gist sharing
- Added notepad-specific context menu items
- Added Gist sharing options for all file types
- Gist sharing available for files and folders
- Automatic bundle type detection for folders
- Tree Provider: New UserNotepadsTreeProvider for project notepads
- Hierarchical folder display
- Drag-and-drop between folders
- Recursive directory reading
- File grouping by folder structure
- Only shows notepads from current workspace
Technical Details
New Files
**src/gistManager.ts**: Complete GitHub Gist integration- GistManager class with singleton pattern
- Token management with VS Code Secrets API
- Gist creation with validation
- Gist fetching and parsing
- Metadata building and validation
- URL parsing (supports multiple formats)
- HTTPS request handling
- Error management with user-friendly messages
**src/userNotepadsTreeProvider.ts**: Tree provider for project notepads- Hierarchical folder structure support
- Drag-and-drop functionality
- Recursive directory reading
- File grouping by folder
- Only workspace notepads (not personal)
- Context menu integration
Enhanced Files
**src/extension.ts**:- Registered 13 new commands (notepads and Gist)
- Added notepad-specific commands with URI/item helper functions
- Enhanced import command to support Gist URLs and IDs
- Integrated GistManager for Gist operations
- Added UserNotepadsTreeProvider registration
- Added file system watchers for notepads folder
- Extended shareable commands to support notepads
**src/shareableGenerator.ts**:- Added
generateShareableForNotepadFolder(): Bundle notepad files - Added
generateGistShareable(): Create GitHub Gist for single file - Added
generateGistShareableForBundle(): Create Gist bundle - Extended all bundle functions to include notepads
- Support for notepad type throughout
- Added
**src/shareableImporter.ts**:- Added
importNotepadBundle(): Import notepad bundles - Added
importFromGist(): Import from GitHub Gist - Added Gist format validation and detection
- Support for single file and bundle Gist imports
- Extended project bundle to include notepads
- Added
**src/utils.ts**:- Added
getNotepadsPath(): Get notepads folder path - Extended
getFileTypeFromPath()to detect notepads - Support for
.{baseFolder}/notepads/in path detection
- Added
**package.json**:- Version bumped from 1.2.0 to 1.3.0
- Added 13 new commands (notepads and Gist)
- Added
cursor-toys.userNotepadsview - Added
cursorToys.gistDefaultVisibilityconfiguration - Extended context menus for notepads and Gist
- Updated activation events for new views and commands
New Commands
cursor-toys.createNotepad: Create new notepadcursor-toys.openNotepad: Open notepad filecursor-toys.generateNotepadShareable: Share notepadcursor-toys.deleteNotepad: Delete notepadcursor-toys.renameNotepad: Rename notepadcursor-toys.revealNotepad: Reveal notepad in foldercursor-toys.refreshNotepads: Refresh notepads treecursor-toys.shareAsCursorToysNotepad: Share as CursorToys (Notepad)cursor-toys.shareAsCursorToysNotepadFolder: Share folder as bundlecursor-toys.shareViaGist: Share file via GitHub Gistcursor-toys.shareFolderViaGist: Share folder via GitHub Gistcursor-toys.importFromGist: Import from GitHub Gist (integrated into import command)cursor-toys.configureGitHubToken: Configure GitHub tokencursor-toys.removeGitHubToken: Remove GitHub token
Configuration Options Added
cursorToys.gistDefaultVisibility: Default visibility when creating GitHub Gists- Options:
"public","private","ask"(default:"ask") - Allows presetting Gist visibility or prompting each time
- Options:
New View
cursor-toys.userNotepads: Project Notepads tree view in Explorer sidebar- Shows notepads from current workspace only
- Hierarchical folder structure
- Drag-and-drop support
- Context menu with all notepad actions
Use Cases
Project Documentation with Notepads:
- Create notepads in
.cursor/notepads/for project-specific documentation - Organize in subfolders (e.g.,
architecture/,decisions/,guides/) - Share individual notepads or entire folders with team
- Keep documentation close to code, version-controlled
Share via GitHub Gist:
- Right-click on any file → "CursorToys: Share via GitHub Gist"
- Choose public or private visibility
- Gist URL copied to clipboard
- Share with anyone (even those without Cursor)
- Recipients can import via
Cmd+Shift+Ior view in browser
Import from Gist:
- Find a CursorToys Gist on GitHub
- Press
Cmd+Shift+Iin Cursor - Paste Gist URL or ID
- Files imported to appropriate folders automatically
[1.2.0] - 2025-12-31
Added
🗂️ HTTP and Environment File Sharing
- HTTP Request Sharing: Share HTTP requests as CursorToys shareables
- New command
cursor-toys.shareAsCursorToysHttp: Share single HTTP request file - New command
cursor-toys.shareAsCursorToysHttpWithPath: Share HTTP request with folder structure - New command
cursor-toys.shareAsCursorToysHttpFolder: Share entire HTTP folder as bundle - Support for
.reqand.requestfile types - Automatic detection of HTTP files in
.cursor/http/folder
- New command
- Environment File Sharing: Share environment variables as CursorToys shareables
- New command
cursor-toys.shareAsCursorToysEnv: Share single environment file - New command
cursor-toys.shareAsCursorToysEnvWithPath: Share environment with folder structure - New command
cursor-toys.shareAsCursorToysEnvFolder: Share entire environments folder as bundle - Support for
.env*files in environments folder - Automatic detection of environment files
- New command
- Combined HTTP + Environment Bundles: Share HTTP requests with their environments
- New command
cursor-toys.shareAsCursorToysHttpFolderWithEnv: Bundle HTTP folder with environments - Complete API testing setup sharing in one shareable
- New command
- Folder Bundles: Share entire folders as single shareable
- New command
cursor-toys.shareAsCursorToysCommandFolder: Bundle all commands from folder - New command
cursor-toys.shareAsCursorToysRuleFolder: Bundle all rules from folder - New command
cursor-toys.shareAsCursorToysPromptFolder: Bundle all prompts from folder - New command
cursor-toys.shareAsCursorToysProject: Bundle entire.cursorproject folder - Multiple files bundled into single shareable for easy distribution
- New command
- Environments Folder Configuration: Customize environment folder name
- New setting
cursorToys.environmentsFolder: Choose between.environments,environments,__environments__, or_env - Default:
.environments(hidden folder, recommended) - Allows organization flexibility for HTTP environments
- New setting
- ENV CodeLens Provider: New CodeLens provider for environment files
- Registered for
.env*files in environments folder - Context-aware environment file detection
- Registered for
Changed
- CodeLens Filtering: DeeplinkCodeLensProvider now only shows for command, rule, and prompt files
- HTTP and ENV files excluded from deeplink CodeLens (have their own sharing methods)
- Prevents CodeLens clutter on HTTP request files
- Deeplink Generation: Filter out HTTP and ENV types from deeplink generation
- Only commands, rules, and prompts can be shared as traditional deeplinks
- HTTP and ENV use shareable format exclusively
- Import Command Enhanced: Updated prompt text to reflect support for files, bundles, and deeplinks
- Changed from "Paste the Cursor deeplink or CursorToys shareable" to "Paste your CursorToys link (supports: files, bundles, deeplinks)"
- More descriptive placeholder text
- Context Menu Organization: Enhanced context menu with folder-level actions
- Context menu now shows on both files and folders in
.cursorstructure - Folder-specific commands only appear when right-clicking folders
- File-specific commands only appear when right-clicking files
- Improved regex patterns for better folder detection
- Context menu now shows on both files and folders in
- Shareable Generator: Extended with multiple bundle generation functions
generateShareableWithPath(): Generate shareable preserving folder structuregenerateShareableForHttpFolder(): Generate bundle for HTTP foldergenerateShareableForEnvFolder(): Generate bundle for environments foldergenerateShareableForHttpFolderWithEnv(): Generate combined HTTP + ENV bundlegenerateShareableForCommandFolder(): Generate commands bundlegenerateShareableForRuleFolder(): Generate rules bundlegenerateShareableForPromptFolder(): Generate prompts bundlegenerateShareableForProject(): Generate complete project bundle
- Shareable Importer: Enhanced to handle bundle imports with folder structure
- Support for bundles with multiple files
- Automatic folder structure recreation
- File path preservation in bundles
- HTTP CodeLens: Removed share CodeLens from HTTP files (use context menu instead)
- Comment added: "Note: Share CodeLens removed - use context menu instead"
- Cleaner UI for HTTP request files
- Utils Enhanced: Extended file type detection
- Added HTTP and ENV file type detection
getFileTypeFromPath()now returns'http' | 'env'in addition to existing typesgetEnvironmentsFolderName(): Get configured environments folder namegetEnvironmentsPath(): Updated to use configurable folder nameisHttpOrEnvFile(): New helper to check if file is HTTP or ENV type- Improved environment file detection with multiple folder name support
Technical Details
Enhanced Files
**src/extension.ts**:- Added
generateShareableWithPathValidation()helper function for HTTP/ENV with path - Registered 11 new shareable commands for HTTP, ENV, and folder bundles
- Added ENV CodeLens provider registration
- Extended
generateShareableWithValidation()to accept'http' | 'env'types - Added conditional extension validation based on file type
- Enhanced import command prompt text
- Added
**src/shareableGenerator.ts**:- Added 8 new bundle generation functions
- Support for folder structure preservation
- Support for multiple file bundling
- Added HTTP and ENV specific file filtering
- Bundle compression and encoding for efficient sharing
**src/shareableImporter.ts**:- Enhanced to handle bundle imports
- Support for multiple files in single shareable
- Automatic folder structure recreation
- File path preservation and validation
**src/codelensProvider.ts**:- Added filtering to exclude HTTP and ENV files
- Only shows CodeLens for command, rule, and prompt files
- Added default case to prevent errors
**src/httpCodeLensProvider.ts**:- Removed share CodeLens from HTTP files
- Added comment explaining removal
**src/deeplinkGenerator.ts**:- Added filtering to exclude HTTP and ENV types
- Only generates deeplinks for command, rule, and prompt files
- Type validation before deeplink generation
**src/utils.ts**:- Extended
getFileTypeFromPath()return type to include'http' | 'env' - Added HTTP file detection with extension validation (
.req,.request) - Added ENV file detection with folder name validation
- Added
getEnvironmentsFolderName()function - Updated
getEnvironmentsPath()to use configurable folder name - Added
isHttpOrEnvFile()helper function
- Extended
**package.json**:- Version bumped from 1.1.0 to 1.2.0
- Added 11 new commands for HTTP, ENV, and folder bundles
- Added
environmentsFolderconfiguration option - Updated context menu conditions to support folder-level actions
- Enhanced regex patterns for better file/folder detection
- Organized commands by file type in context menu
- Updated import command title for clarity
New Files
**src/envCodeLensProvider.ts**: CodeLens provider for environment files- Validates environment file location
- Checks for
.env*file pattern - Currently returns empty array (share via context menu)
New Commands
cursor-toys.shareAsCursorToysHttp: Share HTTP request filecursor-toys.shareAsCursorToysEnv: Share environment filecursor-toys.shareAsCursorToysHttpWithPath: Share HTTP with folder structurecursor-toys.shareAsCursorToysEnvWithPath: Share ENV with folder structurecursor-toys.shareAsCursorToysHttpFolder: Share HTTP folder as bundlecursor-toys.shareAsCursorToysEnvFolder: Share environments folder as bundlecursor-toys.shareAsCursorToysHttpFolderWithEnv: Share HTTP + ENV bundlecursor-toys.shareAsCursorToysCommandFolder: Share commands folder as bundlecursor-toys.shareAsCursorToysRuleFolder: Share rules folder as bundlecursor-toys.shareAsCursorToysPromptFolder: Share prompts folder as bundlecursor-toys.shareAsCursorToysProject: Share entire project as bundle
Configuration Options Added
cursorToys.environmentsFolder: Name of folder to store HTTP environment files- Options:
.environments(default),environments,__environments__,_env - Allows customization of environment folder organization
- Options:
Use Cases
Share HTTP Requests:
- Right-click on
.reqor.requestfile in.cursor/http/folder - Select "CursorToys: Share as CursorToys (HTTP Request)"
- Share the copied link with team members
Share Complete API Setup:
- Right-click on
.cursor/http/folder - Select "CursorToys: Share Folder as CursorToys (HTTP + Environments)"
- Team receives both requests and environment configurations
Share Project Configuration:
- Right-click on
.cursorfolder - Select "CursorToys: Share Project as CursorToys (Complete Bundle)"
- Entire project setup (commands, rules, prompts, HTTP) shared in one link
[1.1.0] - 2025-12-31
Added
🔗 CursorToys Shareable Format
- New Compressed Sharing Format: Alternative to traditional deeplinks with no URL length limits
cursortoys://TYPE:filename:compressedDataformat- Uses gzip compression + base64 encoding
- 60-80% size reduction compared to URL-encoded deeplinks
- Perfect for large commands, rules, and prompts
- No 8,000 character URL limit
- Dual CodeLens: Files now show both sharing options
- "Share as Deeplink" — Traditional cursor:// format
- "Share as CursorToys" — New compressed format
- New Commands:
cursor-toys.shareAsCursorToysCommand: Generate CursorToys shareable for commandscursor-toys.shareAsCursorToysRule: Generate CursorToys shareable for rulescursor-toys.shareAsCursorToysPrompt: Generate CursorToys shareable for prompts
- Automatic Format Detection: Import command now automatically detects and handles both formats
- Supports
cursor://andhttps://cursor.com/link/deeplinks - Supports
cursortoys://compressed shareables - Single import command works for all formats
- Supports
- New Shareable Generator:
src/shareableGenerator.ts- Compresses file content using gzip
- Encodes to base64 for safe transmission
- Validates file size (50MB limit for safety)
- Builds shareable URL in CursorToys format
- New Shareable Importer:
src/shareableImporter.ts- Parses CursorToys protocol URLs
- Decompresses gzip content
- Decodes base64 data
- Creates files with proper naming and location
- Supports personal and project locations
Changed
- Import Command Enhanced:
cursor-toys.importnow accepts both deeplink and CursorToys formats- Updated prompt text to reflect dual format support
- Updated validation to accept both URL schemes
- Automatic routing to appropriate importer based on URL format
- CodeLens Provider Updated: Shows two action buttons instead of one
- First button: "Share as Deeplink" (traditional format)
- Second button: "Share as CursorToys" (compressed format)
- Both buttons appear on line 0 of command/rule/prompt files
- Command Titles Updated: More descriptive command names
- "Generate Command Share Link" → "Share as Deeplink (Command)"
- "Generate Rule Share Link" → "Share as Deeplink (Rule)"
- "Generate Prompt Share Link" → "Share as Deeplink (Prompt)"
- Added new "Share as CursorToys" variants for each type
- Context Menu Enhanced: Added CursorToys sharing options
- Right-click menu now includes both deeplink and CursorToys options
- Organized by file type (command, rule, prompt)
- Removed Generic Command: Removed
cursor-toys.generatecommand- Users now choose specific type directly from context menu or CodeLens
- Cleaner UX with explicit action names
Technical Details
New Files
**src/shareableGenerator.ts**: Complete shareable generation systemgenerateShareable(): Main function to create CursorToys shareablescompressAndEncode(): Gzip compression + base64 encodingbuildShareableUrl(): URL construction for CursorToys protocol- File validation and size checks
- Content compression with best compression level
**src/shareableImporter.ts**: Complete shareable import systemimportShareable(): Main function to import CursorToys shareablesparseShareableUrl(): URL parsing and validationdecodeAndDecompress(): Base64 decode + gzip decompressiongetDestinationPath(): Determine file location (personal vs project)- Type detection (COMMAND, RULE, PROMPT)
- File overwrite confirmation
Enhanced Files
**src/extension.ts**:- Added
generateShareableWithValidation()helper function - Registered three new shareable commands
- Enhanced import command to handle both formats
- Added shareable disposables to subscriptions
- Removed generic generate command
- Added
**src/codelensProvider.ts**:- Refactored to show two CodeLens actions per file
- Added deeplink and shareable command pairs
- Updated labels for clarity
- Both CodeLens appear on line 0
**package.json**:- Added three new shareable commands to contributions
- Added activation events for shareable commands
- Added shareable commands to context menus
- Removed generic generate command
- Updated command titles for consistency
Dependencies
- Uses Node.js built-in
zlibmodule for compression/decompression - No new external dependencies required
Format Comparison
| Aspect | Deeplink | CursorToys Shareable |
| --------------- | ----------------------------------------- | -------------------------------- |
| Protocol | cursor:// or https://cursor.com/link/ | cursortoys:// |
| Encoding | URL encoding | Gzip + Base64 |
| Size Limit | 8,000 characters | No limit (practical limit: 50MB) |
| Compression | None | 60-80% reduction |
| Best For | Small files, quick sharing | Large files, team distribution |
Use Cases
Use Deeplinks when:
- File is small (< 2KB)
- Sharing in platforms with URL support
- Need clickable links in documentation
Use CursorToys when:
- File is large (> 5KB)
- Deeplink exceeds URL length limit
- Team sharing via private channels
- Need maximum compression
[Unreleased]
Added
- New configuration
cursorToys.baseFolderto customize base folder name for all resources- Applies to commands, rules, prompts, and HTTP files
- Allows using
.vscode,.ai, or any custom folder name instead of.cursor - Default remains
cursorfor backward compatibility - Enables better VS Code integration and organizational flexibility
- VS Code compatibility documentation in README
- Detailed feature compatibility matrix
- Workarounds for Cursor-specific features
- Setup guide for VS Code users
- Clarification about rules and prompts being Cursor-specific
- Support for custom folder names in menu contexts and CodeLens
- Updated regex patterns to accept multiple folder names
- Supports
.cursor,.claude,.vscode,.aiand other custom names
- Backward compatibility for prompts folder
- Shows both configured folder and
.cursorfolder if different - Ensures users can access legacy prompts after changing base folder
- Shows both configured folder and
Changed
baseFolderconfiguration now affects ALL resources consistently- Commands, rules, prompts, and HTTP all respect the same base folder
- More intuitive and predictable behavior
- Rules and prompts remain Cursor-specific features (may not work in VS Code)
- Menu contexts now support multiple folder names dynamically
- All path handling updated to use helper functions from
utils.tsgetBaseFolderName(): Get configured base foldergetRulesPath(): Get rules folder path (uses base folder)getPromptsPath(): Get prompts folder path (uses base folder)getHttpPath(): Get HTTP folder pathgetEnvironmentsPath(): Get environments folder path
- Updated development guidelines in AGENTS.md
- Added documentation about folder customization
- Emphasized using helper functions instead of hardcoded paths
- Clarified that rules/prompts are Cursor-specific but use base folder
Documentation
- Added comprehensive VS Code compatibility section to README
- Updated AGENTS.md with base folder configuration guidelines
- Clarified which features work in VS Code vs Cursor
- Added note that rules and prompts use base folder but are Cursor-specific features
[1.0.0] - 2025-12-31
🎉 Major Release: Complete Productivity Toolkit
⚠️ BREAKING CHANGES: This is a major version update with breaking changes. Users will need to:
- Uninstall
cursor-deeplinkand installcursor-toys - Update configuration keys from
cursorDeeplink.* tocursorToys.* - Update any custom keybindings from
cursor-deeplink.*tocursor-toys.*
Added
🗜️ File Minification System
- Minify Files: New command to minify files directly in the editor
- Support for multiple file types: JSON, HTML, XML, CSS, SVG, JavaScript, TypeScript
- One-click minification via context menu or editor title
- Automatic detection of file type by extension
- Creates minified versions with configurable suffix (default:
.min) - Shows detailed statistics: original size, minified size, and savings percentage
- Clipboard Minification: New commands to minify clipboard content
cursor-toys.trimClipboard: Auto-detect and minify clipboard contentcursor-toys.trimClipboardWithPrompt: Select content type manually before minifying- Smart content type detection (JSON, HTML, XML, CSS, SVG, JavaScript, TypeScript, Text)
- Shows savings statistics after minification
- Preserves clipboard history
- Minification Features:
- JSON: Remove whitespace, compact structure
- HTML/XML: Remove comments, excess whitespace, and line breaks
- CSS: Remove comments, whitespace, and unnecessary semicolons
- SVG: Remove metadata, comments, and optimize structure
- JavaScript/TypeScript: Remove comments and excess whitespace (basic minification)
- Text: Normalize whitespace and remove excessive line breaks
- Configuration Options:
cursorToys.minify.preserveComments: Preserve comments when minifying (future feature)cursorToys.minify.outputSuffix: Customize minified file suffix (default:.min)
🌍 HTTP Environment Variables
- Environment Management: Complete system for managing HTTP request environments
- Store environment variables in
.cursor/http/environments/folder - Support for multiple environments:
.env,.env.dev,.env.staging,.env.prod, etc. - Variable substitution using
{{variableName}}syntax in request files - Case-insensitive variable matching
- Store environment variables in
- Environment Commands:
cursor-toys.selectEnvironment: Switch between available environmentscursor-toys.openEnvironments: Open environments folder in file explorercursor-toys.createEnvironment: Create new environment with templatecursor-toys.initializeEnvironments: Create default environment structure
- Environment Features:
- Automatic environment detection from file structure
- Real-time variable substitution in HTTP requests
- Validation of unresolved variables before request execution
- Environment caching for better performance
- Support for default environment (
.envfile)
- Environment File Format:
# Comment BASE_URL=http://localhost:3000 API_KEY=your-api-key-here TIMEOUT=10000 - Usage in Requests:
## Get Users GET {{BASE_URL}}/api/users Authorization: Bearer {{API_KEY}} - Automatic Initialization:
- Creates
.cursor/http/environments/folder on first use - Generates
.env(default environment) - Creates
.env.examplewith documentation and examples - Adds
.gitignoreto protect sensitive data
- Creates
- Environment Status Bar: Shows current active environment in status bar
- Configuration:
cursorToys.httpDefaultEnvironment: Set default environment name (default:dev)
📝 Clipboard Processing System
- Smart Content Detection: Automatically detects content type from clipboard
- Recognizes JSON, HTML, XML, CSS, SVG, and other formats
- Suggests detected type with option to override
- Content Normalization: Intelligent whitespace and formatting cleanup
- Preserves code structure while removing excess whitespace
- Removes duplicate line breaks (maintains maximum of one blank line)
- Trims leading/trailing whitespace from lines
- Minification Statistics: Detailed feedback on processing results
- Shows original and final sizes in KB
- Displays savings in bytes and percentage
- Warns if no savings detected with option to continue
- Clipboard Utilities:
readClipboard(): Read clipboard content safelywriteClipboard(): Write to clipboard with error handlinggetClipboardStats(): Get clipboard statistics without modifyingcopyToClipboard(): Copy with confirmation message
Changed
- Package Name:
cursor-deeplink→cursor-toys - Display Name: "Cursor Commands Toys" → "CursorToys"
- Command Namespace:
cursor-deeplink.* →cursor-toys.* - Configuration Namespace:
cursorDeeplink.* →cursorToys.* - View IDs:
cursor-deeplink.* →cursor-toys.* - URI Handlers:
godrix.cursor-deeplink→godrix.cursor-toys - Repository: GitHub repository updated to
cursor-toys - HTTP Request Execution: Enhanced with environment variable support
- Requests now support
{{variableName}}variable substitution - Environment variables loaded from
.cursor/http/environments/folder - Active environment can be switched via command palette
- Unresolved variables are validated before execution
- Requests now support
- Editor Context Menu: Added minify command for supported file types
- Editor Title Menu: Added minify icon for quick access
Migration Guide
If you're upgrading from cursor-deeplink:
- Uninstall old extension: Remove
cursor-deeplinkfrom VS Code - Install new extension: Install
cursor-toys - Update settings (in
.vscode/settings.jsonor user settings):
// Old
"cursorDeeplink.linkType": "web"
// New
"cursorToys.linkType": "web"
- Update keybindings (if customized):
// Old
"cursor-deeplink.import"
// New
"cursor-toys.import"
Technical Details
New Files
**src/minifier.ts**: Complete minification system- File type detection by extension and content
- Specialized minification functions for each supported type
- Size calculation and statistics generation
- Result formatting utilities
**src/clipboardProcessor.ts**: Clipboard processing utilities- Read/write clipboard with error handling
- Content type detection from clipboard
- Whitespace normalization
- Minification with user prompts
- Statistics generation
**src/environmentManager.ts**: Environment variable management- Singleton pattern for global access
- Environment file parsing (.env format)
- Variable substitution with
{{variable}}syntax - Cache management for performance
- Validation of unresolved variables
- Environment creation and initialization
**src/httpEnvironmentProviders.ts**: Environment UI providers- Status bar item showing active environment
- Quick pick menu for environment selection
- Environment folder management
Enhanced Files
**src/extension.ts**:- Registered minification commands
- Registered clipboard processing commands
- Registered environment management commands
- Added minify context menu items
- Integrated environment manager with HTTP requests
- Added status bar integration for environment display
**src/httpRequestExecutor.ts**:- Enhanced with environment variable substitution
- Added validation for unresolved variables
- Improved error messages for missing variables
**src/utils.ts**:- Added file type detection utilities
- Added minification helper functions
**package.json**:- Added minification commands
- Added clipboard processing commands
- Added environment management commands
- Added minify configuration options
- Added context menu contributions
- Added activation events for new commands
New Commands
cursor-toys.minifyFile: Minify current file and save with suffixcursor-toys.trimClipboard: Auto-detect and minify clipboardcursor-toys.trimClipboardWithPrompt: Select type and minify clipboardcursor-toys.selectEnvironment: Switch HTTP environmentcursor-toys.openEnvironments: Open environments foldercursor-toys.createEnvironment: Create new environment filecursor-toys.initializeEnvironments: Initialize environment structure
Configuration Options Added
cursorToys.minify.preserveComments: Preserve comments (default:false)cursorToys.minify.outputSuffix: Minified file suffix (default:.min)cursorToys.httpDefaultEnvironment: Default environment name (default:dev)
Keywords Added
cursor-toys,rest,minify,clipboard,environment,variablesfor better discoverability- Enhanced description highlighting productivity features
[0.9.0] - 2025-12-27
Added
- Personal Prompts Support: Complete functionality to manage personal prompts in
~/.cursor/prompts/, mirroring the Personal Commands system- New "Personal Prompts" view in Explorer sidebar to browse and manage prompts from
~/.cursor/prompts/ - Import prompts via deeplink with option to save as Personal (default) or Project prompt
- Personal prompts are available across all projects
- Project prompts remain workspace-specific in
workspace/.cursor/prompts/
- New "Personal Prompts" view in Explorer sidebar to browse and manage prompts from
- Save as User Prompt: New command to copy prompts from workspace to personal prompts folder
- Available via context menu for files in
.cursor/prompts/ - Asks for confirmation before overwriting existing files
- Option to remove original file after copying
- Automatically opens the saved file
- Available via context menu for files in
- Personal Prompts Management Commands: Full set of management commands for personal prompts
- Open prompt file
- Generate deeplink for prompt
- Rename prompt
- Delete prompt
- Reveal prompt in file system
- Refresh tree view
- Personal Prompts Tree View Features:
- Hierarchical folder structure support
- Drag and drop functionality between folders
- Alphabetical sorting of folders and files
- Automatic tree refresh on file changes
- Context menu with all management options
Changed
- Deeplink Import Flow for Prompts: When importing a prompt deeplink, user is now asked if they want to save as Personal (default) or Project prompt
- Personal prompts saved to
~/.cursor/prompts/ - Project prompts saved to
workspace/.cursor/prompts/ - Maintains consistency with command import behavior
- Personal prompts saved to
- File Type Detection: Updated
getFileTypeFromPath()to properly detect prompts in both workspace and user home directory
Technical Details
- New Files:
src/userPromptsTreeProvider.ts: Complete tree provider for personal prompts with drag-and-drop support
- Enhanced Files:
src/utils.ts: AddedgetPromptsPath()andgetPersonalPromptsPaths()utility functionssrc/deeplinkImporter.ts: Updated import logic to support personal prompts with user choicesrc/extension.ts: Added all prompt management commands, tree view, and file watcherspackage.json: Added personal prompts view, commands, menus, and activation events
- New Commands:
cursor-toys.save-as-user-prompt: Save workspace prompt as personal promptcursor-toys.openUserPrompt: Open personal prompt filecursor-toys.generateUserPromptDeeplink: Generate deeplink for personal promptcursor-toys.deleteUserPrompt: Delete personal promptcursor-toys.revealUserPrompt: Reveal personal prompt in file systemcursor-toys.renameUserPrompt: Rename personal promptcursor-toys.refreshUserPrompts: Refresh personal prompts tree view
- New View:
cursor-toys.userPrompts: Personal Prompts tree view in Explorer sidebar
- File System Watchers: Added automatic monitoring of
~/.cursor/prompts/for real-time updates
Architecture
- Personal prompts follow the same architecture as Personal Commands
- Prompts always use
.cursorfolder (not.claude) - Respects
allowedExtensionsconfiguration - Automatic directory creation when needed
- Cross-platform compatibility (Windows, Mac, Linux)
[0.8.4] - 2025-12-25
Added
- Drag and Drop Support: Personal Commands tree view now supports drag and drop functionality
- Drag files between folders within the same source (.cursor or .claude)
- Drag files between different sources (.cursor and .claude)
- Confirmation prompt before overwriting existing files
- Automatic tree view refresh after moving files
- Hierarchical Folder Structure: Tree view now displays folders and subfolders in a hierarchical structure
- Collapsible folders with proper folder icons
- Files grouped by their parent folders
- Source categories (.cursor and .claude) when viewing both
- Alphabetical sorting of folders and files
- Improved Tree View Organization: Better visual organization of personal commands
- Root files displayed directly under source category
- Subfolder files grouped under their respective folders
- Clear separation between .cursor and .claude commands when viewing both
Changed
- Tree View Structure: Refactored tree view to support hierarchical folder display instead of flat list
- Drag and Drop Controller: Implemented
TreeDragAndDropControllerinterface for file management - Item Types: Added folder and file type distinction in tree view items
Technical Details
- Enhanced Files:
src/userCommandsTreeProvider.ts: Complete refactor to support hierarchical structure and drag-and-dropsrc/extension.ts: AddeddragAndDropControllerto tree view registration
- New Features:
handleDrag(): Manages drag operation initializationhandleDrop(): Handles file moving and folder operationsgroupFilesByFolder(): Creates hierarchical folder structurecreateSourceCategory(): Creates top-level source categories (.cursor/.claude)getBasePath(): Helper to determine source folder from file path
[0.8.3] - 2025-12-25
Changed
- Build Configuration: Updated
.gitignoreand.vscodeignorefor better package management- Exclude internal documentation files from extension package
- Add analytics local files to .gitignore
- Reorganize .vscodeignore entries for clarity
Documentation
- AGENTS.md: Added comprehensive telemetry documentation
- Document telemetry system architecture
- Add activation event clarification (onStartupFinished)
- Add code examples for TelemetryManager usage
- Add reference to ANALYTICS.md
[0.8.2] - 2025-12-25
Changed
- Version Bump: Updated extension version to 0.8.2 for maintenance release
[0.8.1] - 2025-12-25
Fixed
- Extension Activation: Fixed issue where commands were not being found after installing the VSIX
- Changed activation event from individual
onCommandtoonStartupFinished - Ensures extension is fully loaded before commands are executed
- Resolves "command not found" errors for all commands
- Changed activation event from individual
[0.7.0] - 2025-12-25
Added
- HTTP Request Execution: New feature to execute HTTP requests directly from your editor
- Create
.reqor.requestfiles in.cursor/http/folder with curl commands or JSON format - Execute requests with a single click via CodeLens "Send Request" links
- Support for multiple requests in a single file using markdown sections (## Section Title)
- Each section gets its own "Send Request" CodeLens for individual execution
- Automatic response handling with formatted output
- Responses saved to
.resor.responsefiles (or shown in preview mode) - Full syntax highlighting for both HTTP request and response files
- Execution time tracking displayed in response tabs
- Flexible request formats: curl commands and structured JSON
- Smart response formatting: automatically formats JSON and XML responses
- Create
- HTTP Request Configuration: New settings for HTTP request behavior
cursorToys.httpRequestTimeout: Timeout in seconds for HTTP requests (default: 10)cursorToys.httpRequestSaveFile: Save HTTP response to file or show preview only (default: false)
- Language Support: New language definitions and syntax highlighting
http-requestlanguage for.reqand.requestfileshttp-responselanguage for.resand.responsefiles- TextMate grammar files for proper syntax highlighting
- New Command:
cursor-toys.sendHttpRequestto execute HTTP requests from files - HTTP CodeLens Provider: Dedicated CodeLens provider for HTTP request files
- Shows "Send Request" links at the top of request files
- Shows "Send Request: [Section Title]" links for each markdown section in multi-request files
- Only active for files in
.cursor/http/folder
- Custom Response Tab Titles: Response tabs display execution time in the title (e.g., "response (1.23s).res")
Changed
- Version: Bumped to 0.7.0 to reflect major new feature addition
- Activation Events: Added
onCommand:cursor-toys.sendHttpRequestactivation event - README: Extensive documentation updates
- Added "What's New" section highlighting HTTP Request Execution feature
- Added comprehensive HTTP Request Execution section with examples and usage instructions
- Added file location requirements for
.cursor/http/folder - Added configuration documentation for HTTP request settings
- Updated feature list to include HTTP request testing capabilities
- Added real-world use case: "API Development Workflow"
- Updated available commands table with HTTP request command
- Added curl requirement note
- Updated configuration options table
Technical Details
- New Files:
src/httpCodeLensProvider.ts: CodeLens provider for HTTP request filessrc/httpRequestExecutor.ts: Core HTTP request execution logic with curl integrationsyntaxes/http-request.tmLanguage.json: Syntax highlighting for request filessyntaxes/http-response.tmLanguage.json: Syntax highlighting for response files
- Enhanced Files:
src/extension.ts: Added HTTP request command registration and providerssrc/utils.ts: Added utility functions for HTTP request file detectionpackage.json: Added language definitions, grammars, and new configuration options
Requirements
curlcommand-line tool must be installed and available in system PATH
[0.6.0] - 2025-12-06
Added
- Chat Integration: New commands to send code and text directly to Cursor chat
cursor-toys.sendToChat: Send custom text to Cursor chatcursor-toys.sendSelectionToChat: Send selected code to Cursor chat with contextcursor-toys.copySelectionAsPrompt: Copy selected code as prompt deeplink with file context
- Annotation Panel: New Webview Panel that opens via deeplinks (similar to Datadog extension)
- Opens via
cursor://godrix.cursor-toys/annotation?...orvscode://godrix.cursor-toys/annotation?...deeplinks - Displays code, errors, and context in a formatted view
- "Send to Chat" button to send content directly to Cursor chat
- Opens via
- URI Handler: Registered custom protocol handler for
cursor://godrix.cursor-toys/* andvscode://godrix.cursor-toys/* - Editor Context Menu: New submenu "Cursor Toys" when text is selected with options:
- Send Selection to Chat
- Copy as Prompt Deeplink (includes file path, language, and line numbers in context)
- Context Information: Copy command now includes file context (relative path, language, line numbers) when copying code as prompt deeplink
Changed
- Extension Rebranding: Renamed extension from "Cursor Commands Share" to "Cursor Sidekick", and later to "Cursor Toys"
- Command IDs: All command IDs updated from
cursor-sidekick.* tocursor-toys.*for consistency - Updated all user-facing text, command titles, and documentation to reflect the new name "Cursor Toys"
- Removed "Send to Chat" command from Command Palette (now only available via context menu)
- CodeLens labels updated to show "Generate Cursor Toys" instead of "Generate Cursor Sidekick"
- Annotation Panel titles updated to "Cursor Toys - Annotation"
[0.5.1] - 2025-12-02
Added
- Configurable Personal Commands View: New
cursorToys.personalCommandsViewsetting to choose which command folders to display in the Personal Commands tree viewboth: Show commands from both.cursor/commands/and.claude/commands/folders (default)cursor: Show commands from.cursor/commands/folder onlyclaude: Show commands from.claude/commands/folder only
Changed
- Enhanced Tree View: Personal Commands tree view now supports displaying commands from multiple folders simultaneously
- Improved File Watchers: File system watchers now monitor all configured command folders for real-time updates
- Fixed Reveal Command: Changed
revealInExplorertorevealFileInOSfor better cross-platform compatibility - Tree view no longer auto-creates folders that aren't configured to be shown
[0.5.0] - 2025-12-02
Changed
- Extension Rebranding: Renamed extension from "Cursor Deeplink" to "Cursor Commands Share" to better reflect its purpose of sharing and managing Cursor configurations
- Updated all user-facing text, command titles, and documentation to reflect the new name
- Maintained backward compatibility with existing command IDs and configuration keys
[0.4.0] - 2025-12-02
Added
- Personal Commands Tree View: New "Personal Commands" view in the Explorer sidebar to browse and manage user commands from
~/.cursor/commands/or~/.claude/commands/ - User Commands Management: New commands to manage personal commands directly from the tree view:
- Open command file
- Generate deeplink for command
- Rename command
- Delete command
- Reveal command in Explorer
- Refresh tree view
- AGENTS.md Documentation: Added comprehensive development guide with coding conventions, architecture patterns, and best practices
- Tree view automatically creates user commands folder if it doesn't exist
- Tree view filters files by allowed extensions from configuration
- Commands sorted alphabetically in tree view
Changed
- Enhanced user commands management with visual tree view interface
- Improved organization of personal commands with dedicated sidebar view
[0.3.0] - 2025-11-27
Added
- User Commands Support: When importing commands, choose between saving as "Project commands" (workspace-specific) or "Personal commands" (saved to
~/.cursor/commands/or~/.claude/commands/and available across all projects) - Save as User Command: New command to move existing project commands to personal commands folder via context menu
- Organized Context Menu: All Cursor Commands Share commands are now organized in a submenu for better user experience
- Claude Commands Compatibility: Support for
.claude/commands/folder in addition to.cursor/commands/ - Configurable Commands Folder: New
cursorToys.commandsFoldersetting to choose betweencursor(default) orclaudefor where to save imported commands - Context menu and CodeLens now work for both
.cursor/commands/and.claude/commands/folders - Generate deeplinks from files in either
.cursor/commands/or.claude/commands/folders
Changed
- Import flow now prompts for command location (project vs personal) when importing command deeplinks
- Context menu structure improved with submenu organization
- Import flow now respects the
commandsFolderconfiguration when saving imported commands save-as-user-commandcommand now uses the configured commands folder (workspace or user level)- Updated validation to accept both
.cursor/commands/and.claude/commands/folders
Notes
- Only the
commandsfolder is configurable;rulesandpromptscontinue to use.cursor/folder - Configuration supports both workspace and user-level settings
- Default behavior remains
.cursor/commands/for backward compatibility
[0.2.0] - 2025-11-25
Added
- Custom Base URL Support: Added
"custom"option tocursorToys.linkTypeconfiguration - Custom URL Configuration: New
cursorToys.customBaseUrlsetting to specify your own base URL for deeplinks - URL validation for custom base URLs (supports http://, https://, and custom protocols)
- Automatic trailing slash handling for custom URLs
Changed
- Enhanced link type configuration to support three formats: deeplink, web, and custom
- Improved error messages for invalid custom URL configurations
[0.1.0] - 2025-11-24
Added
- Generate deeplinks for Cursor commands, rules, and prompts
- Import deeplinks to automatically create files in appropriate directories
- Support for both
cursor://deeplink andhttps://cursor.com/link/web link formats - CodeLens integration for quick deeplink generation directly in files
- Context menu options for generating deeplinks
- Configurable file extensions (default: md, mdc)
- Configurable link type (deeplink or web)
- Automatic file type detection based on directory structure
- URL length validation (8000 character limit)
- Support for MDC format for rules with metadata
Features
- Right-click context menu for quick deeplink generation
- Command palette integration
- Keyboard shortcut for importing deeplinks (Ctrl+Shift+I / Cmd+Shift+I)
- Automatic file creation with proper naming and extension handling