taskfile-help


Nametaskfile-help JSON
Version 0.3.4 PyPI version JSON
download
home_pageNone
SummaryDynamic Taskfile help generator with automatic grouping and namespace support
upload_time2025-11-03 22:17:11
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords cli help task taskfile yaml
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # taskfile_help

[![CI/CD](https://github.com/royw/taskfile_help/actions/workflows/ci.yml/badge.svg)](https://github.com/royw/taskfile_help/actions/workflows/ci.yml)
[![Documentation](https://github.com/royw/taskfile_help/actions/workflows/docs.yml/badge.svg)](https://github.com/royw/taskfile_help/actions/workflows/docs.yml)
[![Python Version](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![PyPI version](https://badge.fury.io/py/taskfile-help.svg)](https://badge.fury.io/py/taskfile-help)

Dynamic Taskfile help generator.

Parses Taskfile YAML files and outputs organized, colored help text similar to
`task --list`, but with automatic grouping and namespace support.

**Links:**

- [Documentation](https://royw.github.io/taskfile_help/)
- [GitHub Repository](https://github.com/royw/taskfile_help)
- [Issue Tracker](https://github.com/royw/taskfile_help/issues)

## Why Taskfile Help?

The built-in `task --list` command is useful, but has limitations:

- No automatic grouping of related tasks
- No namespace support for multiple Taskfiles
- Limited customization options

**taskfile-help** solves these problems by providing:

- Automatic task grouping using comment markers
- Support for multiple Taskfiles with namespaces
- Flexible search paths and configuration
- JSON output for integration with other tools
- Consistent color handling (respects TTY detection)

## Integration with Taskfiles

Designed to be called from Taskfile help tasks. Here's how to integrate it into your workflow:

### Basic Setup

Add a help task to your main Taskfile:

```yaml
version: '3'

tasks:
  # === Main Tasks ===
  build:
    desc: Build the project
    cmds: [...]

  # === Help ===
  help:
    desc: Show available tasks from this Taskfile
    cmd: taskfile-help main
    silent: true  # Suppress task command echo
```

Now you can run:

```bash
task help       # Show available tasks from your main Taskfile nicely grouped and formatted
```

### Multi-Taskfile Setup

The real advantage comes when you have multiple Taskfiles with namespaces.

Start by adding a wildcard help task (help:\*): to your main Taskfile:

```yaml
version: '3'

tasks:
  # ... main tasks ...

  # === Help ===
  help:
    desc: Show available tasks from this main Taskfile
    summary: Displays tasks from this main Taskfile, nicely grouped and formatted
    cmd: taskfile-help main
    silent: true  # Suppress task command echo

  help:*:
    desc: Show available tasks for the given namespace(s)
    summary: |
      Displays tasks from for the given namespace or all Taskfiles if "all" is specified
      or list available namespaces if "?" is specified
      help:<namespace>    - Displays tasks from the given namespace
      help:all            - Displays tasks from all Taskfiles
      help:?              - Lists available namespaces
    vars:
      NAMESPACE: '{{index .MATCH 0}}'
    cmd: taskfile-help {{.NAMESPACE}}
    silent: true  # Suppress task command echo
```

Now you can run:

```bash
task help       # Main tasks only
task help:all   # All tasks from all namespaces (Main + Dev + ...)
task help:<namespace>   # Tasks from the given namespace
task help:?     # List all namespaces (Dev, Test, ...)
```

### Search Integration

You can also add a search wrapper task for convenient searching:

```yaml
  # === Search ===
  search:*:
    desc: Search for tasks
    summary: Search for tasks in all Taskfiles
    vars:
      PATTERN: '{{index .MATCH 0}}'
    cmd: taskfile-help search {{.PATTERN}}
    silent: true
```

Now you can search using the task command:

```bash
task search:python              # Search for "python"
task search:"version minor"     # Search for both "version" AND "minor"
task search:test                # Search for "test"
```

### Example Output

![task help](https://raw.githubusercontent.com/royw/taskfile_help/master/docs/images/task_help.png)

## Usage

### Namespace Command

Display tasks from a specific namespace or all namespaces:

```bash
# Show help for main Taskfile
taskfile-help namespace
taskfile-help namespace main

# Show help for a specific namespace
taskfile-help namespace dev
taskfile-help namespace rag

# Show help for all Taskfiles
taskfile-help namespace all

# List available namespaces
taskfile-help namespace ?

# With global options (can appear after subcommand)
taskfile-help namespace dev --no-color --verbose
taskfile-help namespace all --json
taskfile-help namespace --search-dirs /path/to/project
```

### Search Command

Search for tasks across namespaces, groups, task names, and descriptions:

```bash
# Search by single pattern (case-insensitive substring)
taskfile-help search test
taskfile-help search build

# Search with multiple patterns (AND logic - all must match)
taskfile-help search version bump
taskfile-help search minor version
taskfile-help search test coverage

# Search with regex filter
taskfile-help search --regex "^test"
taskfile-help search --regex ".*fix$"

# Search with multiple regexes (AND logic - all must match)
taskfile-help search --regex "test" --regex "unit"

# Combine patterns and regexes (all must match)
taskfile-help search version --regex "bump"
taskfile-help search test unit --regex "coverage"

# With global options
taskfile-help search build --no-color
taskfile-help search deploy --regex "^deploy" --json --verbose
```

### Search Behavior

- **Pattern matching**: Case-insensitive substring search
- **Regex matching**: Full regular expression support
- **Multiple patterns**: All patterns must match (AND logic)
- **Multiple regexes**: All regexes must match (AND logic)
- **Combined matching**: All patterns AND all regexes must match somewhere in the task's combined text
- **Search scope**: Searches across namespace names, group names, task names, AND descriptions
- **At least one filter required**: Must provide at least one pattern or regex
- **Results**: Shows tasks where all search criteria match in any combination of fields

### Global Options

Global options can be placed after any subcommand:

- `--no-color` - Disable colored output
- `-s, --search-dirs DIRS` - Colon-separated list of directories to search for taskfiles
- `-v, --verbose` - Show verbose output including search directories
- `--json` - Output tasks in JSON format
- `--completion SHELL` - Generate completion script for specified shell (bash, zsh, fish, tcsh, ksh)
- `--install-completion [SHELL]` - Install completion script (auto-detects shell if not specified)
- `-h, --help` - Show help message

## Shell Completion

`taskfile-help` supports tab completion for namespaces, task names, and command-line flags in multiple shells.

### Quick Install

```bash
# Auto-detect shell and install
taskfile-help --install-completion

# Or specify shell explicitly
taskfile-help --install-completion bash
```

### What Gets Completed

- **Namespaces**: `taskfile-help <TAB>` shows all available namespaces
- **Task names**: `taskfile-help test:<TAB>` shows tasks in the test namespace
- **Flags**: `taskfile-help --<TAB>` shows all command-line options

Completions are dynamic and automatically update when you add or remove Taskfiles.

For detailed installation instructions and troubleshooting, see the [Shell Completion Documentation](https://royw.github.io/taskfile_help/setup/completion/).

## Configuration

taskfile-help supports multiple configuration methods with a clear priority order.

### Configuration Files

taskfile-help supports two configuration file formats:

1. **`taskfile_help.yml`** - Dedicated YAML configuration file (takes precedence)
1. **`pyproject.toml`** - Python project configuration file (fallback)

If both files exist, `taskfile_help.yml` takes precedence.

### Configuration Matrix

| Option | CLI Flag | Environment Variable(s) | Config File | .env File | Default |
|--------|----------|------------------------|-------------|-----------|---------|
| **search-dirs** | `--search-dirs`, `-s` | `TASKFILE_HELP_SEARCH_DIRS` | `search-dirs` | ✓ | Current directory |
| **no-color** | `--no-color` | `NO_COLOR`, `TASKFILE_HELP_NO_COLOR` | `no-color` | ✓ | Auto-detect TTY |
| **group-pattern** | `--group-pattern` | `TASKFILE_HELP_GROUP_PATTERN` | `group-pattern` | ✓ | `\s*#\s*===\s*(.+?)\s*===` |
| **verbose** | `--verbose`, `-v` | - | - | - | `false` |
| **json** | `--json` | - | - | - | `false` |

**Priority Order:** Command-line > Environment Variables > Config File (taskfile_help.yml or pyproject.toml) > Defaults

### Configuration Examples

```bash
# Using command-line arguments
taskfile-help --no-color --search-dirs /path/to/project

# Using environment variables
export TASKFILE_HELP_SEARCH_DIRS=.:../shared
export NO_COLOR=1
taskfile-help

# Using .env file
cat > .env << EOF
TASKFILE_HELP_SEARCH_DIRS=.:../shared
NO_COLOR=1
EOF
taskfile-help

# Using taskfile_help.yml (recommended)
cat > taskfile_help.yml << EOF
search-dirs:
  - "."
  - "../shared"
no-color: false
group-pattern: "\\\\s*#\\\\s*===\\\\s*(.+?)\\\\s*==="
EOF
taskfile-help

# Using pyproject.toml (alternative)
[tool.taskfile-help]
search-dirs = [".", "../shared"]
no-color = true
group-pattern = "\\\\s*##\\\\s*(.+?)\\\\s*##"
```

For detailed configuration options, see the [Configuration Documentation](https://royw.github.io/taskfile_help/setup/configuration/).

## File Naming Conventions

### Main Taskfile

Supported names (matches regex `[Tt]askfile\.ya?ml`):

- `Taskfile.yml`, `Taskfile.yaml` (preferred)
- `taskfile.yml`, `taskfile.yaml`

### Namespace Taskfiles

Supported patterns (matches regex `[Tt]askfile[-_](?P<namespace>\w+)\.ya?ml`):

- `Taskfile-<namespace>.yml`, `Taskfile-<namespace>.yaml` (preferred)
- `Taskfile_<namespace>.yml`, `Taskfile_<namespace>.yaml`
- `taskfile-<namespace>.yml`, `taskfile-<namespace>.yaml`
- `taskfile_<namespace>.yml`, `taskfile_<namespace>.yaml`

Examples: `Taskfile-dev.yml`, `Taskfile_test.yaml`, `taskfile-rag.yml`

## Taskfile Discovery

- By default, searches for taskfiles in the current working directory
- Use --search-dirs (or -s) to search in one or more directories (first match wins)
- Paths can be absolute (/path/to/dir) or relative (../dir, ./subdir)
- Relative paths are resolved from the current working directory
- Taskfiles can be located anywhere in the search path(s)

## Task Organization

Tasks are automatically grouped using comment markers in the Taskfile:

```yaml
# === Group Name ===
task-name:
  desc: Task description
  cmds: [...]

task2-name:
  desc: Task2 description
  cmds: [...]

# === Group2 Name ===
```

Example groups: "Service Management", "Testing", "Build and Release"

The output preserves the order of groups and tasks as they appear in the file.

## Task Visibility

- **Public tasks**: Have a 'desc' field and no 'internal: true' flag
- **Internal tasks**: Marked with 'internal: true' (excluded from help)
- Tasks without descriptions are excluded from help output

## Taskfile Validation

taskfile-help automatically validates Taskfiles to ensure they conform to Task version 3 specification.
Validation runs on every parse and produces helpful warnings for issues, but processing continues (non-fatal).

### What is Validated

- **Version field**: Must exist and equal `'3'` (string, not number)
- **Tasks section**: Must exist and be a dictionary
- **Task structure**: Each task must be a dictionary
- **Field types**: Validates types for common fields:
  - `desc`: must be a string
  - `internal`: must be a boolean
  - `cmds`: must be a list or string
  - `deps`: must be a list

### Example Warnings

```bash
$ taskfile-help
Warning: Invalid version '2', expected '3'
Warning: Task 'build': 'desc' must be a string, got int
Warning: Task 'test': 'internal' must be a boolean, got str

# Tasks are still shown despite warnings
MAIN Task Commands:

Build:
  task build            - 123
```

### Validation Behavior

- **Always enabled**: No opt-in flag required
- **Non-fatal**: Warnings are displayed but processing continues
- **Helpful**: Clear messages explain what's wrong and where
- **Fast**: Minimal performance impact (~1-2ms per file)

All warnings are written to stderr, so they won't interfere with JSON output or piped commands.

## Output Behavior

- **Colors enabled**: When output is to a terminal (TTY) and --no-color is not specified
- **Colors disabled**: When output is piped, redirected, captured, or --no-color is used
- Matches the behavior of 'task --list'

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "taskfile-help",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "cli, help, task, taskfile, yaml",
    "author": null,
    "author_email": "Roy Wright <roy@wright.org>",
    "download_url": "https://files.pythonhosted.org/packages/27/f7/1df874db55d15729e3f1ba248b6ca4ae775886f1eda76e85337c246ae60f/taskfile_help-0.3.4.tar.gz",
    "platform": null,
    "description": "# taskfile_help\n\n[![CI/CD](https://github.com/royw/taskfile_help/actions/workflows/ci.yml/badge.svg)](https://github.com/royw/taskfile_help/actions/workflows/ci.yml)\n[![Documentation](https://github.com/royw/taskfile_help/actions/workflows/docs.yml/badge.svg)](https://github.com/royw/taskfile_help/actions/workflows/docs.yml)\n[![Python Version](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![PyPI version](https://badge.fury.io/py/taskfile-help.svg)](https://badge.fury.io/py/taskfile-help)\n\nDynamic Taskfile help generator.\n\nParses Taskfile YAML files and outputs organized, colored help text similar to\n`task --list`, but with automatic grouping and namespace support.\n\n**Links:**\n\n- [Documentation](https://royw.github.io/taskfile_help/)\n- [GitHub Repository](https://github.com/royw/taskfile_help)\n- [Issue Tracker](https://github.com/royw/taskfile_help/issues)\n\n## Why Taskfile Help?\n\nThe built-in `task --list` command is useful, but has limitations:\n\n- No automatic grouping of related tasks\n- No namespace support for multiple Taskfiles\n- Limited customization options\n\n**taskfile-help** solves these problems by providing:\n\n- Automatic task grouping using comment markers\n- Support for multiple Taskfiles with namespaces\n- Flexible search paths and configuration\n- JSON output for integration with other tools\n- Consistent color handling (respects TTY detection)\n\n## Integration with Taskfiles\n\nDesigned to be called from Taskfile help tasks. Here's how to integrate it into your workflow:\n\n### Basic Setup\n\nAdd a help task to your main Taskfile:\n\n```yaml\nversion: '3'\n\ntasks:\n  # === Main Tasks ===\n  build:\n    desc: Build the project\n    cmds: [...]\n\n  # === Help ===\n  help:\n    desc: Show available tasks from this Taskfile\n    cmd: taskfile-help main\n    silent: true  # Suppress task command echo\n```\n\nNow you can run:\n\n```bash\ntask help       # Show available tasks from your main Taskfile nicely grouped and formatted\n```\n\n### Multi-Taskfile Setup\n\nThe real advantage comes when you have multiple Taskfiles with namespaces.\n\nStart by adding a wildcard help task (help:\\*): to your main Taskfile:\n\n```yaml\nversion: '3'\n\ntasks:\n  # ... main tasks ...\n\n  # === Help ===\n  help:\n    desc: Show available tasks from this main Taskfile\n    summary: Displays tasks from this main Taskfile, nicely grouped and formatted\n    cmd: taskfile-help main\n    silent: true  # Suppress task command echo\n\n  help:*:\n    desc: Show available tasks for the given namespace(s)\n    summary: |\n      Displays tasks from for the given namespace or all Taskfiles if \"all\" is specified\n      or list available namespaces if \"?\" is specified\n      help:<namespace>    - Displays tasks from the given namespace\n      help:all            - Displays tasks from all Taskfiles\n      help:?              - Lists available namespaces\n    vars:\n      NAMESPACE: '{{index .MATCH 0}}'\n    cmd: taskfile-help {{.NAMESPACE}}\n    silent: true  # Suppress task command echo\n```\n\nNow you can run:\n\n```bash\ntask help       # Main tasks only\ntask help:all   # All tasks from all namespaces (Main + Dev + ...)\ntask help:<namespace>   # Tasks from the given namespace\ntask help:?     # List all namespaces (Dev, Test, ...)\n```\n\n### Search Integration\n\nYou can also add a search wrapper task for convenient searching:\n\n```yaml\n  # === Search ===\n  search:*:\n    desc: Search for tasks\n    summary: Search for tasks in all Taskfiles\n    vars:\n      PATTERN: '{{index .MATCH 0}}'\n    cmd: taskfile-help search {{.PATTERN}}\n    silent: true\n```\n\nNow you can search using the task command:\n\n```bash\ntask search:python              # Search for \"python\"\ntask search:\"version minor\"     # Search for both \"version\" AND \"minor\"\ntask search:test                # Search for \"test\"\n```\n\n### Example Output\n\n![task help](https://raw.githubusercontent.com/royw/taskfile_help/master/docs/images/task_help.png)\n\n## Usage\n\n### Namespace Command\n\nDisplay tasks from a specific namespace or all namespaces:\n\n```bash\n# Show help for main Taskfile\ntaskfile-help namespace\ntaskfile-help namespace main\n\n# Show help for a specific namespace\ntaskfile-help namespace dev\ntaskfile-help namespace rag\n\n# Show help for all Taskfiles\ntaskfile-help namespace all\n\n# List available namespaces\ntaskfile-help namespace ?\n\n# With global options (can appear after subcommand)\ntaskfile-help namespace dev --no-color --verbose\ntaskfile-help namespace all --json\ntaskfile-help namespace --search-dirs /path/to/project\n```\n\n### Search Command\n\nSearch for tasks across namespaces, groups, task names, and descriptions:\n\n```bash\n# Search by single pattern (case-insensitive substring)\ntaskfile-help search test\ntaskfile-help search build\n\n# Search with multiple patterns (AND logic - all must match)\ntaskfile-help search version bump\ntaskfile-help search minor version\ntaskfile-help search test coverage\n\n# Search with regex filter\ntaskfile-help search --regex \"^test\"\ntaskfile-help search --regex \".*fix$\"\n\n# Search with multiple regexes (AND logic - all must match)\ntaskfile-help search --regex \"test\" --regex \"unit\"\n\n# Combine patterns and regexes (all must match)\ntaskfile-help search version --regex \"bump\"\ntaskfile-help search test unit --regex \"coverage\"\n\n# With global options\ntaskfile-help search build --no-color\ntaskfile-help search deploy --regex \"^deploy\" --json --verbose\n```\n\n### Search Behavior\n\n- **Pattern matching**: Case-insensitive substring search\n- **Regex matching**: Full regular expression support\n- **Multiple patterns**: All patterns must match (AND logic)\n- **Multiple regexes**: All regexes must match (AND logic)\n- **Combined matching**: All patterns AND all regexes must match somewhere in the task's combined text\n- **Search scope**: Searches across namespace names, group names, task names, AND descriptions\n- **At least one filter required**: Must provide at least one pattern or regex\n- **Results**: Shows tasks where all search criteria match in any combination of fields\n\n### Global Options\n\nGlobal options can be placed after any subcommand:\n\n- `--no-color` - Disable colored output\n- `-s, --search-dirs DIRS` - Colon-separated list of directories to search for taskfiles\n- `-v, --verbose` - Show verbose output including search directories\n- `--json` - Output tasks in JSON format\n- `--completion SHELL` - Generate completion script for specified shell (bash, zsh, fish, tcsh, ksh)\n- `--install-completion [SHELL]` - Install completion script (auto-detects shell if not specified)\n- `-h, --help` - Show help message\n\n## Shell Completion\n\n`taskfile-help` supports tab completion for namespaces, task names, and command-line flags in multiple shells.\n\n### Quick Install\n\n```bash\n# Auto-detect shell and install\ntaskfile-help --install-completion\n\n# Or specify shell explicitly\ntaskfile-help --install-completion bash\n```\n\n### What Gets Completed\n\n- **Namespaces**: `taskfile-help <TAB>` shows all available namespaces\n- **Task names**: `taskfile-help test:<TAB>` shows tasks in the test namespace\n- **Flags**: `taskfile-help --<TAB>` shows all command-line options\n\nCompletions are dynamic and automatically update when you add or remove Taskfiles.\n\nFor detailed installation instructions and troubleshooting, see the [Shell Completion Documentation](https://royw.github.io/taskfile_help/setup/completion/).\n\n## Configuration\n\ntaskfile-help supports multiple configuration methods with a clear priority order.\n\n### Configuration Files\n\ntaskfile-help supports two configuration file formats:\n\n1. **`taskfile_help.yml`** - Dedicated YAML configuration file (takes precedence)\n1. **`pyproject.toml`** - Python project configuration file (fallback)\n\nIf both files exist, `taskfile_help.yml` takes precedence.\n\n### Configuration Matrix\n\n| Option | CLI Flag | Environment Variable(s) | Config File | .env File | Default |\n|--------|----------|------------------------|-------------|-----------|---------|\n| **search-dirs** | `--search-dirs`, `-s` | `TASKFILE_HELP_SEARCH_DIRS` | `search-dirs` | \u2713 | Current directory |\n| **no-color** | `--no-color` | `NO_COLOR`, `TASKFILE_HELP_NO_COLOR` | `no-color` | \u2713 | Auto-detect TTY |\n| **group-pattern** | `--group-pattern` | `TASKFILE_HELP_GROUP_PATTERN` | `group-pattern` | \u2713 | `\\s*#\\s*===\\s*(.+?)\\s*===` |\n| **verbose** | `--verbose`, `-v` | - | - | - | `false` |\n| **json** | `--json` | - | - | - | `false` |\n\n**Priority Order:** Command-line > Environment Variables > Config File (taskfile_help.yml or pyproject.toml) > Defaults\n\n### Configuration Examples\n\n```bash\n# Using command-line arguments\ntaskfile-help --no-color --search-dirs /path/to/project\n\n# Using environment variables\nexport TASKFILE_HELP_SEARCH_DIRS=.:../shared\nexport NO_COLOR=1\ntaskfile-help\n\n# Using .env file\ncat > .env << EOF\nTASKFILE_HELP_SEARCH_DIRS=.:../shared\nNO_COLOR=1\nEOF\ntaskfile-help\n\n# Using taskfile_help.yml (recommended)\ncat > taskfile_help.yml << EOF\nsearch-dirs:\n  - \".\"\n  - \"../shared\"\nno-color: false\ngroup-pattern: \"\\\\\\\\s*#\\\\\\\\s*===\\\\\\\\s*(.+?)\\\\\\\\s*===\"\nEOF\ntaskfile-help\n\n# Using pyproject.toml (alternative)\n[tool.taskfile-help]\nsearch-dirs = [\".\", \"../shared\"]\nno-color = true\ngroup-pattern = \"\\\\\\\\s*##\\\\\\\\s*(.+?)\\\\\\\\s*##\"\n```\n\nFor detailed configuration options, see the [Configuration Documentation](https://royw.github.io/taskfile_help/setup/configuration/).\n\n## File Naming Conventions\n\n### Main Taskfile\n\nSupported names (matches regex `[Tt]askfile\\.ya?ml`):\n\n- `Taskfile.yml`, `Taskfile.yaml` (preferred)\n- `taskfile.yml`, `taskfile.yaml`\n\n### Namespace Taskfiles\n\nSupported patterns (matches regex `[Tt]askfile[-_](?P<namespace>\\w+)\\.ya?ml`):\n\n- `Taskfile-<namespace>.yml`, `Taskfile-<namespace>.yaml` (preferred)\n- `Taskfile_<namespace>.yml`, `Taskfile_<namespace>.yaml`\n- `taskfile-<namespace>.yml`, `taskfile-<namespace>.yaml`\n- `taskfile_<namespace>.yml`, `taskfile_<namespace>.yaml`\n\nExamples: `Taskfile-dev.yml`, `Taskfile_test.yaml`, `taskfile-rag.yml`\n\n## Taskfile Discovery\n\n- By default, searches for taskfiles in the current working directory\n- Use --search-dirs (or -s) to search in one or more directories (first match wins)\n- Paths can be absolute (/path/to/dir) or relative (../dir, ./subdir)\n- Relative paths are resolved from the current working directory\n- Taskfiles can be located anywhere in the search path(s)\n\n## Task Organization\n\nTasks are automatically grouped using comment markers in the Taskfile:\n\n```yaml\n# === Group Name ===\ntask-name:\n  desc: Task description\n  cmds: [...]\n\ntask2-name:\n  desc: Task2 description\n  cmds: [...]\n\n# === Group2 Name ===\n```\n\nExample groups: \"Service Management\", \"Testing\", \"Build and Release\"\n\nThe output preserves the order of groups and tasks as they appear in the file.\n\n## Task Visibility\n\n- **Public tasks**: Have a 'desc' field and no 'internal: true' flag\n- **Internal tasks**: Marked with 'internal: true' (excluded from help)\n- Tasks without descriptions are excluded from help output\n\n## Taskfile Validation\n\ntaskfile-help automatically validates Taskfiles to ensure they conform to Task version 3 specification.\nValidation runs on every parse and produces helpful warnings for issues, but processing continues (non-fatal).\n\n### What is Validated\n\n- **Version field**: Must exist and equal `'3'` (string, not number)\n- **Tasks section**: Must exist and be a dictionary\n- **Task structure**: Each task must be a dictionary\n- **Field types**: Validates types for common fields:\n  - `desc`: must be a string\n  - `internal`: must be a boolean\n  - `cmds`: must be a list or string\n  - `deps`: must be a list\n\n### Example Warnings\n\n```bash\n$ taskfile-help\nWarning: Invalid version '2', expected '3'\nWarning: Task 'build': 'desc' must be a string, got int\nWarning: Task 'test': 'internal' must be a boolean, got str\n\n# Tasks are still shown despite warnings\nMAIN Task Commands:\n\nBuild:\n  task build            - 123\n```\n\n### Validation Behavior\n\n- **Always enabled**: No opt-in flag required\n- **Non-fatal**: Warnings are displayed but processing continues\n- **Helpful**: Clear messages explain what's wrong and where\n- **Fast**: Minimal performance impact (~1-2ms per file)\n\nAll warnings are written to stderr, so they won't interfere with JSON output or piped commands.\n\n## Output Behavior\n\n- **Colors enabled**: When output is to a terminal (TTY) and --no-color is not specified\n- **Colors disabled**: When output is piped, redirected, captured, or --no-color is used\n- Matches the behavior of 'task --list'\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Dynamic Taskfile help generator with automatic grouping and namespace support",
    "version": "0.3.4",
    "project_urls": {
        "Homepage": "https://github.com/royw/taskfile_help",
        "Issues": "https://github.com/royw/taskfile_help/issues",
        "Repository": "https://github.com/royw/taskfile_help"
    },
    "split_keywords": [
        "cli",
        " help",
        " task",
        " taskfile",
        " yaml"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6a6b4d5608b72db0237a550bd7142c4cb192c9decdcc5199be7f343e3ccdf7de",
                "md5": "7a3264c1d382031192d0bd4be369fd7f",
                "sha256": "fa1915b630ac2229a723900fb6bf38e800208c1e1968afc727c22683797b485e"
            },
            "downloads": -1,
            "filename": "taskfile_help-0.3.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7a3264c1d382031192d0bd4be369fd7f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 27623,
            "upload_time": "2025-11-03T22:17:09",
            "upload_time_iso_8601": "2025-11-03T22:17:09.970131Z",
            "url": "https://files.pythonhosted.org/packages/6a/6b/4d5608b72db0237a550bd7142c4cb192c9decdcc5199be7f343e3ccdf7de/taskfile_help-0.3.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "27f71df874db55d15729e3f1ba248b6ca4ae775886f1eda76e85337c246ae60f",
                "md5": "5bf772af254da7bf68cd14b57dcafcf3",
                "sha256": "e84f008f7d5d5a92315d3a8e9a09eae56cb20ef78c6f7efda2db919bb3be29e5"
            },
            "downloads": -1,
            "filename": "taskfile_help-0.3.4.tar.gz",
            "has_sig": false,
            "md5_digest": "5bf772af254da7bf68cd14b57dcafcf3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 292293,
            "upload_time": "2025-11-03T22:17:11",
            "upload_time_iso_8601": "2025-11-03T22:17:11.301812Z",
            "url": "https://files.pythonhosted.org/packages/27/f7/1df874db55d15729e3f1ba248b6ca4ae775886f1eda76e85337c246ae60f/taskfile_help-0.3.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-03 22:17:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "royw",
    "github_project": "taskfile_help",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "taskfile-help"
}
        
Elapsed time: 1.77729s