Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create your first project using Cursor AI features: Tab, Chat, Composer, and Inline Edit. Triggers on "cursor hello world", "first cursor project", "cursor getting started", "try cursor ai", "cursor basics", "cursor tutorial".
.claude/skills/jeremylongshore-cursor-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 142% | 0% |
Practice Tab, Chat, Inline Edit, and Composer in a disposable sample project before using them on production code. Every proposed diff remains subject to normal review, tests, security checks, and repository rules.
A hands-on 10-minute walkthrough of Cursor's four core AI features: Tab Completion, Chat, Inline Edit, and Composer.
bashmkdir cursor-hello && cd cursor-hello npm init -y npm install typescript tsx @types/node --save-dev npx tsc --init
Open the project in Cursor: cursor . (or File > Open Folder).
Create src/utils.ts. Start typing and let Tab complete:
typescript// Type this much: export function formatCurrency(amount: number, currency: string // Tab suggests: export function formatCurrency(amount: number, currency: string = 'USD'): string { return new Intl.NumberFormat('en-US', { style: 'currency', currency, }).format(amount); }
Press Tab to accept the full suggestion, or Cmd+Right Arrow to accept word-by-word.
Type a comment describing what you want, then start the function:
typescript// Validate an email address using regex export function validateEmail( // Sort an array of objects by a key export function sortBy<T>( // Calculate the distance between two lat/lng points in km export function haversineDistance(
Tab reads your comment and generates the implementation.
Open Chat with Cmd+L. Try these prompts:
Ask about your code:
@src/utils.ts
What does the formatCurrency function do? Does it handle edge cases
like negative numbers or very large values?Generate new code:
Write a TypeScript function that converts a nested object
to a flat key-value map with dot-separated keys.
Example: { a: { b: 1 } } → { "a.b": 1 }Debug a concept:
Explain the difference between Promise.all() and Promise.allSettled()
with code examples showing when to use each.Chat responds with explanations and code snippets. Click Apply on any code block to insert it into your editor.
Open src/utils.ts. Select the formatCurrency function body. Press Cmd+K.
Type your instruction:
Add support for locale parameter with default 'en-US'.
Handle NaN input by returning '$0.00'.Cursor shows the diff inline:
Press Cmd+Y to accept, Esc to reject.
Select any code and press Cmd+K with instructions like:
"Add TypeScript types""Refactor to use early returns""Add error handling""Convert to async/await""Add JSDoc documentation"Press Cmd+I to open Composer. Ask it to create a complete feature:
Create a simple task manager module:
1. src/types/task.ts - Task interface with id, title, completed, createdAt
2. src/services/task-service.ts - TaskService class with:
- addTask(title: string): Task
- completeTask(id: string): Task
- listTasks(): Task[]
- deleteTask(id: string): void
3. src/index.ts - Demo script that creates 3 tasks, completes one, lists all
Use in-memory storage (Map). Include TypeScript types throughout.Composer shows all files it will create/modify. Review each diff, then click Apply All.
bashnpx tsx src/index.ts
| Feature | Shortcut | Use For | Scope | |---------|----------|---------|-------| | Tab | Automatic | Line/block completions while typing | Current cursor position | | Chat | Cmd+L | Questions, explanations, code snippets | Conversation-based | | Inline Edit | Cmd+K | Edit selected code with instructions | Selected code block | | Composer | Cmd+I | Multi-file generation and refactoring | Multiple files |
.cursor/rules/ with coding standards (see cursor-rules-config skill)@Files, @Codebase, @Docs in Chat (see cursor-context-management skill)| Condition | Safe response | |---|---| | Generated diff touches unrelated files | Reject it, start a scoped request, and inspect active context/rules. | | Output includes insecure or untested code | Do not accept it; request a constrained revision and use normal review/testing. | | Sensitive material is included in context | Stop the session, remove the context, and follow the exposure procedure. |
Ask Inline Edit to add a type to one selected function, inspect the proposed diff, then run the focused test. If it touches other files or violates project rules, reject it and restate the task with the exact file and acceptance condition.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 15,604 | 9,184 | -41% | 1 | 1 | 0% | 2,816 | 3,350 | +19% | 0 | 0 | — |
case-02 | fail→pass | 8,877 | 6,300 | -29% | 1 | 1 | 0% | 1,504 | 2,487 | +65% | 0 | 0 | — |
case-03 | pass→pass | 3,815 | 2,602 | -32% | 1 | 1 | 0% | 662 | 1,605 | +142% | 0 | 0 | — |
case-04 | pass→pass | 5,605 | 2,801 | -50% | 1 | 1 | 0% | 967 | 1,576 | +63% | 0 | 0 | — |
case-05 | pass→pass | 13,566 | 12,197 | -10% | 1 | 1 | 0% | 2,437 | 3,440 | +41% | 0 | 0 | — |
case-15 | pass→pass | 10,198 | 13,901 | +36% | 1 | 1 | 0% | 1,753 | 2,874 | +64% | 0 | 0 | — |
case-06 | pass→pass | 3,186 | 1,507 | -53% | 1 | 1 | 0% | 450 | 1,413 | +214% | 0 | 0 | — |
case-07 | pass→pass | 5,210 | 2,387 | -54% | 1 | 1 | 0% | 924 | 1,526 | +65% | 0 | 0 | — |
case-08 | pass→pass | 5,784 | 4,236 | -27% | 1 | 1 | 0% | 349 | 1,450 | +315% | 0 | 0 | — |
case-09 | pass→pass | 12,898 | 10,440 | -19% | 1 | 1 | 0% | 521 | 1,471 | +182% | 0 | 0 | — |
case-14 | pass→pass | 16,229 | 13,569 | -16% | 1 | 1 | 0% | 1,081 | 1,966 | +82% | 0 | 0 | — |
case-10 | fail→pass | 6,342 | 6,352 | +0% | 1 | 1 | 0% | 1,216 | 1,559 | +28% | 0 | 0 | — |
case-11 | pass→pass | 2,381 | 1,619 | -32% | 1 | 1 | 0% | 409 | 1,428 | +249% | 0 | 0 | — |
case-12 | pass→pass | 2,827 | 1,910 | -32% | 1 | 1 | 0% | 453 | 1,416 | +213% | 0 | 0 | — |
case-13 | pass→pass | 8,593 | 4,263 | -50% | 1 | 1 | 0% | 1,012 | 1,485 | +47% | 0 | 0 | — |
case-16 | pass→pass | 7,382 | 3,755 | -49% | 1 | 1 | 0% | 1,320 | 1,850 | +40% | 0 | 0 | — |
case-17 | pass→pass | 3,580 | 1,833 | -49% | 1 | 1 | 0% | 685 | 1,520 | +122% | 0 | 0 | — |
case-18 | pass→pass | 7,673 | 5,280 | -31% | 1 | 1 | 0% | 1,316 | 2,108 | +60% | 0 | 0 | — |
case-19 | fail→pass | 12,167 | 5,077 | -58% | 1 | 1 | 0% | 2,080 | 2,077 | -0% | 0 | 0 | — |
case-20 | fail→fail | 12,197 | 13,864 | +14% | 1 | 1 | 0% | 2,328 | 3,786 | +63% | 0 | 0 | — |
case-21 | fail→fail | 9,235 | 10,432 | +13% | 1 | 1 | 0% | 1,647 | 2,905 | +76% | 0 | 0 | — |
case-22 | fail→fail | 7,750 | 7,728 | -0% | 1 | 1 | 0% | 1,427 | 2,528 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.