Yanz Mini Shell
[_]
[-]
[X]
[
HomeShell 1
] [
HomeShell 2
] [
Upload
] [
Command Shell
] [
Scripting
] [
About
]
[ Directory ] =>
/
home
veronikagstoette
public_html
wp-content
Action
[*]
New File
[*]
New Folder
Sensitive File
[*]
/etc/passwd
[*]
/etc/shadow
[*]
/etc/resolv.conf
[
Delete
] [
Edit
] [
Rename
] [
Back
]
skills-cursor/.cursor-managed-skills-manifest.json 0000644 00000000271 15246375752 0016363 0 ustar 00 { "builtinSkillIds": [ "create-rule", "create-skill", "create-subagent", "migrate-to-skills", "shell", "update-cursor-settings" ], "managedSkillIds": [] } skills-cursor/migrate-to-skills/SKILL.md 0000644 00000014447 15246375752 0014161 0 ustar 00 --- name: migrate-to-skills description: >- Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when you want to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory. disable-model-invocation: true --- # Migrate Rules and Slash Commands to Skills Convert Cursor rules ("Applied intelligently") and slash commands to Agent Skills format. **CRITICAL: Preserve the exact body content. Do not modify, reformat, or "improve" it - copy verbatim.** ## Locations | Level | Source | Destination | |-------|--------|-------------| | Project | `{workspaceFolder}/**/.cursor/rules/*.mdc`, `{workspaceFolder}/.cursor/commands/*.md` | | User | `~/.cursor/commands/*.md` | Notes: - Cursor rules inside the project can live in nested directories. Be thorough in your search and use glob patterns to find them. - Ignore anything in ~/.cursor/worktrees - Ignore anything in ~/.cursor/skills-cursor. This is reserved for Cursor's internal built-in skills and is managed automatically by the system. ## Finding Files to Migrate **Rules**: Migrate if rule has a `description` but NO `globs` and NO `alwaysApply: true`. **Commands**: Migrate all - they're plain markdown without frontmatter. ## Conversion Format ### Rules: .mdc → SKILL.md ```markdown # Before: .cursor/rules/my-rule.mdc --- description: What this rule does globs: alwaysApply: false --- # Title Body content... ``` ```markdown # After: .cursor/skills/my-rule/SKILL.md --- name: my-rule description: What this rule does --- # Title Body content... ``` Changes: Add `name` field, remove `globs`/`alwaysApply`, keep body exactly. ### Commands: .md → SKILL.md ```markdown # Before: .cursor/commands/commit.md # Commit current work Instructions here... ``` ```markdown # After: .cursor/skills/commit/SKILL.md --- name: commit description: Commit current work with standardized message format disable-model-invocation: true --- # Commit current work Instructions here... ``` Changes: Add frontmatter with `name` (from filename), `description` (infer from content), and `disable-model-invocation: true`, keep body exactly. **Note:** The `disable-model-invocation: true` field prevents the model from automatically invoking this skill. Slash commands are designed to be explicitly triggered by the user via the `/` menu, not automatically suggested by the model. ## Notes - `name` must be lowercase with hyphens only - `description` is critical for skill discovery - Optionally delete originals after verifying migration works ### Migrate a Rule (.mdc → SKILL.md) 1. Read the rule file 2. Extract the `description` from the frontmatter 3. Extract the body content (everything after the closing `---` of the frontmatter) 4. Create the skill directory: `.cursor/skills/{skill-name}/` (skill name = filename without .mdc) 5. Write `SKILL.md` with new frontmatter (`name` and `description`) + the EXACT original body content (preserve all whitespace, formatting, code blocks verbatim) 6. Delete the original rule file ### Migrate a Command (.md → SKILL.md) 1. Read the command file 2. Extract description from the first heading (remove `#` prefix) 3. Create the skill directory: `.cursor/skills/{skill-name}/` (skill name = filename without .md) 4. Write `SKILL.md` with new frontmatter (`name`, `description`, and `disable-model-invocation: true`) + blank line + the EXACT original file content (preserve all whitespace, formatting, code blocks verbatim) 5. Delete the original command file **CRITICAL: Copy the body content character-for-character. Do not reformat, fix typos, or "improve" anything.** ## Workflow If you have the Task tool available: DO NOT start to read all of the files yourself. That function should be delegated to the subagents. Your job is to dispatch the subagents for each category of files and wait for the results. 1. [ ] Create the skills directories if they don't exist (`.cursor/skills/` for project, `~/.cursor/skills/` for user) 2. Dispatch three fast general purpose subagents (NOT explore) in parallel to do the following steps for project rules (pattern: `{workspaceFolder}/**/.cursor/rules/*.mdc`), user commands (pattern: `~/.cursor/commands/*.md`), and project commands (pattern: `{workspaceFolder}/**/.cursor/commands/*.md`): I. [ ] Find files to migrate in the given pattern II. [ ] For rules, check if it's an "applied intelligently" rule (has `description`, no `globs`, no `alwaysApply: true`). Commands are always migrated. DO NOT use the terminal to read files. Use the read tool. III. [ ] Make a list of files to migrate. If empty, done. IV. [ ] For each file, read it, then write the new skill file preserving the body content EXACTLY. DO NOT use the terminal to write these files. Use the edit tool. V. [ ] Delete the original file. DO NOT use the terminal to delete these files. Use the delete tool. VI. [ ] Return a list of all the skill files that were migrated along with the original file paths. 3. [ ] Wait for all subagents to complete and summarize the results to the user. IMPORTANT: Make sure to let them know if they want to undo the migration, to ask you to. 4. [ ] If the user asks you to undo the migration, do the opposite of the above steps to restore the original files. If you don't have the Task tool available: 1. [ ] Create the skills directories if they don't exist (`.cursor/skills/` for project, `~/.cursor/skills/` for user) 2. [ ] Find files to migrate in both project (`.cursor/`) and user (`~/.cursor/`) directories 3. [ ] For rules, check if it's an "applied intelligently" rule (has `description`, no `globs`, no `alwaysApply: true`). Commands are always migrated. DO NOT use the terminal to read files. Use the read tool. 4. [ ] Make a list of files to migrate. If empty, done. 5. [ ] For each file, read it, then write the new skill file preserving the body content EXACTLY. DO NOT use the terminal to write these files. Use the edit tool. 6. [ ] Delete the original file. DO NOT use the terminal to delete these files. Use the delete tool. 7. [ ] Summarize the results to the user. IMPORTANT: Make sure to let them know if they want to undo the migration, to ask you to. 8. [ ] If the user asks you to undo the migration, do the opposite of the above steps to restore the original files. skills-cursor/shell/SKILL.md 0000644 00000001543 15246375752 0011712 0 ustar 00 --- name: shell description: >- Runs the rest of a /shell request as a literal shell command. Use only when the user explicitly invokes /shell and wants the following text executed directly in the terminal. disable-model-invocation: true --- # Run Shell Commands Use this skill only when the user explicitly invokes `/shell`. ## Behavior 1. Treat all user text after the `/shell` invocation as the literal shell command to run. 2. Execute that command immediately with the terminal tool. 3. Do not rewrite, explain, or "improve" the command before running it. 4. Do not inspect the repository first unless the command itself requires repository context. 5. If the user invokes `/shell` without any following text, ask them which command to run. ## Response - Run the command first. - Then briefly report the exit status and any important stdout or stderr. skills-cursor/create-subagent/SKILL.md 0000644 00000014466 15246375752 0013664 0 ustar 00 --- name: create-subagent description: >- Create custom subagents for specialized AI tasks. Use when you want to create a new type of subagent, set up task-specific agents, configure code reviewers, debuggers, or domain-specific assistants with custom prompts. disable-model-invocation: true --- # Creating Custom Subagents This skill guides you through creating custom subagents for Cursor. Subagents are specialized AI assistants that run in isolated contexts with custom system prompts. ## When to Use Subagents Subagents help you: - **Preserve context** by isolating exploration from your main conversation - **Specialize behavior** with focused system prompts for specific domains - **Reuse configurations** across projects with user-level subagents ### Inferring from Context If you have previous conversation context, infer the subagent's purpose and behavior from what was discussed. Create the subagent based on specialized tasks or workflows that emerged in the conversation. ## Subagent Locations | Location | Scope | Priority | |----------|-------|----------| | `.cursor/agents/` | Current project | Higher | | `~/.cursor/agents/` | All your projects | Lower | When multiple subagents share the same name, the higher-priority location wins. **Project subagents** (`.cursor/agents/`): Ideal for codebase-specific agents. Check into version control to share with your team. **User subagents** (`~/.cursor/agents/`): Personal agents available across all your projects. ## Subagent File Format Create a `.md` file with YAML frontmatter and a markdown body (the system prompt): ```markdown --- name: code-reviewer description: Reviews code for quality and best practices --- You are a code reviewer. When invoked, analyze the code and provide specific, actionable feedback on quality, security, and best practices. ``` ### Required Fields | Field | Description | |-------|-------------| | `name` | Unique identifier (lowercase letters and hyphens only) | | `description` | When to delegate to this subagent (be specific!) | ## Writing Effective Descriptions The description is **critical** - the AI uses it to decide when to delegate. ```yaml # ❌ Too vague description: Helps with code # ✅ Specific and actionable description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code. ``` Include "use proactively" to encourage automatic delegation. ## Example Subagents ### Code Reviewer ```markdown --- name: code-reviewer description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code. --- You are a senior code reviewer ensuring high standards of code quality and security. When invoked: 1. Run git diff to see recent changes 2. Focus on modified files 3. Begin review immediately Review checklist: - Code is clear and readable - Functions and variables are well-named - No duplicated code - Proper error handling - No exposed secrets or API keys - Input validation implemented - Good test coverage - Performance considerations addressed Provide feedback organized by priority: - Critical issues (must fix) - Warnings (should fix) - Suggestions (consider improving) Include specific examples of how to fix issues. ``` ### Debugger ```markdown --- name: debugger description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues. --- You are an expert debugger specializing in root cause analysis. When invoked: 1. Capture error message and stack trace 2. Identify reproduction steps 3. Isolate the failure location 4. Implement minimal fix 5. Verify solution works Debugging process: - Analyze error messages and logs - Check recent code changes - Form and test hypotheses - Add strategic debug logging - Inspect variable states For each issue, provide: - Root cause explanation - Evidence supporting the diagnosis - Specific code fix - Testing approach - Prevention recommendations Focus on fixing the underlying issue, not the symptoms. ``` ### Data Scientist ```markdown --- name: data-scientist description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries. --- You are a data scientist specializing in SQL and BigQuery analysis. When invoked: 1. Understand the data analysis requirement 2. Write efficient SQL queries 3. Use BigQuery command line tools (bq) when appropriate 4. Analyze and summarize results 5. Present findings clearly Key practices: - Write optimized SQL queries with proper filters - Use appropriate aggregations and joins - Include comments explaining complex logic - Format results for readability - Provide data-driven recommendations For each analysis: - Explain the query approach - Document any assumptions - Highlight key findings - Suggest next steps based on data Always ensure queries are efficient and cost-effective. ``` ## Subagent Creation Workflow ### Step 1: Decide the Scope - **Project-level** (`.cursor/agents/`): For codebase-specific agents shared with team - **User-level** (`~/.cursor/agents/`): For personal agents across all projects ### Step 2: Create the File ```bash # For project-level mkdir -p .cursor/agents touch .cursor/agents/my-agent.md # For user-level mkdir -p ~/.cursor/agents touch ~/.cursor/agents/my-agent.md ``` ### Step 3: Define Configuration Write the frontmatter with the required fields (`name` and `description`). ### Step 4: Write the System Prompt The body becomes the system prompt. Be specific about: - What the agent should do when invoked - The workflow or process to follow - Output format and structure - Any constraints or guidelines ### Step 5: Test the Agent Ask the AI to use your new agent: ``` Use the my-agent subagent to [task description] ``` ## Best Practices 1. **Design focused subagents**: Each should excel at one specific task 2. **Write detailed descriptions**: Include trigger terms so the AI knows when to delegate 3. **Check into version control**: Share project subagents with your team 4. **Use proactive language**: Include "use proactively" in descriptions ## Troubleshooting ### Subagent Not Found - Ensure file is in `.cursor/agents/` or `~/.cursor/agents/` - Check file has `.md` extension - Verify YAML frontmatter syntax is valid skills-cursor/create-skill/SKILL.md 0000644 00000033336 15246375752 0013167 0 ustar 00 --- name: create-skill description: >- Guides users through creating effective Agent Skills for Cursor. Use when you want to create, write, or author a new skill, or asks about skill structure, best practices, or SKILL.md format. --- # Creating Skills in Cursor This skill guides you through creating effective Agent Skills for Cursor. Skills are markdown files that teach the agent how to perform specific tasks: reviewing PRs using team standards, generating commit messages in a preferred format, querying database schemas, or any specialized workflow. ## Before You Begin: Gather Requirements Before creating a skill, gather essential information from the user about: 1. **Purpose and scope**: What specific task or workflow should this skill help with? 2. **Target location**: Should this be a personal skill (~/.cursor/skills/) or project skill (.cursor/skills/)? 3. **Trigger scenarios**: When should the agent automatically apply this skill? 4. **Key domain knowledge**: What specialized information does the agent need that it wouldn't already know? 5. **Output format preferences**: Are there specific templates, formats, or styles required? 6. **Existing patterns**: Are there existing examples or conventions to follow? ### Inferring from Context If you have previous conversation context, infer the skill from what was discussed. You can create skills based on workflows, patterns, or domain knowledge that emerged in the conversation. ### Gathering Additional Information If you need clarification, use the AskQuestion tool when available: ``` Example AskQuestion usage: - "Where should this skill be stored?" with options like ["Personal (~/.cursor/skills/)", "Project (.cursor/skills/)"] - "Should this skill include executable scripts?" with options like ["Yes", "No"] ``` If the AskQuestion tool is not available, ask these questions conversationally. --- ## Skill File Structure ### Directory Layout Skills are stored as directories containing a `SKILL.md` file: ``` skill-name/ ├── SKILL.md # Required - main instructions ├── reference.md # Optional - detailed documentation ├── examples.md # Optional - usage examples └── scripts/ # Optional - utility scripts ├── validate.py └── helper.sh ``` ### Storage Locations | Type | Path | Scope | |------|------|-------| | Personal | ~/.cursor/skills/skill-name/ | Available across all your projects | | Project | .cursor/skills/skill-name/ | Shared with anyone using the repository | **IMPORTANT**: Never create skills in `~/.cursor/skills-cursor/`. This directory is reserved for Cursor's internal built-in skills and is managed automatically by the system. ### SKILL.md Structure Every skill requires a `SKILL.md` file with YAML frontmatter and markdown body: ```markdown --- name: your-skill-name description: Brief description of what this skill does and when to use it --- # Your Skill Name ## Instructions Clear, step-by-step guidance for the agent. ## Examples Concrete examples of using this skill. ``` ### Required Metadata Fields | Field | Requirements | Purpose | |-------|--------------|---------| | `name` | Max 64 chars, lowercase letters/numbers/hyphens only | Unique identifier for the skill | | `description` | Max 1024 chars, non-empty | Helps agent decide when to apply the skill | --- ## Writing Effective Descriptions The description is **critical** for skill discovery. The agent uses it to decide when to apply your skill. ### Description Best Practices 1. **Write in third person** (the description is injected into the system prompt): - ✅ Good: "Processes Excel files and generates reports" - ❌ Avoid: "I can help you process Excel files" - ❌ Avoid: "You can use this to process Excel files" 2. **Be specific and include trigger terms**: - ✅ Good: "Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction." - ❌ Vague: "Helps with documents" 3. **Include both WHAT and WHEN**: - WHAT: What the skill does (specific capabilities) - WHEN: When the agent should use it (trigger scenarios) ### Description Examples ```yaml # PDF Processing description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction. # Excel Analysis description: Analyze Excel spreadsheets, create pivot tables, generate charts. Use when analyzing Excel files, spreadsheets, tabular data, or .xlsx files. # Git Commit Helper description: Generate descriptive commit messages by analyzing git diffs. Use when the user asks for help writing commit messages or reviewing staged changes. # Code Review description: Review code for quality, security, and best practices following team standards. Use when reviewing pull requests, code changes, or when the user asks for a code review. ``` --- ## Core Authoring Principles ### 1. Concise is Key The context window is shared with conversation history, other skills, and requests. Every token competes for space. **Default assumption**: The agent is already very smart. Only add context it doesn't already have. Challenge each piece of information: - "Does the agent really need this explanation?" - "Can I assume the agent knows this?" - "Does this paragraph justify its token cost?" **Good (concise)**: ```markdown ## Extract PDF text Use pdfplumber for text extraction: \`\`\`python import pdfplumber with pdfplumber.open("file.pdf") as pdf: text = pdf.pages[0].extract_text() \`\`\` ``` **Bad (verbose)**: ```markdown ## Extract PDF text PDF (Portable Document Format) files are a common file format that contains text, images, and other content. To extract text from a PDF, you'll need to use a library. There are many libraries available for PDF processing, but we recommend pdfplumber because it's easy to use and handles most cases well... ``` ### 2. Keep SKILL.md Under 500 Lines For optimal performance, the main SKILL.md file should be concise. Use progressive disclosure for detailed content. ### 3. Progressive Disclosure Put essential information in SKILL.md; detailed reference material in separate files that the agent reads only when needed. ```markdown # PDF Processing ## Quick start [Essential instructions here] ## Additional resources - For complete API details, see [reference.md](reference.md) - For usage examples, see [examples.md](examples.md) ``` **Keep references one level deep** - link directly from SKILL.md to reference files. Deeply nested references may result in partial reads. ### 4. Set Appropriate Degrees of Freedom Match specificity to the task's fragility: | Freedom Level | When to Use | Example | |---------------|-------------|---------| | **High** (text instructions) | Multiple valid approaches, context-dependent | Code review guidelines | | **Medium** (pseudocode/templates) | Preferred pattern with acceptable variation | Report generation | | **Low** (specific scripts) | Fragile operations, consistency critical | Database migrations | --- ## Common Patterns ### Template Pattern Provide output format templates: ```markdown ## Report structure Use this template: \`\`\`markdown # [Analysis Title] ## Executive summary [One-paragraph overview of key findings] ## Key findings - Finding 1 with supporting data - Finding 2 with supporting data ## Recommendations 1. Specific actionable recommendation 2. Specific actionable recommendation \`\`\` ``` ### Examples Pattern For skills where output quality depends on seeing examples: ```markdown ## Commit message format **Example 1:** Input: Added user authentication with JWT tokens Output: \`\`\` feat(auth): implement JWT-based authentication Add login endpoint and token validation middleware \`\`\` **Example 2:** Input: Fixed bug where dates displayed incorrectly Output: \`\`\` fix(reports): correct date formatting in timezone conversion Use UTC timestamps consistently across report generation \`\`\` ``` ### Workflow Pattern Break complex operations into clear steps with checklists: ```markdown ## Form filling workflow Copy this checklist and track progress: \`\`\` Task Progress: - [ ] Step 1: Analyze the form - [ ] Step 2: Create field mapping - [ ] Step 3: Validate mapping - [ ] Step 4: Fill the form - [ ] Step 5: Verify output \`\`\` **Step 1: Analyze the form** Run: \`python scripts/analyze_form.py input.pdf\` ... ``` ### Conditional Workflow Pattern Guide through decision points: ```markdown ## Document modification workflow 1. Determine the modification type: **Creating new content?** → Follow "Creation workflow" below **Editing existing content?** → Follow "Editing workflow" below 2. Creation workflow: - Use docx-js library - Build document from scratch ... ``` ### Feedback Loop Pattern For quality-critical tasks, implement validation loops: ```markdown ## Document editing process 1. Make your edits 2. **Validate immediately**: \`python scripts/validate.py output/\` 3. If validation fails: - Review the error message - Fix the issues - Run validation again 4. **Only proceed when validation passes** ``` --- ## Utility Scripts Pre-made scripts offer advantages over generated code: - More reliable than generated code - Save tokens (no code in context) - Save time (no code generation) - Ensure consistency across uses ```markdown ## Utility scripts **analyze_form.py**: Extract all form fields from PDF \`\`\`bash python scripts/analyze_form.py input.pdf > fields.json \`\`\` **validate.py**: Check for errors \`\`\`bash python scripts/validate.py fields.json # Returns: "OK" or lists conflicts \`\`\` ``` Make clear whether the agent should **execute** the script (most common) or **read** it as reference. --- ## Anti-Patterns to Avoid ### 1. Windows-Style Paths - ✅ Use: `scripts/helper.py` - ❌ Avoid: `scripts\helper.py` ### 2. Too Many Options ```markdown # Bad - confusing "You can use pypdf, or pdfplumber, or PyMuPDF, or..." # Good - provide a default with escape hatch "Use pdfplumber for text extraction. For scanned PDFs requiring OCR, use pdf2image with pytesseract instead." ``` ### 3. Time-Sensitive Information ```markdown # Bad - will become outdated "If you're doing this before August 2025, use the old API." # Good - use an "old patterns" section ## Current method Use the v2 API endpoint. ## Old patterns (deprecated) <details> <summary>Legacy v1 API</summary> ... </details> ``` ### 4. Inconsistent Terminology Choose one term and use it throughout: - ✅ Always "API endpoint" (not mixing "URL", "route", "path") - ✅ Always "field" (not mixing "box", "element", "control") ### 5. Vague Skill Names - ✅ Good: `processing-pdfs`, `analyzing-spreadsheets` - ❌ Avoid: `helper`, `utils`, `tools` --- ## Skill Creation Workflow When helping a user create a skill, follow this process: ### Phase 1: Discovery Gather information about: 1. The skill's purpose and primary use case 2. Storage location (personal vs project) 3. Trigger scenarios 4. Any specific requirements or constraints 5. Existing examples or patterns to follow If you have access to the AskQuestion tool, use it for efficient structured gathering. Otherwise, ask conversationally. ### Phase 2: Design 1. Draft the skill name (lowercase, hyphens, max 64 chars) 2. Write a specific, third-person description 3. Outline the main sections needed 4. Identify if supporting files or scripts are needed ### Phase 3: Implementation 1. Create the directory structure 2. Write the SKILL.md file with frontmatter 3. Create any supporting reference files 4. Create any utility scripts if needed ### Phase 4: Verification 1. Verify the SKILL.md is under 500 lines 2. Check that the description is specific and includes trigger terms 3. Ensure consistent terminology throughout 4. Verify all file references are one level deep 5. Test that the skill can be discovered and applied --- ## Complete Example Here's a complete example of a well-structured skill: **Directory structure:** ``` code-review/ ├── SKILL.md ├── STANDARDS.md └── examples.md ``` **SKILL.md:** ```markdown --- name: code-review description: Review code for quality, security, and maintainability following team standards. Use when reviewing pull requests, examining code changes, or when the user asks for a code review. --- # Code Review ## Quick Start When reviewing code: 1. Check for correctness and potential bugs 2. Verify security best practices 3. Assess code readability and maintainability 4. Ensure tests are adequate ## Review Checklist - [ ] Logic is correct and handles edge cases - [ ] No security vulnerabilities (SQL injection, XSS, etc.) - [ ] Code follows project style conventions - [ ] Functions are appropriately sized and focused - [ ] Error handling is comprehensive - [ ] Tests cover the changes ## Providing Feedback Format feedback as: - 🔴 **Critical**: Must fix before merge - 🟡 **Suggestion**: Consider improving - 🟢 **Nice to have**: Optional enhancement ## Additional Resources - For detailed coding standards, see [STANDARDS.md](STANDARDS.md) - For example reviews, see [examples.md](examples.md) ``` --- ## Summary Checklist Before finalizing a skill, verify: ### Core Quality - [ ] Description is specific and includes key terms - [ ] Description includes both WHAT and WHEN - [ ] Written in third person - [ ] SKILL.md body is under 500 lines - [ ] Consistent terminology throughout - [ ] Examples are concrete, not abstract ### Structure - [ ] File references are one level deep - [ ] Progressive disclosure used appropriately - [ ] Workflows have clear steps - [ ] No time-sensitive information ### If Including Scripts - [ ] Scripts solve problems rather than punt - [ ] Required packages are documented - [ ] Error handling is explicit and helpful - [ ] No Windows-style paths skills-cursor/create-rule/SKILL.md 0000644 00000007064 15246375752 0013017 0 ustar 00 --- name: create-rule description: >- Create Cursor rules for persistent AI guidance. Use when you want to create a rule, add coding standards, set up project conventions, configure file-specific patterns, create RULE.md files, or asks about .cursor/rules/ or AGENTS.md. --- # Creating Cursor Rules Create project rules in `.cursor/rules/` to provide persistent context for the AI agent. ## Gather Requirements Before creating a rule, determine: 1. **Purpose**: What should this rule enforce or teach? 2. **Scope**: Should it always apply, or only for specific files? 3. **File patterns**: If file-specific, which glob patterns? ### Inferring from Context If you have previous conversation context, infer rules from what was discussed. You can create multiple rules if the conversation covers distinct topics or patterns. Don't ask redundant questions if the context already provides the answers. ### Required Questions If the user hasn't specified scope, ask: - "Should this rule always apply, or only when working with specific files?" If they mentioned specific files and haven't provided concrete patterns, ask: - "Which file patterns should this rule apply to?" (e.g., `**/*.ts`, `backend/**/*.py`) It's very important that we get clarity on the file patterns. Use the AskQuestion tool when available to gather this efficiently. --- ## Rule File Format Rules are `.mdc` files in `.cursor/rules/` with YAML frontmatter: ``` .cursor/rules/ typescript-standards.mdc react-patterns.mdc api-conventions.mdc ``` ### File Structure ```markdown --- description: Brief description of what this rule does globs: **/*.ts # File pattern for file-specific rules alwaysApply: false # Set to true if rule should always apply --- # Rule Title Your rule content here... ``` ### Frontmatter Fields | Field | Type | Description | |-------|------|-------------| | `description` | string | What the rule does (shown in rule picker) | | `globs` | string | File pattern - rule applies when matching files are open | | `alwaysApply` | boolean | If true, applies to every session | --- ## Rule Configurations ### Always Apply For universal standards that should apply to every conversation: ```yaml --- description: Core coding standards for the project alwaysApply: true --- ``` ### Apply to Specific Files For rules that apply when working with certain file types: ```yaml --- description: TypeScript conventions for this project globs: **/*.ts alwaysApply: false --- ``` --- ## Best Practices ### Keep Rules Concise - **Under 50 lines**: Rules should be concise and to the point - **One concern per rule**: Split large rules into focused pieces - **Actionable**: Write like clear internal docs - **Concrete examples**: Ideally provide concrete examples of how to fix issues --- ## Example Rules ### TypeScript Standards ```markdown --- description: TypeScript coding standards globs: **/*.ts alwaysApply: false --- # Error Handling \`\`\`typescript // ❌ BAD try { await fetchData(); } catch (e) {} // ✅ GOOD try { await fetchData(); } catch (e) { logger.error('Failed to fetch', { error: e }); throw new DataFetchError('Unable to retrieve data', { cause: e }); } \`\`\` ``` ### React Patterns ```markdown --- description: React component patterns globs: **/*.tsx alwaysApply: false --- # React Patterns - Use functional components - Extract custom hooks for reusable logic - Colocate styles with components ``` --- ## Checklist - [ ] File is `.mdc` format in `.cursor/rules/` - [ ] Frontmatter configured correctly - [ ] Content under 500 lines - [ ] Includes concrete examples skills-cursor/update-cursor-settings/SKILL.md 0000644 00000010250 15246375752 0015231 0 ustar 00 --- name: update-cursor-settings description: >- Modify Cursor/VSCode user settings in settings.json. Use when you want to change editor settings, preferences, configuration, themes, font size, tab size, format on save, auto save, keybindings, or any settings.json values. --- # Updating Cursor Settings This skill guides you through modifying Cursor/VSCode user settings. Use this when you want to change editor settings, preferences, configuration, themes, keybindings, or any `settings.json` values. ## Settings File Location | OS | Path | |----|------| | macOS | ~/Library/Application Support/Cursor/User/settings.json | | Linux | ~/.config/Cursor/User/settings.json | | Windows | %APPDATA%\Cursor\User\settings.json | ## Before Modifying Settings 1. **Read the existing settings file** to understand current configuration 2. **Preserve existing settings** - only add/modify what the user requested 3. **Validate JSON syntax** before writing to avoid breaking the editor ## Modifying Settings ### Step 1: Read Current Settings ```typescript // Read the settings file first const settingsPath = "~/Library/Application Support/Cursor/User/settings.json"; // Use the Read tool to get current contents ``` ### Step 2: Identify the Setting to Change Common setting categories: - **Editor**: `editor.fontSize`, `editor.tabSize`, `editor.wordWrap`, `editor.formatOnSave` - **Workbench**: `workbench.colorTheme`, `workbench.iconTheme`, `workbench.sideBar.location` - **Files**: `files.autoSave`, `files.exclude`, `files.associations` - **Terminal**: `terminal.integrated.fontSize`, `terminal.integrated.shell.*` - **Cursor-specific**: Settings prefixed with `cursor.` or `aipopup.` ### Step 3: Update the Setting When modifying settings.json: 1. Parse the existing JSON (handle comments - VSCode settings support JSON with comments) 2. Add or update the requested setting 3. Preserve all other existing settings 4. Write back with proper formatting (2-space indentation) ### Example: Changing Font Size If user says "make the font bigger": ```json { "editor.fontSize": 16 } ``` ### Example: Enabling Format on Save If user says "format my code when I save": ```json { "editor.formatOnSave": true } ``` ### Example: Changing Theme If user says "use dark theme" or "change my theme": ```json { "workbench.colorTheme": "Default Dark Modern" } ``` ## Important Notes 1. **JSON with Comments**: VSCode/Cursor settings.json supports comments (`//` and `/* */`). When reading, be aware comments may exist. When writing, preserve comments if possible. 2. **Restart May Be Required**: Some settings take effect immediately, others require reloading the window or restarting Cursor. Inform the user if a restart is needed. 3. **Backup**: For significant changes, consider mentioning the user can undo via Ctrl/Cmd+Z in the settings file or by reverting git changes if tracked. 4. **Workspace vs User Settings**: - User settings (what this skill covers): Apply globally to all projects - Workspace settings (`.vscode/settings.json`): Apply only to the current project 5. **Commit Attribution**: When the user asks about commit attribution, clarify whether they want to edit the **CLI agent** or the **IDE agent**. For the CLI agent, modify `~/.cursor/cli-config.json`. For the IDE agent, it is controlled from the UI at **Cursor Settings > Agent > Attribution** (not settings.json). ## Common User Requests → Settings | User Request | Setting | |--------------|---------| | "bigger/smaller font" | `editor.fontSize` | | "change tab size" | `editor.tabSize` | | "format on save" | `editor.formatOnSave` | | "word wrap" | `editor.wordWrap` | | "change theme" | `workbench.colorTheme` | | "hide minimap" | `editor.minimap.enabled` | | "auto save" | `files.autoSave` | | "line numbers" | `editor.lineNumbers` | | "bracket matching" | `editor.bracketPairColorization.enabled` | | "cursor style" | `editor.cursorStyle` | | "smooth scrolling" | `editor.smoothScrolling` | ## Workflow 1. Read ~/Library/Application Support/Cursor/User/settings.json 2. Parse the JSON content 3. Add/modify the requested setting(s) 4. Write the updated JSON back to the file 5. Inform the user the setting has been changed and whether a reload is needed .gitignore 0000644 00000001632 15246375752 0006556 0 ustar 00 # Ignore everything in .cursor * # Un-ignore projects so we can descend to allowlisted subdirs !projects/ projects/* !projects/*/ projects/*/* # MCP tool descriptors, resources, prompts !projects/*/mcps/ !projects/*/mcps/** # Agent transcripts for citation !projects/*/agent-transcripts/ !projects/*/agent-transcripts/** # Terminal output files !projects/*/terminals/ !projects/*/terminals/** # Conversation notes (shared scratchpad) !projects/*/agent-notes/ !projects/*/agent-notes/** # Large tool output files !projects/*/agent-tools/ !projects/*/agent-tools/** # Plugin cache (rules, skills, agents) !plugins/ !plugins/** # Built-in Cursor skills !skills-cursor/ !skills-cursor/** # User's personal skills !skills/ !skills/** # User's personal slash commands !commands/ !commands/** # User's plan files !plans/ !plans/** # Subagent state/transcripts !subagents/ !subagents/** # User-level cursor rules !rules/ !rules/** projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_fill.json 0000644 00000001745 15246375752 0024142 0 ustar 00 { "name": "browser_fill", "description": "Clear and fill a value into an input element. Unlike browser_type which appends text, this clears the existing value first and sets the new value atomically. Use this when you want to replace the entire content of an input field.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "value": { "type": "string", "description": "Value to fill into the element (replaces any existing content)" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref", "value" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_snapshot.json 0000644 00000002415 15246375752 0025046 0 ustar 00 { "name": "browser_snapshot", "description": "Capture accessibility snapshot of the current page, this is better than screenshot", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." }, "interactive": { "type": "boolean", "description": "When true, only include interactive elements in the snapshot. Defaults to false." }, "maxDepth": { "type": "number", "description": "Maximum depth for snapshot output. Defaults to 20." }, "compact": { "type": "boolean", "description": "When true, outputs a more compact snapshot format. Defaults to false." }, "selector": { "type": "string", "description": "Optional CSS selector to scope the snapshot to a subtree." }, "includeDiff": { "type": "boolean", "description": "When true, include a diff vs the previous snapshot for this tab. Defaults to false." }, "take_screenshot_afterwards": { "type": "boolean", "description": "When true, takes a screenshot after snapshot completes. Defaults to false." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_press_key.json 0000644 00000001560 15246375752 0025213 0 ustar 00 { "name": "browser_press_key", "description": "Press a key on the keyboard. Supports key combinations with modifiers using \"+\" syntax.", "arguments": { "type": "object", "properties": { "key": { "type": "string", "description": "Key to press. Single keys: \"a\", \"Enter\", \"Escape\", \"Tab\", \"Backspace\", \"Delete\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"PageUp\", \"PageDown\", \"Home\", \"End\", \"F1\"-\"F12\", \"Space\". Key combinations with modifiers using \"+\": \"Control+s\", \"Ctrl+Shift+p\", \"Alt+Tab\", \"Meta+a\" (Cmd on Mac). Modifier aliases: Control/Ctrl, Shift, Alt/Option, Meta/Command/Cmd/Win." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "key" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_scroll.json 0000644 00000003064 15246375752 0024506 0 ustar 00 { "name": "browser_scroll", "description": "Scroll the page or a specific element. Use this to bring elements into view, scroll to content, or navigate long pages. Can scroll in any direction by specifying delta values or using directional shortcuts.", "arguments": { "type": "object", "properties": { "ref": { "type": "string", "description": "Element reference to scroll into view, or to scroll within (for scrollable containers)" }, "direction": { "type": "string", "enum": [ "up", "down", "left", "right" ], "description": "Direction to scroll. Shorthand for setting deltaX/deltaY." }, "amount": { "type": "number", "description": "Amount to scroll in pixels when using direction. Defaults to 300." }, "deltaX": { "type": "number", "description": "Horizontal scroll amount in pixels. Positive scrolls right, negative scrolls left." }, "deltaY": { "type": "number", "description": "Vertical scroll amount in pixels. Positive scrolls down, negative scrolls up." }, "scrollIntoView": { "type": "boolean", "description": "If true and ref is provided, scrolls the element into view instead of scrolling within it. Defaults to true when ref is provided without delta values." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_click.json 0000644 00000004005 15246375752 0024271 0 ustar 00 { "name": "browser_click", "description": "Perform click on a web page. Supports single/double click, different mouse buttons, modifier keys, position offsets, and hold duration.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "doubleClick": { "type": "boolean", "description": "Whether to perform a double click instead of a single click" }, "button": { "type": "string", "enum": [ "left", "right", "middle" ], "description": "Mouse button to click. Defaults to \"left\"." }, "modifiers": { "type": "array", "items": { "type": "string", "enum": [ "Control", "Shift", "Alt", "Meta", "ControlOrMeta" ] }, "description": "Modifier keys to hold during click. \"ControlOrMeta\" uses Ctrl on Windows/Linux and Cmd on Mac." }, "offsetX": { "type": "number", "description": "Horizontal offset from element's left edge in pixels. If omitted, clicks at horizontal center." }, "offsetY": { "type": "number", "description": "Vertical offset from element's top edge in pixels. If omitted, clicks at vertical center." }, "holdDurationMs": { "type": "number", "description": "Duration to hold the mouse button down before releasing, in milliseconds. Useful for long-press interactions. Defaults to 0 (immediate release)." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_profile_start.json 0000644 00000000623 15246375752 0026063 0 ustar 00 { "name": "browser_profile_start", "description": "Start CPU profiling to capture call stack timing data. Use browser_profile_stop to end profiling and get results.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_navigate_forward.json 0000644 00000000621 15246375752 0026526 0 ustar 00 { "name": "browser_navigate_forward", "description": "Go forward to the next page in browser history. Returns an error if there is no forward page to navigate to.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_take_screenshot.json 0000644 00000002311 15246375752 0026363 0 ustar 00 { "name": "browser_take_screenshot", "description": "Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.", "arguments": { "type": "object", "properties": { "type": { "type": "string", "description": "Image format for the screenshot. Default is png." }, "filename": { "type": "string", "description": "File name to save the screenshot to. Defaults to page-{timestamp}.{png|jpeg} if not specified." }, "element": { "type": "string", "description": "Description of the element, if taking a screenshot of an element" }, "ref": { "type": "string", "description": "CSS selector for the element, if taking a screenshot of an element" }, "fullPage": { "type": "boolean", "description": "When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_navigate.json 0000644 00000002235 15246375752 0025005 0 ustar 00 { "name": "browser_navigate", "description": "Navigate to a URL. By default reuses an existing tab; set newTab: true to open in a new tab.", "arguments": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL to navigate to" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." }, "position": { "type": "string", "enum": [ "active", "side" ], "description": "IMPORTANT: Set to \"side\" if user mentions \"side\", \"beside\", \"side panel\", or \"side by side\". Opens browser in side editor group. Defaults to \"active\" (current editor group)." }, "take_screenshot_afterwards": { "type": "boolean", "description": "When true, takes a screenshot after navigation completes. Defaults to false." }, "newTab": { "type": "boolean", "description": "When true, creates a new tab before navigating instead of reusing an existing tab. Defaults to false." } }, "required": [ "url" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_navigate_back.json 0000644 00000000620 15246375752 0025761 0 ustar 00 { "name": "browser_navigate_back", "description": "Go back to the previous page in browser history. Returns an error if there is no previous page to navigate to.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_console_messages.json 0000644 00000000501 15246375752 0026532 0 ustar 00 { "name": "browser_console_messages", "description": "Returns all console messages", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_search.json 0000644 00000002204 15246375752 0024450 0 ustar 00 { "name": "browser_search", "description": "Search for text on the current page, similar to Cmd+F / Ctrl+F. Highlights all matches, scrolls to the first match, and returns a screenshot showing the match in context along with the count and positions of matches found.", "arguments": { "type": "object", "properties": { "query": { "type": "string", "description": "The text to search for on the page" }, "caseSensitive": { "type": "boolean", "description": "Whether the search should be case-sensitive. Defaults to false." }, "navigateToMatch": { "type": "number", "description": "Navigate to a specific match by index (0-based). If not provided, navigates to the first match." }, "clearHighlights": { "type": "boolean", "description": "If true, clears all search highlights without performing a new search. Use this to remove previous search highlights." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_hover.json 0000644 00000001200 15246375752 0024321 0 ustar 00 { "name": "browser_hover", "description": "Hover over element on page", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_profile_stop.json 0000644 00000000573 15246375752 0025717 0 ustar 00 { "name": "browser_profile_stop", "description": "Stop CPU profiling and return the profile data including call stacks, timing, and samples.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_resize.json 0000644 00000001053 15246375752 0024505 0 ustar 00 { "name": "browser_resize", "description": "Resize the browser window", "arguments": { "type": "object", "properties": { "width": { "type": "number", "description": "Width of the browser window" }, "height": { "type": "number", "description": "Height of the browser window" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "width", "height" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_drag.json 0000644 00000002002 15246375752 0024114 0 ustar 00 { "name": "browser_drag", "description": "Perform a drag and drop operation. Drags from a source element to a target element or coordinates.", "arguments": { "type": "object", "properties": { "sourceRef": { "type": "string", "description": "Reference of the element to drag from" }, "targetRef": { "type": "string", "description": "Reference of the element to drop onto" }, "targetX": { "type": "number", "description": "X coordinate to drop at (relative to viewport). Use with targetY instead of targetRef for coordinate-based drops." }, "targetY": { "type": "number", "description": "Y coordinate to drop at (relative to viewport). Use with targetX instead of targetRef for coordinate-based drops." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "sourceRef" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_get_bounding_box.json 0000644 00000001223 15246375752 0026517 0 ustar 00 { "name": "browser_get_bounding_box", "description": "Get bounding box details for an element.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_type.json 0000644 00000002447 15246375752 0024175 0 ustar 00 { "name": "browser_type", "description": "Type text into editable element", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "text": { "type": "string", "description": "Text to type into the element" }, "clear": { "type": "boolean", "description": "Whether to clear existing content before typing. Use this to replace the current value instead of appending to it. Defaults to false." }, "submit": { "type": "boolean", "description": "Whether to submit entered text (press Enter after)" }, "slowly": { "type": "boolean", "description": "Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref", "text" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_is_visible.json 0000644 00000001216 15246375752 0025335 0 ustar 00 { "name": "browser_is_visible", "description": "Check if an element is currently visible.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_unlock.json 0000644 00000000613 15246375752 0024500 0 ustar 00 { "name": "browser_unlock", "description": "Unlock the browser to allow user interaction. Call this when you are done with a sequence of browser operations.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_network_requests.json 0000644 00000000530 15246375752 0026627 0 ustar 00 { "name": "browser_network_requests", "description": "Returns all network requests since loading the page", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_highlight.json 0000644 00000001442 15246375752 0025155 0 ustar 00 { "name": "browser_highlight", "description": "Temporarily highlight an element for visual debugging.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "durationMs": { "type": "number", "description": "Highlight duration in milliseconds. Defaults to 2000." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_reload.json 0000644 00000001020 15246375752 0024444 0 ustar 00 { "name": "browser_reload", "description": "Reload the current page. Useful after making code changes to see updates.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." }, "take_screenshot_afterwards": { "type": "boolean", "description": "When true, takes a screenshot after reload completes. Defaults to false." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_get_attribute.json 0000644 00000001403 15246375752 0026045 0 ustar 00 { "name": "browser_get_attribute", "description": "Read a specific attribute from an element.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "name": { "type": "string", "description": "Attribute name to read" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref", "name" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_select_option.json 0000644 00000002135 15246375752 0026055 0 ustar 00 { "name": "browser_select_option", "description": "Select an option in a dropdown. Matching priority: exact value match, then exact label match, then partial label match. The snapshot now shows available options for select elements.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "values": { "type": "array", "items": { "type": "string" }, "description": "Array of values to select. Matches against option value first, then label text, then partial label. Use exact values from the snapshot options list when available." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref", "values" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_is_enabled.json 0000644 00000001271 15246375752 0025273 0 ustar 00 { "name": "browser_is_enabled", "description": "Check if an element is enabled (not disabled by its own state or a parent fieldset).", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_lock.json 0000644 00000000707 15246375752 0024141 0 ustar 00 { "name": "browser_lock", "description": "Lock the browser to prevent user interaction while you work. Shows a subtle overlay that blocks clicks/scrolls. The user can still click \"Take Control\" to unlock if needed.", "arguments": { "type": "object", "properties": { "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_fill_form.json 0000644 00000002732 15246375752 0025162 0 ustar 00 { "name": "browser_fill_form", "description": "Fill multiple form fields at once. Each field uses ref + value. By default, each field is cleared before setting the new value.", "arguments": { "type": "object", "properties": { "fields": { "type": "array", "items": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to interact with the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "value": { "type": "string", "description": "Value to fill into the field" }, "clear": { "type": "boolean", "description": "Whether to clear existing content before filling. Defaults to true." } }, "required": [ "element", "ref", "value" ] } }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." }, "take_screenshot_afterwards": { "type": "boolean", "description": "When true, takes a screenshot after the fill completes. Defaults to false." } }, "required": [ "fields" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_wait_for.json 0000644 00000001710 15246375752 0025016 0 ustar 00 { "name": "browser_wait_for", "description": "Wait for text to appear or disappear, or wait a specified time. Note: time is in SECONDS, not milliseconds.", "arguments": { "type": "object", "properties": { "time": { "type": "number", "description": "Time to wait in SECONDS (e.g., 2 for 2 seconds, 0.5 for 500ms). Use for fixed delays." }, "text": { "type": "string", "description": "Wait for this text to appear on the page." }, "textGone": { "type": "string", "description": "Wait for this text to disappear from the page." }, "timeout": { "type": "number", "description": "Maximum time to wait for text conditions in MILLISECONDS. Defaults to 30000 (30 seconds)." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_handle_dialog.json 0000644 00000002042 15246375752 0025755 0 ustar 00 { "name": "browser_handle_dialog", "description": "Configure how native browser dialogs (alert, confirm, prompt) are handled. Dialogs are non-blocking in this environment - they return immediately without showing a visible dialog. Use this tool BEFORE triggering an action that shows a dialog to configure what value it should return. Also returns recent dialog history.", "arguments": { "type": "object", "properties": { "accept": { "type": "boolean", "description": "For confirm() dialogs: true to simulate clicking OK (returns true), false to simulate clicking Cancel (returns false). Default behavior is true." }, "promptText": { "type": "string", "description": "For prompt() dialogs: the text value to return. If not specified, prompt() returns the default value provided by the page." }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "accept" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_get_input_value.json 0000644 00000001332 15246375752 0026376 0 ustar 00 { "name": "browser_get_input_value", "description": "Read the current value of an input, textarea, or contenteditable element. Password inputs return a masked value.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_is_checked.json 0000644 00000001225 15246375752 0025266 0 ustar 00 { "name": "browser_is_checked", "description": "Check if a checkbox or radio element is checked.", "arguments": { "type": "object", "properties": { "element": { "type": "string", "description": "Human-readable element description used to obtain permission to inspect the element" }, "ref": { "type": "string", "description": "Exact target element reference from the page snapshot" }, "viewId": { "type": "string", "description": "Target browser tab ID. If omitted, uses the last interacted tab." } }, "required": [ "element", "ref" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/tools/browser_tabs.json 0000644 00000001604 15246375752 0024137 0 ustar 00 { "name": "browser_tabs", "description": "List, create, close, or select a browser tab", "arguments": { "type": "object", "properties": { "action": { "type": "string", "enum": [ "list", "new", "close", "select" ], "description": "Operation to perform" }, "index": { "type": "number", "description": "Tab index. Required for \"select\". Optional for \"close\" (defaults to current tab)." }, "position": { "type": "string", "enum": [ "active", "side" ], "description": "IMPORTANT: Set to \"side\" if user mentions \"side\", \"beside\", \"side panel\", or \"side by side\". Opens browser in side editor group. Only for action \"new\". Defaults to \"active\"." } }, "required": [ "action" ] } } projects/home-stagediagnostiku/mcps/cursor-ide-browser/SERVER_METADATA.json 0000644 00000000124 15246375752 0022545 0 ustar 00 { "serverIdentifier": "cursor-ide-browser", "serverName": "cursor-ide-browser" } projects/home-stagediagnostiku/mcps/cursor-ide-browser/INSTRUCTIONS.md 0000644 00000014562 15246375752 0021705 0 ustar 00 The cursor-ide-browser is an MCP server that allows you to navigate the web and interact with the page. Use this for frontend/webapp development and testing code changes. CRITICAL - Lock/unlock workflow: 1. browser_lock requires an existing browser tab - you CANNOT lock before browser_navigate 2. Correct order: browser_navigate -> browser_lock -> (interactions) -> browser_unlock 3. If a browser tab already exists (check with browser_tabs list), call browser_lock FIRST before any interactions 4. Only call browser_unlock when completely done with ALL browser operations for this turn IMPORTANT - Before interacting with any page: 1. Use browser_tabs with action "list" to see open tabs and their URLs 2. Use browser_snapshot to get the page structure and element refs before any interaction (click, type, hover, etc.) IMPORTANT - Waiting strategy: When waiting for page changes (navigation, content loading, animations, etc.), prefer short incremental waits (1-3 seconds) with browser_snapshot checks in between rather than a single long wait. For example, instead of waiting 10 seconds, do: wait 2s -> snapshot -> check if ready -> if not, wait 2s more -> snapshot again. This allows you to proceed as soon as the page is ready rather than always waiting the maximum time. PERFORMANCE PROFILING: - browser_profile_start/stop: CPU profiling with call stacks and timing data. Use to identify slow JavaScript functions. - Profile data is written to ~/.cursor/browser-logs/. Files: cpu-profile-{timestamp}.json (raw profile in Chrome DevTools format) and cpu-profile-{timestamp}-summary.md (human-readable summary). - IMPORTANT: When investigating performance issues, read the raw cpu-profile-*.json file to verify summary data. Key fields: profile.samples.length (total samples), profile.nodes[].hitCount (per-node hits), profile.nodes[].callFrame.functionName (function names). Cross-reference with the summary to confirm findings before making optimization recommendations. Notes: - Native dialogs (alert/confirm/prompt) never block automation. By default, confirm() returns true and prompt() returns the default value. To test different responses, call browser_handle_dialog BEFORE the triggering action: use accept: false for "Cancel", or promptText: "value" for custom prompt input. - Iframe content is not accessible - only elements outside iframes can be interacted with. - Use browser_type to append text, browser_fill to clear and replace. browser_fill also works on contenteditable elements. - For nested scroll containers, use browser_scroll with scrollIntoView: true before clicking elements that may be obscured. CANVAS: Create live HTML canvases when text alone can't convey the idea -- interactive demos, visualizations, diagrams, or anything that benefits from being seen rather than described. - Always provide a descriptive `title`. Pass `id` to update an existing canvas. - To reopen a previously created canvas, call the canvas tool with just `title` and `id` (no `content`). - Canvases are .html files stored in the canvas folder (the path is returned after creation). To update a canvas, read and edit the source .html file directly with Read/Edit tools -- changes auto-reload in the browser via livereload. - Do NOT use canvases for static text, simple code, or file contents -- use markdown for those. - Keep content focused. No navbars, sidebars, footers. One clear chart beats three crammed together. - Design: Every canvas should feel intentionally designed, not generically AI-generated. Commit to a bold aesthetic direction suited to the content -- brutalist, editorial, retro-futuristic, organic, luxury, playful, art deco, industrial, or something entirely unique. - Typography: Import distinctive fonts from Google Fonts. NEVER default to Inter, Roboto, Arial, Space Grotesk, or system fonts. Pair a characterful display font with a refined body font. - Color: Use CSS variables for a cohesive palette. Dominant colors with sharp accents -- avoid cliched purple-on-white or other generic AI color schemes. - Layout: Asymmetry, overlap, diagonal flow, grid-breaking elements. Generous negative space OR controlled density. Avoid predictable centered-card-stack layouts. - Motion & depth: CSS animations for staggered entrance reveals, scroll-triggered effects, and surprising hover states. Textured backgrounds (gradient meshes, noise, grain, layered transparencies, dramatic shadows) over flat solid colors. - Match implementation complexity to the aesthetic vision -- maximalist designs need elaborate animations and layered effects; minimalist designs need precision, restraint, and meticulous spacing. - Variety: NEVER converge on the same fonts, palette, or layout between canvases. Alternate light/dark themes, font families, and visual styles so no two look alike. Examples of good canvas use: - "Explain how A* pathfinding works" -> interactive grid visualization - "Compare sorting algorithms" -> animated side-by-side comparison - "Show the git branch topology" -> interactive graph diagram Examples of bad canvas use: - "What does git rebase do?" -> just explain in markdown - "Write a fibonacci function" -> just write code Recommended CDN libraries (use esm.sh for ES module imports, or cdn.jsdelivr.net for UMD/script tags): - 3D: Three.js (three) -- scenes, models, shaders, physics. Import via <script type="importmap"> with https://esm.sh/three - Charts: Chart.js (chart.js) -- bar, line, pie, radar, scatter. Or D3.js (d3) for custom data visualizations. - Canvas 2D: p5.js -- creative coding, generative art, simulations, particle systems - SVG: Snap.svg or plain SVG with D3 -- diagrams, flowcharts, animated illustrations - UI: React (react, react-dom) via esm.sh -- component-based interactive UIs. Or Preact for lighter weight. - Animation: GSAP (gsap) -- timeline-based animations, scroll triggers. Or anime.js for simpler tweens. - Maps: Leaflet (leaflet) -- interactive maps with markers, layers, GeoJSON - Math: KaTeX (katex) -- rendered math equations. Or MathJax. - Markdown: marked -- render markdown to HTML - Tables: Tabulator -- interactive data tables with sorting, filtering, pagination - Diagrams: Mermaid (mermaid) -- flowcharts, sequence diagrams, Gantt charts from text - Code: Prism.js or highlight.js -- syntax-highlighted code blocks When using ES modules, prefer this pattern: <script type="importmap">{ "imports": { "three": "https://esm.sh/three" } }</script> <script type="module">import * as THREE from 'three'; ...</script>