Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Master Cursor Tab autocomplete, ghost text, and AI code suggestions. Triggers on "cursor completion", "cursor tab", "cursor suggestions", "cursor autocomplete", "cursor ghost text", "cursor copilot".
.claude/skills/jeremylongshore-cursor-tab-completion/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -2% | 0% |
Use Tab for small, local code completions; it predicts text and does not establish correctness, security, or repository policy compliance.
| Condition | Safe response | |---|---| | Completion is incorrect or insecure | Reject it and implement or request a narrower change. | | Multiple completion providers conflict | Disable the duplicate provider using approved editor configuration. | | Sensitive file is in context | Stop, update ignore rules, and follow the data-handling procedure. |
For a CSV parser, write the return type and validation constraints first. Accept only the parser body, inspect the resulting diff, and run its unit test. If Tab adds filesystem access or changes another file, reject it rather than editing around the suggestion.
Master Cursor's AI-powered Tab completion system. Tab uses a specialized Cursor model trained for inline code prediction -- it learns from your accept/reject behavior to improve over time.
// You type:
function validateEmail(email: string)
// Ghost text appears:
function validateEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; ← gray ghost text
return emailRegex.test(email);
}| Action | macOS | Windows/Linux | |--------|-------|---------------| | Accept full suggestion | Tab | Tab | | Accept word-by-word | Cmd+→ | Ctrl+→ | | Dismiss suggestion | Esc | Esc | | Force trigger | Ctrl+Space | Ctrl+Space |
Word-by-word acceptance (Cmd+→) is powerful for partial suggestions. If the AI suggests a complete function but you only want the signature, accept word-by-word until you have what you need, then type your own body.
Access via Cursor Settings > Tab:
| Setting | Purpose | Recommendation | |---------|---------|----------------| | Tab Completion | Master on/off toggle | Keep enabled | | Trigger in comments | Generate comment text | Disable for less noise | | Accept suggestion keybinding | Remap Tab to another key | Default (Tab) works best | | Suggestion delay | Time before ghost text appears | Lower = faster but more flicker |
If Tab suggestions in comments are distracting:
Cursor Settings > Tab Completion > uncheck Trigger in comments
Tab quality depends heavily on available context:
.cursor/rules/*.mdc or .cursorrules content// BAD: Tab has no context about what you want
function process(data) {
// GOOD: Type signature gives Tab strong signal
function processPayment(
amount: number,
currency: 'USD' | 'EUR',
paymentMethod: PaymentMethod
): Promise<PaymentResult> {Write descriptive function names and type signatures first. Tab uses these as strong signals for generating the body.
typescript// Parse CSV file, skip header row, return array of objects with typed fields function parseCSV(filepath: string): Promise<Record<string, string>[]> { // Tab will generate the full implementation based on the comment above }
| Feature | Trigger | Scope | Speed | |---------|---------|-------|-------| | Tab | Automatic while typing | Single completion | Instant (~100ms) | | Inline Edit (Cmd+K) | Manual selection + prompt | Selected code block | ~2-5 seconds | | Chat (Cmd+L) | Manual prompt | Conversational | ~3-10 seconds | | Composer (Cmd+I) | Manual prompt | Multi-file | ~5-30 seconds |
Tab is the only feature that runs continuously as you type. It is optimized for speed over capability -- simple completions, not complex reasoning.
If Tab conflicts with other extensions:
Extensions > search "Copilot" > Disable. Running both causes duplicate ghost text.Remap if needed: Cmd+K Cmd+S > search acceptCursorTabSuggestion > assign new key.
Tab gets better with usage. The model learns from:
After a few days on a project, Tab suggestions become noticeably more aligned with your coding style.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | pass→pass | 12,956 | 9,002 | -31% | 1 | 1 | 0% | 2,203 | 2,850 | +29% | 0 | 0 | — |
case-01 | fail→pass | 12,993 | 9,637 | -26% | 1 | 1 | 0% | 2,336 | 2,993 | +28% | 0 | 0 | — |
case-02 | pass→pass | 9,460 | 14,827 | +57% | 1 | 1 | 0% | 1,648 | 1,923 | +17% | 0 | 0 | — |
case-03 | pass→pass | 4,407 | 3,360 | -24% | 1 | 1 | 0% | 629 | 1,630 | +159% | 0 | 0 | — |
case-10 | pass→pass | 15,175 | 9,441 | -38% | 1 | 1 | 0% | 2,717 | 3,152 | +16% | 0 | 0 | — |
case-04 | pass→pass | 10,383 | 4,984 | -52% | 1 | 1 | 0% | 1,729 | 2,216 | +28% | 0 | 0 | — |
case-05 | pass→pass | 10,960 | 13,405 | +22% | 1 | 1 | 0% | 1,966 | 2,830 | +44% | 0 | 0 | — |
case-06 | fail→pass | 14,346 | 12,669 | -12% | 1 | 1 | 0% | 1,201 | 1,523 | +27% | 0 | 0 | — |
case-07 | fail→pass | 9,790 | 11,425 | +17% | 1 | 1 | 0% | 1,767 | 2,088 | +18% | 0 | 0 | — |
case-08 | pass→pass | 12,818 | 6,838 | -47% | 1 | 1 | 0% | 2,082 | 2,593 | +25% | 0 | 0 | — |
case-11 | pass→pass | 10,443 | 5,978 | -43% | 1 | 1 | 0% | 1,753 | 2,338 | +33% | 0 | 0 | — |
case-12 | fail→pass | 4,943 | 1,832 | -63% | 1 | 1 | 0% | 840 | 1,576 | +88% | 0 | 0 | — |
case-13 | fail→pass | 13,704 | 5,156 | -62% | 1 | 1 | 0% | 2,198 | 2,147 | -2% | 0 | 0 | — |
case-14 | pass→pass | 10,499 | 3,605 | -66% | 1 | 1 | 0% | 1,671 | 1,876 | +12% | 0 | 0 | — |
case-15 | fail→pass | 7,126 | 3,271 | -54% | 1 | 1 | 0% | 1,239 | 1,831 | +48% | 0 | 0 | — |
case-16 | pass→pass | 7,316 | 2,019 | -72% | 1 | 1 | 0% | 1,299 | 1,582 | +22% | 0 | 0 | — |
case-17 | pass→pass | 12,400 | 5,096 | -59% | 1 | 1 | 0% | 1,979 | 2,211 | +12% | 0 | 0 | — |
case-18 | pass→pass | 13,274 | 9,915 | -25% | 1 | 1 | 0% | 2,141 | 2,876 | +34% | 0 | 0 | — |
case-19 | pass→pass | 9,144 | 4,185 | -54% | 1 | 1 | 0% | 1,620 | 2,022 | +25% | 0 | 0 | — |
case-20 | pass→pass | 9,170 | 5,539 | -40% | 1 | 1 | 0% | 1,770 | 2,412 | +36% | 0 | 0 | — |
case-21 | pass→pass | 5,640 | 4,032 | -29% | 1 | 1 | 0% | 1,002 | 1,952 | +95% | 0 | 0 | — |
case-22 | pass→pass | 9,320 | 8,313 | -11% | 1 | 1 | 0% | 1,622 | 2,885 | +78% | 0 | 0 | — |
case-23 | pass→pass | 2,039 | 1,833 | -10% | 1 | 1 | 0% | 281 | 1,547 | +451% | 0 | 0 | — |
case-24 | pass→pass | 9,317 | 3,669 | -61% | 1 | 1 | 0% | 1,597 | 1,834 | +15% | 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. 24 cases were attempted. The headline lift of +25 percentage points is the difference between those two pass rates over the 24 comparable cases.
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.