agentCLAWHUBUnverified

tutorial-updates

Generates or updates tutorials from VHS tapes and Playwright specs with dual-tone markdown and GIF recording Skill: tutorial-updates Owner: athola Summary: Generates or updates tutorials from VHS tapes and Playwright specs with dual-tone markdown and GIF recording Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:17.158Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:17.600Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:05.764Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:05:52.000Z | user Release v1.

OpenClaw

Rank

62

Safety

84

Downloads

1.6k

Updated

Oct 10, 2026

Version

1.9.19

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.6K downloadsadoption · observed Oct 10, 2026
Latest release
1.9.19release · observed Aug 26, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-sanctum-tutorial-updates
  1. Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
  2. Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-tutorial-updates/snapshot"

Documentation

CLAWHUB

144,040 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: tutorial-updates
description: |
  Generates or updates tutorials from VHS tapes and Playwright specs with dual-tone markdown and GIF recording
version: 1.9.8
triggers:
  - tutorial
  - gif
  - vhs
  - playwright
  - documentation
  - demo
  - tutorial assets need refreshing
metadata: {"openclaw": {"homepage": "https://github.com/athola/claude-night-market/tree/master/plugins/sanctum", "emoji": "\ud83e\udd9e", "requires": {"config": ["night-market.sanctum:shared", "night-market.sanctum:git-workspace-review", "night-market.scry:vhs-recording", "night-market.scry:browser-recording", "night-market.scry:gif-generation", "night-market.scry:media-composition"]}}}
source: claude-night-market
source_plugin: sanctum
---

> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.


## Table of Contents

- [Overview](#overview)
- [Command Options](#command-options)
- [Required TodoWrite Items](#required-todowrite-items)
- [Phase 1: Discovery (`tutorial-updates:discovery`)](#phase-1:-discovery-(tutorial-updates:discovery))
- [Step 1.1: Locate Tutorial Assets](#step-11:-locate-tutorial-assets)
- [Step 1.2: Parse Manifests](#step-12:-parse-manifests)
- [Step 1.3: Handle Options](#step-13:-handle-options)
- [Phase 1.5: Validation (`tutorial-updates:validation`)](#phase-15:-validation-(tutorial-updates:validation))
- [Step 1.5.1: VHS Syntax Validation](#step-151:-vhs-syntax-validation)
- [Step 1.5.2: Extract and Validate CLI Commands](#step-152:-extract-and-validate-cli-commands)
- [Step 1.5.3: Verify Demo Data Exists](#step-153:-verify-demo-data-exists)
- [Step 1.5.4: Test Commands Locally](#step-154:-test-commands-locally)
- [Validation Flags](#validation-flags)
- [Validation Exit Criteria](#validation-exit-criteria)
- [Phase 1.6: Binary Rebuild (`tutorial-updates:rebuild`)](#phase-16:-binary-rebuild-(tutorial-updates:rebuild))
- [Step 1.6.1: Detect Build System](#step-161:-detect-build-system)
- [Step 1.6.2: Check Binary Freshness](#step-162:-check-binary-freshness)
- [Step 1.6.3: Rebuild Binary](#step-163:-rebuild-binary)
- [Step 1.6.4: Verify Binary Accessibility](#step-164:-verify-binary-accessibility)
- [Rebuild Flags](#rebuild-flags)
- [Rebuild Exit Criteria](#rebuild-exit-criteria)
- [Phase 2: Recording (`tutorial-updates:recording`)](#phase-2:-recording-(tutorial-updates:recording))
- [Step 2.1: Process Tape Components](#step-21:-process-tape-components)
- [Step 2.2: Process Browser Components](#step-22:-process-browser-components)
- [Step 2.3: Handle Multi-Component Tutorials](#step-23:-handle-multi-component-tutorials)
- [Phase 3: Generation (`tutorial-updates:generation`)](#phase-3:-generation-(tutorial-updates:generation))
- [Step 3.1: Parse Tape Annotations](#step-31:-parse-tape-annotations)
- [Step 3.2: Generate Dual-Tone Markdown](#step-32:-generate-dual-tone-mark

_meta.json

{
  "ownerId": "kn7d107jg9jv602h9ytsegydq184a42s",
  "slug": "nm-sanctum-tutorial-updates",
  "version": "1.9.19",
  "publishedAt": 1787750477158
}

modules/manifest-parsing.md

# Manifest Parsing Module

Parse `.manifest.yaml` files and tape file annotations for tutorial orchestration.

## Manifest Schema

Tutorial manifests define multi-component tutorials with composition rules:

```yaml
# Full manifest schema
name: string              # Required: identifier for the tutorial
title: string             # Optional: human-readable title
description: string       # Optional: brief description

components:               # Required: list of media components
  - type: tape            # Component type: tape, playwright, static
    source: path/to.tape  # Path to source file (relative to manifest)
    output: path/to.gif   # Path for generated output
    options:              # Optional: component-specific options
      fps: 10
      width: 800

  - type: playwright
    source: browser/spec.ts
    output: assets/gifs/browser.gif
    requires:             # Optional: commands to run before
      - "npm run serve"

  - type: static          # Pre-existing asset (no generation)
    source: existing.gif
    output: existing.gif

combine:                  # Optional: composition rules
  output: combined.gif    # Path for combined output
  layout: vertical        # Layout: vertical, horizontal, sequential, grid, pip
  options:
    padding: 10
    background: "#1a1a2e"
```

## Component Types

### Tape Components

VHS tape files for terminal recordings:

```yaml
- type: tape
  source: quickstart.tape
  output: assets/gifs/quickstart.gif
  options:
    # Override tape file settings if needed
    width: 1000
    height: 500
```

### Playwright Components

Browser automation specs:

```yaml
- type: playwright
  source: browser/mcp-dashboard.spec.ts
  output: assets/gifs/mcp-browser.gif
  requires:
    - "skrills serve"
  options:
    fps: 12
    width: 1280
```

The `requires` array specifies commands to run before the spec. These run as background processes and are terminated after recording.

### Static Components

Pre-existing assets that don't need generation:

```yaml
- type: static
  source: diagrams/architecture.gif
  output: diagrams/architecture.gif
```

## Parsing Tape File Annotations

Tape files contain inline annotations for documentation generation:

### Annotation Format

```tape
# @title: Tutorial Title
# @description: Brief description for README

# @step Step Name
# @docs-brief Concise text for project docs
# @book-detail Extended explanation for technical book
Type "command"
Enter
```

### Annotation Types

| Annotation | Scope | Purpose |
|------------|-------|---------|
| `@title` | File | Tutorial title |
| `@description` | File | Brief description |
| `@step` | Block | Step heading |
| `@docs-brief` | Block | Concise docs text |
| `@book-detail` | Block | Extended book text |

### Parsing Algorithm

```python
def parse_tape_annotations(tape_content: str) -> dict:
    """Parse tape file for documentation annotations."""
    result = {
        "title": None,
        "description": None,
        "steps": []
    }

   

modules/markdown-generation.md

# Markdown Generation Module

Generate dual-tone markdown documentation from tape file annotations and manifest metadata.

## Dual-Tone System

Tutorials are generated in two tones for different audiences:

| Tone | Location | Audience | Style |
|------|----------|----------|-------|
| **Project Docs** | `docs/tutorials/` | Users getting started | Concise, action-oriented |
| **Technical Book** | `book/src/tutorials/` | Developers learning deeply | Detailed, educational |

## Annotation Sources

Content comes from tape file annotations:

```tape
# @step Install the CLI
# @docs-brief Install via cargo with a single command
# @book-detail The recommended installation method uses cargo, Rust's package manager. This validates you get the latest stable release with all dependencies properly resolved. For development builds or specific versions, you can also install from source.
Type "cargo install skrills"
```

- `@docs-brief` - Used for project docs (brief, focused)
- `@book-detail` - Used for technical book (extended, contextual)
- If only one is present, use it for both
- If neither is present, generate minimal text from step name

## Project Docs Format

### Template Structure

```markdown
# {Tutorial Title}

{Description from @description}

![Demo]({relative-path-to-gif})

## Prerequisites

- Prerequisite 1
- Prerequisite 2

## Steps

### {Step 1 Name}

{@docs-brief content}

```bash
{command from Type directive}
```

### {Step 2 Name}

{@docs-brief content}

```bash
{command}
```

## Next Steps

- Link to related tutorial 1
- Link to related tutorial 2
```

### Example Output

```markdown
# Quickstart

Install, validate, analyze, and serve in under a minute.

![Quickstart demo](../../assets/gifs/quickstart.gif)

## Prerequisites

- Rust toolchain installed (`rustup`)
- Terminal with UTF-8 support

## Steps

### Install skrills

Install via cargo with a single command.

```bash
cargo install skrills
```

### Validate Skills

Validate and auto-fix missing frontmatter.

```bash
skrills validate --target codex --autofix
```

### Analyze Token Usage

Analyze skills for token optimization opportunities.

```bash
skrills analyze --min-tokens 500 --suggestions
```

### Start MCP Server

Start the MCP server.

```bash
skrills serve
```

## Next Steps

- [Sync Workflow](./sync.md) - Bidirectional sync between Claude Code and Codex CLI
- [MCP Integration](./mcp.md) - Use skrills as an MCP server
```

## Technical Book Format

### Template Structure

```markdown
# {Tutorial Title}

{Extended description}

## Overview

{Context and learning objectives}

![Demo]({relative-path-to-gif})

## {Step 1 Name}

{@book-detail content - multiple paragraphs allowed}

```bash
{command from Type directive}
```

{Additional explanation of what the command does}

## {Step 2 Name}

{@book-detail content}

```bash
{command}
```

{Explanation of output and next steps}

## Summary

{Key takeaways}

## Further Reading

- Internal link 1
- External reference 1
```

### Example O

modules/tape-validation.md

# Tape Validation Module

Pre-flight validation for VHS tape files before GIF generation. Validate commands work correctly and demo data exists BEFORE running the time-consuming VHS recording.

## Overview

This module catches errors early:
- Stale binaries detected before recording (Phase 0)
- Invalid CLI flags discovered before GIF generation
- Missing demo data detected before recording starts
- VHS syntax issues reported before execution

## Validation Phases

### Phase 0: Binary Freshness Check

**CRITICAL**: Verify the CLI binary matches the latest source code. Stale binaries produce misleading demos.

```bash
# Check if binary is older than Git HEAD
check_binary_freshness() {
  local binary_name="$1"

  # Locate binary in PATH
  local binary_path=$(which "$binary_name" 2>/dev/null)

  if [ -z "$binary_path" ]; then
    echo "WARNING: Binary '$binary_name' not found in PATH"
    return 1
  fi

  # Get binary modification time (Linux/macOS compatible)
  local binary_mtime
  binary_mtime=$(stat -c %Y "$binary_path" 2>/dev/null || \
                 stat -f %m "$binary_path" 2>/dev/null)

  # Get Git HEAD commit time
  local git_head_time=$(git log -1 --format=%ct 2>/dev/null)

  if [ -z "$git_head_time" ]; then
    echo "WARNING: Not a git repository, skipping freshness check"
    return 2
  fi

  # Compare timestamps
  if [ "$binary_mtime" -lt "$git_head_time" ]; then
    echo "STALE: Binary is older than Git HEAD"
    echo "  Binary: $(date -d @$binary_mtime 2>/dev/null || date -r $binary_mtime)"
    echo "  HEAD:   $(date -d @$git_head_time 2>/dev/null || date -r $git_head_time)"
    echo ""
    echo "RECOMMENDATION: Rebuild binary before recording tape"
    echo "  cargo install --path crates/cli --locked"
    return 1
  else
    echo "OK: Binary is up-to-date with Git HEAD"
    return 0
  fi
}
```

**Error handling**:
- Exit code 0: Binary is fresh
- Exit code 1: Binary is stale (older than HEAD)
- Exit code 2: Cannot determine (not in git repo or binary not found)

**Integration**:
```bash
# Run before tape validation
check_binary_freshness "skrills"
if [ $? -eq 1 ]; then
  echo "ERROR: Stale binary detected"
  echo "Run 'cargo install --path crates/cli --locked' to rebuild"
  exit 1
fi
```

## Command Validation Phases

### 1. VHS Syntax Validation

Check that the tape file has valid VHS syntax:

```bash
# Required: Output directive
grep -q '^Output ' "$tape_file" || echo "ERROR: Missing Output directive"

# Check for balanced quotes in Type directives
grep '^Type ' "$tape_file" | while read -r line; do
  # Count quotes (should be even)
  quote_count=$(echo "$line" | tr -cd '"' | wc -c)
  if [ $((quote_count % 2)) -ne 0 ]; then
    echo "ERROR: Unbalanced quotes in: $line"
  fi
done
```

**Error examples**:
- "Missing Output directive in quickstart.tape:1"
- "Unbalanced quotes in Type directive at quickstart.tape:15"

### 2. Command Extraction

Parse `Type` directives to extract shell commands:

```bash
# Extract commands from Type dir
Github ReposUpdated 15h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/athola/skills/nm-sanctum-tutorial-updates",
      "sourceUrl": "https://clawhub.ai/athola/skills/nm-sanctum-tutorial-updates",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T08:08:54.633Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-tutorial-updates/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-tutorial-updates/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T08:08:54.633Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.6K downloads",
      "href": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceUrl": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T08:08:54.633Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "1.9.19",
      "href": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceUrl": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-08-26T13:21:17.158Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-tutorial-updates/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-tutorial-updates/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 1.9.19",
      "description": "Release v1.9.19",
      "href": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceUrl": "https://clawhub.ai/athola/nm-sanctum-tutorial-updates",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-08-26T13:21:17.158Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to tutorial-updates and adjacent AI workflows.