Skip to content
Productivity
Command

/walkthrough

Create a guided walkthrough for a feature or workflow.

From plugin
nimbalyst
2.1k54 skills3 agents54 commands3 MCP
> /plugin marketplace add nimbalyst/nimbalyst
> /plugin install nimbalyst-wiki@nimbalyst

Command definition

walkthrough.md
packageVersion: 1.0.0
packageId: core
description: Create a guided walkthrough for a feature or workflow.

Create a walkthrough guide for: {{arg1}}

Overview

Create a multi-step walkthrough that highlights UI elements and guides users through a feature. Walkthroughs appear as floating callouts attached to UI elements.

Reference Documentation

Read `docs/WALKTHROUGHS.md` for the complete guide on the walkthrough system architecture, including trigger configuration, step definitions, and testing.

Steps

1. Understand the Feature

Identify what feature or workflow the walkthrough should cover:

  • What is the user trying to accomplish?
  • What UI elements are involved?
  • What's the logical order of steps?

2. Ensure HelpContent Exists

**Walkthroughs should pull content from HelpContent** - never hardcode text.

For each step target, check if HelpContent exists:

  • Look in `packages/electron/src/renderer/help/HelpContent.ts`
  • If missing, add it first (use `/tooltip` command or add manually)

3. Ensure Target Elements Have `data-testid`

Each step needs to target a UI element. Check that targets have `data-testid`:

  • **If missing**: Add a descriptive `data-testid` to the element
  • Use kebab-case: `my-feature-button`, `settings-panel-toggle`
  • Be descriptive and stable (don't change these IDs once added)

4. Create Walkthrough Definition

Create a new file in `packages/electron/src/renderer/walkthroughs/definitions/`:

// my-feature-intro.ts
import type { WalkthroughDefinition } from '../types';
import { getHelpContent } from '../../help';

// Pull content from HelpContent registry
const featureHelp = getHelpContent('my-feature-button')!;
const relatedHelp = getHelpContent('my-related-button')!;

export const myFeatureIntro: WalkthroughDefinition = {
  id: 'my-feature-intro',           // Unique ID (kebab-case)
  name: 'My Feature Introduction',   // Human-readable name
  version: 1,                        // Increment to re-show after updates
  trigger: {
    screen: 'agent',                 // 'files' | 'agent' | '*'
    condition: () => {               // Optional: only show when condition is true
      return document.querySelector('[data-testid="my-feature-button"]') !== null;
    },
    delay: 2000,                     // Wait for UI to settle (ms)
    priority: 10,                    // Lower = higher priority (default: 10)
  },
  steps: [
    {
      id: 'step-1',
      target: { testId: 'my-feature-button' },  // Target by data-testid
      title: featureHelp.title,                  // From HelpContent
      body: featureHelp.body,
      shortcut: featureHelp.shortcut,
      placement: 'right',                        // 'top' | 'bottom' | 'left' | 'right'
    },
    {
      id: 'step-2',
      target: { testId: 'my-related-button' },
      title: relatedHelp.title,
      body: relatedHelp.body,
      placement: 'bottom',
      visibilityCondition: () => {              // Optional: skip if not visible
        return document.querySelector('[data-testid="my-related-button"]') !== null;
      },
    },
  ],
};

5. Register the Walkthrough

Add the export to `packages/electron/src/renderer/walkthroughs/definitions/index.ts`:

import { myFeatureIntro } from './my-feature-intro';

export const walkthroughs: WalkthroughDefinition[] = [
  // ... existing walkthroughs
  myFeatureIntro,
];

6. Update Documentation

**IMPORTANT**: Keep the walkthrough inventory up to date in `docs/WALKTHROUGHS.md`.

Update the inventory table near the top of the file with the new walkthrough:

| ID | Name | Steps | Screen | Priority | Trigger Condition | | --- | --- | --- | --- | --- | --- | | ... existing entries ... | | `my-feature-intro` | My Feature Introduction | 2 | agent | 10 | Feature button is visible |

The inventory table is the single source of truth for all walkthroughs. It includes:

  • **ID**: The unique identifier used in code
  • **Name**: Human-readable name for analytics/menus
  • **Steps**: Number of steps in the walkthrough
  • **Screen**: Which mode triggers it (files, agent, or any)
  • **Priority**: Higher number = higher priority (shows first when multiple are eligible)
  • **Trigger Condition**: Plain-English description of when it appears

7. Test the Walkthrough

Use dev helpers in the browser console:

// Reset state to see walkthrough again
window.__walkthroughHelpers.resetState()

// Start the specific walkthrough
window.__walkthroughHelpers.startWalkthrough('my-feature-intro')

// Check current state
window.__walkthroughHelpers.getState()

Definition Reference

WalkthroughDefinition

| Field | Type | Description | | --- | --- | --- | | `id` | string | Unique identifier (kebab-case) | | `name` | string | Human-readable display name | | `version` | number | Increment to re-show to users who completed it | | `trigger.screen` | 'files' \| 'agent' \| '*' | Which mode triggers it | | `trigger.condition` | () => boolean | Additional condition (optional) | | `trigger.delay` | number | Delay before showing in ms (optional) | | `trigger.priority` | number | Lower = higher priority, default 10 | | `steps` | WalkthroughStep[] | Array of steps |

WalkthroughStep

| Field | Type | Description | | --- | --- | --- | | `id` | string | Unique step identifier | | `target.testId` | string | Target element's data-testid (preferred) | | `target.selector` | string | CSS selector fallback | | `title` | string | Step title (from HelpContent) | | `body` | string | Step description (from HelpContent) | | `shortcut` | string | Keyboard shortcut (optional) | | `placement` | 'top' \| 'bottom' \| 'left' \| 'right' | Callout position | | `visibilityCondition` | () => boolean | Skip step if returns false (optional) | | `action` | { label, onClick } | Action button (optional) |

Best Practices

Content

  • **Keep it short**: 2-4 steps maximum. Users abandon long walkthroughs.
  • **Focus on discovery**: Highlight
Read more
@nimbalyst
Ships withnimbalyst

Nimbalyst - The open-source visual workspace for Claude Code, Codex, and OpenCode. Run multiple coding agents in parallel, edit their work visually in markdown, mockups, and diagrams, and track tasks. Free, MIT-licensed desktop app for macOS, Windows, Linux, with mobile companion for iOS and Android.

2.1k16 skills3 agents3 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
2.1k
Star history of nimbalyst/nimbalyst on GitHub, a chart by star-history.com

Other commands on nimbalyst.

analyze-sessions

analyze-sessions

Command

Audit recent AI coding sessions to find repeated mistakes, speed losses, and missed Nimbalyst tool usage — then propose harness…

@nimbalyst@nimbalystInstall Command
audit-updates

audit-updates

Command

Triage pnpm audit findings and produce a prioritized, supply-chain-cautious package-update plan, then apply approved batches

@nimbalyst@nimbalystInstall Command
autofix-issues

autofix-issues

Command

Survey recently triaged GitHub issues, propose the ones safe to fix without a product decision, and fan the selected ones out to…

@nimbalyst@nimbalystInstall Command

More commands from other plugins.

analyze-cohorts

analyze-cohorts

Command

Perform cohort analysis on user data — retention curves, feature adoption, and engagement trends

@phuryn@phurynInstall Command
again

again

Command

PUA Again — 用于再试试、换个方法、别放弃、为什么还不行、同一路径失败多次;要求停止微调同一思路,改用本质不同方案。

pua2mo20k
@tanweai@tanweaiInstall Command