AgentSkillsCN

bashticle

从 Markdown 博客文章中,通过流式文本、命令执行与用户交互,创建互动式的 Bash 文章(Bashticles)。

SKILL.md
--- frontmatter
name: bashticle
description: Create interactive bash articles (bashticles) from markdown blog posts with streaming text, command execution, and user interaction

Bashticle

Transform markdown blog posts into interactive bash scripts that users can read and execute directly from their terminal.

When to Use

Use this skill when a user asks to:

  • "Create a bashticle from this markdown"
  • "Turn this article into an interactive bash script"
  • "Make a terminal-based interactive article"
  • "Convert blog.md to a bash article"

Two-Phase Approach

Bashticle creation uses a two-phase approach:

Phase 1: Generator Script (Boring, Structural)

The bashticle-generator.sh script does the structural work:

bash
# Run the generator
bashticle-generator.sh article.md
# Or with custom output:
bashticle-generator.sh article.md --output-file custom.sh

What it does:

  • Parses markdown for structure (title, sections)
  • Generates basic bashticle with STANDARD options only
  • Creates section function stubs
  • Builds main navigation flow

Standard options included:

  • --step - Jump to specific section
  • --run-command / -r - Execute commands vs echo
  • --dry-run / -d - Echo only (default: ON)
  • --stream / -s - Enable streaming (default: ON)
  • --verbose / -v - Verbose output

Phase 2: AI (Smart, Context-Aware)

The AI (via this skill) enhances the bashticle:

  1. Read both files: Original markdown + generated bashticle
  2. Use parseArger parse to add article-specific options:
    bash
    parseArger parse bashticle.sh --inplace \
      --opt 'ai-provider "AI provider" --short p --default-value "openrouter"' \
      --opt 'ai-model "AI model" --short m' \
      --opt 'api-key "API key" --short k' \
      --opt 'project-name "Project name"' \
      --opt 'reasoning "Reasoning tokens" --default-value "4096"'
    
  3. Fill in section functions with actual content
  4. Convert code blocks to command arrays with proper variable injection

What Gets Generated

A .sh file with:

  • parseArger CLI - Full argument parsing with sensible defaults
  • Helper functions - stream_text, print_section, prompt_continue, run_cmd, show_cmd
  • Section stubs - One function per markdown section (AI fills these)
  • Main flow - Navigation with --step support

Example Workflow

bash
# Step 1: Generate basic structure
bashticle-generator.sh article.md

# Step 2: AI enhances it (via this skill)
# - Adds article-specific options with parseArger parse
# - Fills in section content
# - Converts code blocks to command arrays

Converting Markdown to Bash

Sections (## headers)

Each ## or ### header becomes a bash function:

markdown
## Getting Started
Content here...

Generated stub:

bash
show_getting_started() {
  print_section "Getting Started"
  # TODO: AI fills this in with actual content
  prompt_continue
}

AI fills in:

bash
show_getting_started() {
  print_section "Getting Started"

  stream_text "Content here..."

  # Convert code blocks to command arrays
  local init_cmd=(npm install)
  show_cmd "Install dependencies" npm install
  run_cmd "${init_cmd[@]}"

  prompt_continue
}

Code Blocks (```bash)

Code blocks are converted to command arrays with variable injection:

markdown
```bash
npx task-o-matic@latest init --project-name my-project
code

AI converts to:
```bash
local init_cmd=(
  npx task-o-matic@latest init
  --project-name "$_arg_project_name"  # Variable injection
)
run_cmd "${init_cmd[@]}"

Helper Functions

bash
stream_text "text" [delay]           # Typewriter effect (5ms default)
print_section "title"                # Cyan section header
print_subsection "title"             # Yellow subsection
prompt_continue                      # Green "Press Enter" prompt
run_cmd arg1 arg2 ...               # Execute or echo based on flags
show_cmd "explanation" cmd ...      # Display command with description

Available Variables

Variables from CLI arguments (after AI adds them):

bash
$_arg_ai_provider     # --ai-provider value (if AI article)
$_arg_ai_model        # --ai-model value (if AI article)
$_arg_api_key         # --api-key value (if AI article)
$_arg_project_name    # --project-name value (if applicable)
$_arg_reasoning       # --reasoning value (if AI article)
$_arg_stream          # --stream flag
$_arg_run_command     # --run-command flag
$_arg_dry_run         # --dry-run flag
$_arg_verbose         # --verbose flag
$_arg_step            # Section to jump to

Color Scheme

  • Cyan (36): Section headers
  • Yellow (33): Subsections
  • Green (32): User prompts
  • Magenta (35): Commands
  • White (37): Explanations
  • Gray (90): Dry-run messages

Examples

Generator creates:

bash
show_init() {
  print_section "Initialization"
  # TODO: AI fills this in
  prompt_continue
}

AI converts to:

bash
show_init() {
  print_section "Initialization"

  stream_text "Let's initialize the project..."
  echo ""

  show_cmd "Initialize with task-o-matic" \
    npx task-o-matic@latest init init \
    --project-name "$_arg_project_name" \
    --frontend tanstack-router

  run_cmd npx task-o-matic@latest init init \
    --project-name "$_arg_project_name" \
    --frontend tanstack-router

  echo ""
  stream_text "Project initialized!"
  echo ""

  prompt_continue
}

Running Generated Bashticles

bash
# View help
./bashticle.sh --help

# Run full article (dry-run mode - default)
./bashticle.sh

# Jump to specific section
./bashticle.sh init

# Run with actual command execution (use in test directory!)
./bashticle.sh --run-command --ai-provider anthropic

# Disable streaming for faster output
./bashticle.sh --no-stream

Implementation Notes

What the Generator Does (Deterministic)

  • Extract title from frontmatter or first heading
  • Find all ## and ### sections
  • Generate basic parseArger CLI with standard options
  • Create section function stubs
  • Build main navigation flow
  • Always include helper functions

What the AI Does (Context-Aware)

  • Analyze article content to determine needed options
  • Use parseArger parse to add relevant CLI options
  • Fill in section functions with actual content
  • Convert code blocks to command arrays
  • Inject CLI variables into commands appropriately
  • Handle article-specific patterns and conventions

Files

  • Generator: scripts/bashticle-generator.sh
  • Example bashticle: apps/web/content/blog/Black hole/From ralph to Eric/bashticle.sh
  • Helpers reference: references/helpers.md