Our review
This skill enforces using Task commands instead of direct Go commands to build, test, lint, and run the Shizuku application.
Strengths
- Ensures command consistency across developers and CI
- Prevents mistakes from running Go directly
- Provides a single entry point for all build operations
- Simplifies argument passing with the -- separator
Limitations
- Only applicable to the Shizuku project
- Requires Task to be installed in the environment
- May be overkill for trivial one-off Go commands
Use this skill whenever you need to build, run, lint, or test the Shizuku application.
Do not use it when you need to run a Go command not covered by Task, or when you want fine-grained control without Task.
Security analysis
SafeOnly instructs running typical build tool commands (task build, lint, test, run) via a task runner; no destructive, exfiltrating, or obfuscated actions are specified.
No concerns found
Examples
Build the Shizuku project using the task runner.Run the Shizuku app with the 'sync' command and verbose output.Run tests for the internal/shizukuconfig package in the Shizuku project.name: task description: Build, test, lint, or run the shizuku application. ALWAYS use this skill instead of invoking Go commands or out/shizuku directly.
Shizuku Task Runner
This project uses Task (taskfile.dev) as its build system. You MUST always use task commands instead of invoking Go commands directly.
Critical Rule
NEVER run these commands directly:
go buildgo rungo fmtgo test
ALWAYS use the corresponding task commands below.
Available Commands
Build
Compiles the shizuku binary to out/shizuku.
task build
What it does: Runs go build -o out/shizuku cmd/main.go
Run
Runs the application with arguments.
task run -- <args>
Examples:
task run -- init
task run -- sync
task run -- sync --verbose
task run -- --help
What it does: Runs go run cmd/main.go with the provided arguments
Lint
Formats all Go code in the project.
task lint
What it does: Runs go fmt ./... across the codebase
Test
Runs all tests or specific tests with optional arguments.
# Run all tests
task test
# Run tests for a specific package
task test -- ./internal/shizukuconfig
# Run a specific test
task test -- -run TestLoadConfig ./internal/shizukuconfig
# Run tests with verbose output
task test -- -v ./...
What it does: Runs go test with the provided arguments (defaults to ./...)
Usage Pattern
When you need to:
- Build the binary → Use
task build - Run the app → Use
task run -- <args> - Format code → Use
task lint - Run tests → Use
task test(with optional-- <args>)
Why Use Task?
- Source tracking - Task watches Go source files and only rebuilds when needed
- Consistency - All developers and CI use the same commands
- Simplicity - Single entry point for all build operations
- Project standard - This is the established pattern for this codebase
Passing Arguments
When passing arguments to task run or task test, always use the -- separator:
task run -- arg1 arg2 # Correct
task run arg1 arg2 # Wrong - task will interpret these as task flags
task test -- -v ./... # Correct
task test -v ./... # Wrong
Integration with Development Workflow
- After creating or modifying code, run
task lintto format - Run
task testto ensure tests pass - Run
task buildto compile the binary - Run
task run -- syncto test the built functionality
Automatic Invocation
This skill should be invoked automatically whenever:
- You're about to build the project
- You're about to run the application
- You're about to format code
- You're about to run tests
Always default to task commands. If you catch yourself about to use go build, go run, go fmt, or go test, STOP and use the appropriate task command instead.
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.