Skills and Templates
This repository ships two reusable skills and a full personal Claude configuration template.
The skills live in skills/. The template is the repository itself: tracked files are designed to live under ~/.claude, with settings.json, hook scripts, a custom status line, and bundled plugin metadata all working together.
What ships with this repository
The tracked skills/ entries are explicitly whitelisted in .gitignore, which makes it easy to see what is part of the shared setup:
# This config integrates into ~/.claude so we must be explicit about what we track
*
# skills/
!skills/
!skills/agent-browser/
!skills/agent-browser/SKILL.md
!skills/docsfy-generate-docs/
!skills/docsfy-generate-docs/SKILL.md
That gives you three main building blocks:
skills/agent-browser/SKILL.mdfor browser automationskills/docsfy-generate-docs/SKILL.mdfor docsfy-powered documentation generation- A personal Claude configuration template built around
settings.json,scripts/,statusline.sh, and.claude-plugin/marketplace.json
Note: There is no separate “template file.” The repository layout itself is the template, and several paths in
settings.jsonassume these files are available under~/.claude.
Browser automation skill
The agent-browser skill is for tasks where Claude needs to drive a real browser: testing flows, filling forms, taking screenshots, recording demos, or extracting page data.
Its front matter makes the intent clear:
---
name: agent-browser
description: >-
Automates browser interactions for web testing, form filling, screenshots,
and data extraction. Use when the user needs to navigate websites, interact
with web pages, fill forms, take screenshots, test web applications, or
extract information from web pages.
allowed-tools: Bash(agent-browser:*)
---
Quick start
The skill recommends a simple loop: open a page, inspect the interactive elements, act on those element references, and re-snapshot when the page changes.
agent-browser open <url> # Navigate to page
agent-browser snapshot -i # Get interactive elements with refs
agent-browser click @e1 # Click element by ref
agent-browser fill @e2 "text" # Fill input by ref
agent-browser close # Close browser
What it can do
You can use agent-browser for a lot more than basic clicking:
- Navigate with
open,back,forward, andreload - Inspect the page with
snapshot, including interactive-only mode - Interact with elements using refs like
@e1 - Read content with
get text,get html,get value, andget attr - Capture screenshots, PDFs, videos, traces, and console output
- Work with cookies, storage, tabs, windows, frames, and network routing
- Save and restore browser state between sessions
Here are a few examples pulled directly from the skill:
agent-browser screenshot path.png
agent-browser screenshot --full
agent-browser pdf output.pdf
agent-browser record start ./demo.webm
agent-browser record stop
agent-browser state save auth.json
agent-browser state load auth.json
agent-browser --session test1 open site-a.com
agent-browser session list
agent-browser find role button click --name "Submit"
agent-browser find text "Sign In" click
agent-browser find label "Email" fill "user@test.com"
Practical workflow
For most UI tasks, the best pattern is:
- Open the page.
- Run
agent-browser snapshot -i. - Use the returned refs such as
@e1and@e2. - Re-run
snapshot -iafter navigation or a large DOM update.
Tip:
snapshot -iis the default starting point for real work. It gives you stable references for the elements Claude should interact with.
The skill also supports JSON output when you want machine-readable results:
agent-browser snapshot -i --json
agent-browser get text @e1 --json
Note: Video recording starts a fresh browser context but preserves cookies and storage from your session, so it is useful for clean demos without forcing you to log in again.
docsfy documentation generation skill
The docsfy-generate-docs skill is for creating AI-generated documentation for a Git repository using the docsfy CLI and a running docsfy server.
The skill is opinionated in a useful way: it treats documentation generation as a workflow, not just a single command.
Prerequisites
Before generating anything, the skill checks two things:
docsfy --help
docsfy health
If docsfy is missing, the skill points to:
uv tool install docsfy
If the server is unavailable, the skill tells you to check or initialize the docsfy configuration:
docsfy-server
docsfy config show
docsfy config init
Generation workflow
The core generation command is:
docsfy generate <repo_url> --branch <branch> --provider <provider> --model <model> --watch [--force]
A few details matter here:
- The skill always uses
--watchso progress is visible in real time. - The repository is passed as a Git URL, not a local folder.
- The provider and model are not guessed.
Note: The skill explicitly says to ask for the AI provider and model instead of hardcoding them. The supported provider examples in the skill are
claude,gemini, andcursor.
Branching and download
Once generation reaches ready, the skill creates a docs branch before downloading the generated files:
git fetch origin <branch>
git checkout -B docs/docsfy-<project_name> origin/<branch>
Then it downloads the generated documentation:
docsfy download <project_name> --branch <branch> --provider <provider> --model <model> --output <output_dir>
The docsfy output arrives in a nested folder, so the skill flattens it:
ls <output_dir>/<project>-<branch>-<provider>-<model>/
mv <output_dir>/<project>-<branch>-<provider>-<model>/* <output_dir>/ || true
mv <output_dir>/<project>-<branch>-<provider>-<model>/.* <output_dir>/ 2>/dev/null || true
rm -rf <output_dir>/<project>-<branch>-<provider>-<model>
Warning: The skill expects a nested download directory and removes it after flattening. If that folder does not exist, your project name, branch, provider, or model probably does not match the generation job you started.
GitHub Pages support
When the target repository is on GitHub, the skill can check whether GitHub Pages is already serving from docs/:
gh api repos/<owner>/<repo>/pages --jq '.source' 2>/dev/null
If Pages is not configured, the skill can set it up like this:
gh api repos/<owner>/<repo>/pages -X POST -f "source[branch]=<branch>" -f "source[path]=/docs"
If Pages is serving from docs/, the skill also supports a follow-up step: simplifying the root README.md so it points readers to the generated docs site.
Tip: This skill is best when you want a fast first version of a docs site for an existing repository. It already accounts for generation, branching, download, Pages checks, and post-generation cleanup.
The personal Claude configuration template
The repository is built as a reusable ~/.claude setup. You can see that directly in settings.json, where the hooks and status line call scripts from ~/.claude:
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "uv run ~/.claude/scripts/rule-injector.py"
}
]
}
],
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/scripts/session-start-check.sh",
"timeout": 5000
}
]
}
]
},
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh",
"padding": 0
}
What this template gives you
If you adopt this template, you get:
- Session startup checks for required tools and plugins
- Prompt-time rule injection
- Command guardrails for Python, pip, and pre-commit
- Git branch and PR protection for commit and push operations
- A custom status line
- Desktop notifications
- Bundled marketplace plugins
Session startup checks
Every session runs scripts/session-start-check.sh. It checks for:
uvas a critical dependencyghwhen the current repo uses GitHubjqgawkprekwhen.pre-commit-config.yamlexistsmcplfor MCP Launchpad- critical review plugins:
pr-review-toolkit,superpowers, andfeature-dev
A representative excerpt:
# CRITICAL: uv - Required for Python hooks
if ! command -v uv &>/dev/null; then
missing_critical+=("[CRITICAL] uv - Required for running Python hooks
Install: https://docs.astral.sh/uv/")
fi
# OPTIONAL: mcpl - MCP Launchpad (always check)
if ! command -v mcpl &>/dev/null; then
missing_optional+=("[OPTIONAL] mcpl - MCP Launchpad for MCP server access
Install: https://github.com/kenneth-liao/mcp-launchpad")
fi
This means the template does more than define preferences. It checks whether the environment can actually support the workflows it expects.
Prompt injection and guardrails
The template uses a UserPromptSubmit hook to add an orchestration reminder before each request. It also uses PreToolUse hooks to block unsafe or off-pattern commands.
The rule-enforcer.py hook blocks direct Python, pip, and pre-commit usage:
# Allow uv/uvx commands
if cmd.startswith(("uv ", "uvx ")):
return False
# Block direct python/pip
forbidden = ("python ", "python3 ", "pip ", "pip3 ")
return cmd.startswith(forbidden)
def is_forbidden_precommit_command(command: str) -> bool:
"""Check if command uses pre-commit directly instead of prek."""
cmd = command.strip().lower()
# Block direct pre-commit commands
return cmd.startswith("pre-commit ")
In practice, that means this template expects you to use:
uv run ...instead ofpython ...uvx ...for one-off Python CLI toolsprek ...instead ofpre-commit ...
Warning: If you are used to typing
python,pip, orpre-commitdirectly, this template will stop you. That is intentional.
Git safety
The Git protection hook is another important part of the template. Its own docstring summarizes the behavior well:
"""PreToolUse hook - prevents commits and pushes on protected branches.
This hook intercepts git commit and push commands and blocks them if:
1. The current branch is already merged into the main branch
2. The current branch is the main/master branch itself
Allows commits on:
- Unmerged branches
- Amended commits that haven't been pushed yet
"""
For GitHub repositories, it also checks whether the current branch already has a merged PR by using gh pr list --head <branch> --state merged. If that PR is already merged, further commits and pushes from the same branch are blocked.
This is backed up by the test suite in tests/test_git_protection.py, so the behavior is enforced and verified rather than just described.
Status line and notifications
The custom status line is wired through settings.json and built in statusline.sh. It shows the current directory, optional SSH user and host, Git branch, active virtual environment, model name, context usage, and line-change totals.
A shortened excerpt from statusline.sh:
# Add directory name
status_parts+=("$dir_name")
# Add git branch if in a git repository
if git rev-parse --git-dir >/dev/null 2>&1; then
branch=$(git branch --show-current 2>/dev/null || echo "detached")
status_parts+=("$branch")
fi
status_parts+=("$model_name")
if [ -n "$context_pct" ]; then
status_parts+=("(${context_pct}%)")
fi
The notification hook uses notify-send and jq, so desktop notifications are part of the template too.
Plugin marketplace entries
The repository publishes three bundled plugins through .claude-plugin/marketplace.json:
| Plugin | Description |
|---|---|
myk-github |
GitHub operations, including PR reviews, releases, review handling, and CodeRabbit rate limits |
myk-review |
Local code review and review database operations |
myk-acpx |
Multi-agent prompt execution through acpx |
The myk-acpx plugin is especially useful if you want to send the same prompt to multiple coding agents. Its command file includes examples like:
/myk-acpx:prompt codex fix the tests
/myk-acpx:prompt cursor review this code
/myk-acpx:prompt gemini explain this function
/myk-acpx:prompt codex --exec summarize this repo
/myk-acpx:prompt cursor,codex review this code
/myk-acpx:prompt cursor,gemini,codex --peer review the architecture
Note: The
myk-acpxcommand supports multiple agents, but--fix,--peer, and--exechave compatibility rules. For example, multi-agent mode cannot be combined with--fix.
Template defaults worth knowing about
A few defaults in settings.json are easy to miss but matter in daily use:
"env": {
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1"
}
The template also keeps a large enabledPlugins list turned on, including official review, language server, and setup plugins alongside the myk-* plugins.
Tip: When you customize the template, keep the directory structure stable under
~/.claude. The hook and status-line paths are hardcoded around that layout.
Customizing this template safely
Two details are especially important if you plan to extend the setup.
First, settings.json includes this reminder:
"_scriptsNote": "Script entries must be duplicated in both permissions.allow and allowedTools arrays. When adding new scripts, update BOTH locations."
Second, the repository uses an allowlist-style .gitignore, which means local-only files can live beside tracked files without being committed by accident.
That is a good fit for personal configuration because you can keep:
- shared, reusable config in version control
- machine-specific or experimental files untracked
Validation and maintenance
This repository validates the template with tests and pre-commit tooling.
tox.toml runs the Python test suite through uv:
skipsdist = true
envlist = ["unittests"]
[env.unittests]
description = "Run pytest tests"
deps = ["uv"]
commands = [["uv", "run", "--group", "tests", "pytest", "tests"]]
The pre-commit configuration covers formatting, linting, type checking, documentation linting, and secret scanning. Included tools and hooks include:
ruffruff-formatmypyflake8markdownlintdetect-secretsgitleaks- standard
pre-commit-hookschecks such as merge conflicts, docstrings, TOML, and EOF fixes
Tip: In this setup, use
prekinstead of callingpre-commitdirectly. That matches the template’s guardrails and avoids therule-enforcer.pyblock.
Summary
Use this repository when you want both reusable skills and a structured personal Claude setup.
Use the skills when you need Claude to:
- drive a browser with
agent-browser - generate project documentation with
docsfy
Use the template when you want Claude to:
- start with environment checks
- follow consistent tool rules
- avoid unsafe Git operations
- surface more context in the status line
- work with a curated plugin set
If you keep the ~/.claude layout intact, the pieces fit together cleanly and give you a configuration that is practical for day-to-day use, not just a collection of isolated files.