Skip to content
Back to skills

Write Tutorial

ASecurity

Create a Tutorial class with interactive steps and track registration

  • 74 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 12, 2026
documentationtypescriptshelldocumentation

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 12, 2026

npx -y skills add datagrok-ai/public --skill write-tutorial --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Write Tutorial?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Write Tutorial
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/datagrok-ai-write-tutorial/badge)](https://www.skillsdirectory.com/skills/datagrok-ai-write-tutorial)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: write-tutorial
description: Create a Tutorial class with interactive steps and track registration
when-to-use: When user asks to create a tutorial, interactive guide, or learning material
effort: medium
---

# Write Tutorial

Help the user create an interactive tutorial that educates users about Datagrok platform features.

## Usage
```
/write-tutorial [tutorial-name] [--package <package-name>] [--track <track-name>]
```

## Instructions

### 1. Install the tutorials library

The package must depend on `@datagrok-libraries/tutorials`:

```shell
npm install @datagrok-libraries/tutorials
```

### 2. Create the Tutorial subclass

Create a TypeScript file (e.g., `src/tutorials/custom-tutorial.ts`) with a class extending `Tutorial`:

```typescript
import {Tutorial} from '@datagrok-libraries/tutorials';

export class CustomTutorial extends Tutorial {
  get name(): string { return 'Custom Tutorial'; }
  get description(): string { return 'Teaches users about a feature'; }

  protected async _run(): Promise<void> {
    // Define steps using this.action() and helper methods
    // Steps are event-based and can include interactive hints
  }
}
```

Key points:
- Override `name` and `description` getters.
- Implement the `_run` method with a sequence of steps.
- Steps use the `action` method or helper methods that call it internally.
- Steps can include interactive hints and detailed descriptions.

### 3. Register the tutorial in package.ts

Add a registration function with metadata annotations:

```typescript
import {CustomTutorial} from './tutorials/custom-tutorial';

//tags: tutorial
//meta.icon: images/custom-tutorial.png
//meta.name: Custom Tutorial
//meta.track: Test Track
//description: This tutorial illustrates a new feature
//output: object
export function registerTutorial() {
  return new CustomTutorial();
}
```

#### Required annotations

| Annotation  | Description                                                       |
|-------------|-------------------------------------------------------------------|
| `tags`      | Must include `tutorial`                                           |
| `meta.name` | Display name of the tutorial                                      |
| `output`    | Must be `object` (returns a Tutorial instance)                    |

#### Optional annotations

| Annotation    | Description                                                     |
|---------------|-----------------------------------------------------------------|
| `meta.track`  | Track name this tutorial belongs to. If omitted, a new track is created for the package. If an existing track name is used, the tutorial is added to that track (even from another package). |
| `meta.icon`   | Path to icon relative to package root. Default icon used if absent. |
| `description` | Displayed in the tutorial UI. Empty description if absent.       |

### 4. Register a track (optional)

To define a custom track that groups tutorials:

```typescript
import {Track} from '@datagrok-libraries/tutorials';

//tags: track
//help-url: https://datagrok.ai/help
//output: object
//meta.name: Test Track
export function registerTrack() {
  return new Track('Test Track', [], 'https://datagrok.ai/help');
}
```

Track registration annotations:
- `tags: track` (required)
- `meta.name` (required): track display name
- `help-url` (required): link to documentation
- `output: object` (required)

### 5. Control visibility of standard tutorials

The `Tutorials` package provides default tracks (e.g., Exploratory Data Analysis, Data Access). Their visibility can be controlled at the user group level via package settings.

### 6. Build and publish

```shell
webpack
grok publish dev
```

## Behavior

- Ask the user for the tutorial name, description, target package, and which track it should belong to.
- Ask what interactive steps the tutorial should include.
- Generate the Tutorial subclass with `_run` implementation.
- Add the registration function to `package.ts` with correct annotations.
- If the user wants a new track, also generate the track registration function.
- Ensure the `@datagrok-libraries/tutorials` dependency is present in `package.json`.
- Remind the user that without `meta.track`, tutorials get their own package-specific track.
- Follow project coding conventions: no excessive comments, no curly brackets for one-line if/for, catch/else if on new lines.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.