Skip to content
Back to skills

Local Cli Tools

ASecurity

Use when user mentions bookmarks, knowledge management, notes, saving URLs, or taking screenshots - provides quick reference for km (Zettelkasten notes), bookmark (URL manager), and shot-scraper (automated website screenshots) CLI tools installed on this system

  • 666 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added February 9, 2026
developmentjavascriptpythongojavashellbashdockertestinggitapi

Works with

  • cli
  • api

Security analysis

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

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

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill local-cli-tools --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Local Cli Tools?

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

Security grade badge for Local Cli Tools
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-local-cli-tools/badge)](https://www.skillsdirectory.com/skills/majiayu000-local-cli-tools)

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: local-cli-tools
description: Use when user mentions bookmarks, knowledge management, notes, saving URLs, or taking screenshots - provides quick reference for km (Zettelkasten notes), bookmark (URL manager), and shot-scraper (automated website screenshots) CLI tools installed on this system
---

# Local CLI Tools

## Overview

User has three CLI tools installed and ready to use: `km` for knowledge management, `bookmark` for URL management, and `shot-scraper` for automated website screenshots. Use these commands directly - they're in PATH.

**REQUIRED:** Always use the correct tool:
- `km new` for notes and knowledge management
- `bookmark add` for saving URLs to read/reference later (NOT for screenshots)
- `shot-scraper` for ANY screenshot, capture, or visual image of a website

**CRITICAL DISTINCTIONS:**
- User wants to READ/REFERENCE content later → `bookmark add`
- User wants SCREENSHOT/VISUAL/IMAGE of website → `shot-scraper`
- User says "screenshot", "capture", "take a picture", "grab an image" → `shot-scraper` (NEVER bookmark)

**Screenshots are NOT bookmarks. Bookmarks are NOT screenshots. These are different tools for different purposes.**

## Quick Reference

| Task | Command | Notes |
|------|---------|-------|
| Save bookmark | `bookmark add URL` | Auto-extracts title, generates summary |
| List bookmarks | `bookmark list` | Shows recent bookmarks |
| Search bookmarks | `bookmark search QUERY` | Semantic search via embeddings |
| Create note | `km new "Title"` | Opens editor for Zettelkasten note |
| Search notes | `km find QUERY` | Full-text search through notes |
| List notes | `km ls` | Shows recent notes |
| Browse notes | `km graph` | Interactive TUI browser |
| Screenshot webpage | `shot-scraper URL` | Automated website screenshot |
| Multiple screenshots | `shot-scraper multi shots.yaml` | Batch screenshot generation |
| Execute JavaScript | `shot-scraper javascript URL` | Scrape data via JS execution |
| Add documents | Copy to `/home/ags/paperless-ngx/consume/` | Auto-processed by Paperless-ngx |

## Bookmark Manager (`bookmark`)

**Location:** `/home/ags/.local/bin/bookmark`
**Backend:** API running on localhost:8000

```bash
# Add a bookmark (automatically fetches title and summary)
bookmark add https://example.com/article

# List recent bookmarks
bookmark list

# Search bookmarks (uses semantic search with embeddings)
bookmark search "docker security"

# Mark bookmark as read
bookmark mark BOOKMARK_ID read
```

**Features:**
- Automatic title extraction via Jina AI
- AI-generated 2-3 sentence summaries (Claude Haiku)
- Semantic search via embeddings
- Read/inbox status tracking

## Knowledge Management (`km`)

**Location:** `/home/ags/.cargo/bin/km`
**Storage:** Git-backed Zettelkasten notes

```bash
# Create new note (opens editor)
km new "Docker Security Best Practices"

# Create note with content via stdin
km new "Quick Note" << 'EOF'
# Quick Note
Content here
Tags: #docker #security
EOF

# Search notes by content
km find docker

# List recent notes
km ls

# Browse note graph interactively
km graph

# Show specific note
km show NOTE_ID

# Sync to remote
km sync
```

**Note Format:**
- Markdown files
- Use `#tags` for categorization
- Wikilinks `[[other-note]]` for connections
- Backed by git for version control

## Screenshot Automation (`shot-scraper`)

**THIS IS THE SCREENSHOT TOOL - Use this for ANY website screenshot request**

**Installation:** `pip install shot-scraper && shot-scraper install`
**Built on:** Playwright for reliable browser automation

**When to use:** User asks to screenshot/capture/grab image of ANY website - simple or complex

```bash
# Basic screenshot (auto-names file based on URL)
shot-scraper https://datasette.io/

# Screenshot with custom height
shot-scraper https://github.com/simonw/shot-scraper -h 900

# Screenshot specific element
shot-scraper https://example.com --selector ".main-content"

# Multiple screenshots from YAML config
shot-scraper multi screenshots.yaml

# Execute JavaScript and capture data
shot-scraper javascript https://example.com "
  return {
    title: document.title,
    links: Array.from(document.querySelectorAll('a')).length
  }
"

# Generate PDF instead of screenshot
shot-scraper pdf https://example.com -o output.pdf

# Wait for element before capturing
shot-scraper https://example.com --wait 2000

# Set viewport size
shot-scraper https://example.com --width 1280 --height 720

# Capture with authentication
shot-scraper auth https://app.example.com
shot-scraper https://app.example.com  # Uses saved auth
```

**Common YAML config (screenshots.yaml):**
```yaml
- url: https://example.com
  output: homepage.png
  height: 800

- url: https://example.com/about
  output: about.png
  selector: ".content"

- url: https://example.com/dashboard
  output: dashboard.png
  wait: 2000
```

**Features:**
- CSS selector-based element targeting
- JavaScript execution for data scraping
- Custom wait conditions and delays
- PDF generation from webpages
- Authentication workflow support
- Retina/high-DPI support
- GitHub Actions integration
- Transparent backgrounds
- Batch processing via YAML config

**Use cases:**
- Documentation screenshots
- Dashboard archiving
- Visual regression testing
- Web scraping with JS
- Automated report generation

**HANDLES COMPLEX CASES:** shot-scraper supports multiple pages, custom selectors, wait conditions, viewports - everything you need. Don't write custom Playwright/Puppeteer scripts.

## Paperless-ngx Document Management

**Location:** `/home/ags/paperless-ngx`
**URL:** https://n8n.gstoehl.dev

### Adding Documents

```bash
# Copy files to consume directory for automatic processing
cp ~/Downloads/invoice.pdf /home/ags/paperless-ngx/consume/

# Or use docker exec for management commands
cd /home/ags/paperless-ngx
docker compose exec webserver python manage.py COMMAND
```

### Common Management Commands

```bash
# Export all documents
docker compose exec webserver python manage.py document_exporter /usr/src/paperless/export

# Query documents via Python shell
docker compose exec webserver python manage.py shell_plus --plain -c "
from documents.models import Document
print('Total documents:', Document.objects.count())
"

# Create superuser account
docker compose exec webserver python manage.py createsuperuser
```

## When User Says...

| User Request | Execute This | Never |
|--------------|--------------|-------|
| "Save/add bookmark" | `bookmark add URL` | Not curl, not API |
| "Search bookmarks" | `bookmark search "X"` | Not grep |
| "Create/make/write a note" | `km new "Title"` | Not echo >, not touch |
| "Find/search notes" | `km find X` | Not grep |
| "Screenshot/capture website" | `shot-scraper URL` | Not manual browser, not puppeteer script |
| "Take screenshots of pages" | `shot-scraper multi config.yaml` | Not custom script |
| "Add PDF to paperless" | `cp FILE /home/ags/paperless-ngx/consume/` | Not docker cp |

**User says "note" → You run `km new`**
**User says "bookmark" → You run `bookmark add`**
**User says "screenshot" → You run `shot-scraper URL`**

## Red Flags - STOP and Use Correct Tool

If you find yourself doing ANY of these, STOP immediately and use the correct tool:

- About to suggest `bookmark add` when user asked for screenshot → Use `shot-scraper`
- Thinking "maybe they don't really need a screenshot" → User knows what they want, use `shot-scraper`
- Writing Puppeteer/Playwright code → Use `shot-scraper`
- Creating YAML config but then suggesting custom script → Use `shot-scraper multi config.yaml`
- Asking user to clarify screenshot vs bookmark → User said screenshot, use `shot-scraper`
- Suggesting manual browser screenshot → Use `shot-scraper`

**All of these mean: Execute `shot-scraper` immediately**

## Don't - No Exceptions

- ❌ Use curl to call the bookmark API directly (use `bookmark` CLI)
- ❌ Use Python script paths like `/home/ags/bookmark-manager/cli/bookmark_cli.py` (use `bookmark` command)
- ❌ Create standalone .md files (use `km new`)
- ❌ Download HTML files (use `bookmark add`)
- ❌ Write custom Puppeteer/Playwright scripts (use `shot-scraper`)
- ❌ Manual browser screenshots (use `shot-scraper`)
- ❌ "Complex requirements justify custom script" (shot-scraper handles it)
- ❌ Use `bookmark add` when user asks for screenshots (bookmark ≠ screenshot)
- ❌ Suggest "better alternatives" to screenshot requests (user knows what they want)
- ❌ "Time pressure justifies skipping tools" (tools are faster)
- ❌ Navigate to tool directories to run scripts (tools are in PATH)
- ❌ Provide multiple alternatives (use the proper tool)
- ❌ Ask which approach to use (execute the command)
- ❌ Explore directories to find tools (use commands directly)

**No matter how urgent:** Use `bookmark add` for URLs, `km new` for notes, and `shot-scraper` for screenshots. These commands take 2 seconds.

## Commands Are Installed

All three commands are installed in PATH:
- `bookmark` → `/home/ags/.local/bin/bookmark`
- `km` → `/home/ags/.cargo/bin/km`
- `shot-scraper` → Installed via pip

**Always use the command name directly. Never use full paths or Python scripts.**

## Common Mistakes

| Mistake | Why Wrong | Correct Approach |
|---------|-----------|------------------|
| Create ~/note.md directly | Bypasses km's git tracking, search index, graph | Use `km new "Title"` |
| Use Python script path | Not the installed command | Use `bookmark` command |
| curl to localhost:8000 | Bypasses CLI features | Use `bookmark` command |
| Write Puppeteer script | Reinvents shot-scraper, slower setup | Use `shot-scraper URL` |
| Manual browser screenshots | Not automatable, not repeatable | Use `shot-scraper` |
| User asks for screenshot, you use `bookmark add` | Screenshots and bookmarks are different things | Use `shot-scraper` for screenshots |
| "Complex case needs custom code" | shot-scraper handles selectors, waits, batches | Use `shot-scraper multi` with YAML |
| "Quick note, skip km" | Loses searchability, git history | Always use `km new` |
| Provide alternatives | Decision paralysis | Execute the proper command |

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.