# Powerchord: Concurrent CLI task runner
[](https://pypi.org/project/powerchord)
[](https://pypi.org/project/powerchord/#history)
[](https://pypi.org/project/powerchord)
## Installation
```commandline
pip install powerchord
```
## Usage
Run a number of tasks:
```commandline
$ powerchord -t "ruff check ." pytest mypy
✔ ruff check . 21.075 ms
✔ mypy 166.433 ms
✔ pytest 187.096 ms
```
Tasks can be labeled by passing them as NAME=COMMAND values:
```commandline
$ powerchord -t lint="ruff check ." test=pytest typing=mypy
To do:
• lint ruff check .
• test pytest
• typing mypy
Results:
✔ lint 48.452 ms
✔ typing 202.403 ms
✔ test 286.231 ms
```
Verbosity can be specified for all output, for successful tasks and for failed tasks by setting log levels:
```commandline
$ powerchord -t "ruff chekc ." pytest mypy -l all=info success=info fail=error
✘ ruff chekc . 126.852 ms
chekc:1:1: E902 No such file or directory (os error 2)
Found 1 error.
✔ pytest 255.197 ms
.. [100%]
2 passed in 0.03s
✔ mypy 542.490 ms
Success: no issues found in 11 source files
✘ Failed tasks: ['ruff chekc .']
```
For all options see the help:
```commandline
powerchord -h
```
Config can also be specified in `pyproject.toml`:
Tasks:
```toml
[tool.powerchord]
tasks = ["command --arg", "...", "..."]
```
Labeled tasks:
```toml
[tool.powerchord.tasks]
task = "command --foo bar /path/to/happiness"
other-task = "..."
you-get-the-idea = "..."
```
Log levels:
```toml
[tool.powerchord.log_levels]
all = "info" # "debug" | "info" | "warning" | "error" | "critical" | ""
success = "" # log level of successful task output
fail = "error" # log level of failed task output
```
Raw data
{
"_id": null,
"home_page": null,
"name": "powerchord",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "task runner, cli utility, concurrency",
"author": "Huib Piguillet",
"author_email": "huib@proton.me",
"download_url": "https://files.pythonhosted.org/packages/aa/17/689e026f053d601bfc0cdbe304b87a7572643c285d9dbc37c886597890c5/powerchord-0.2.6.tar.gz",
"platform": null,
"description": "# Powerchord: Concurrent CLI task runner\n\n[](https://pypi.org/project/powerchord)\n[](https://pypi.org/project/powerchord/#history)\n[](https://pypi.org/project/powerchord)\n\n## Installation\n\n```commandline\npip install powerchord\n```\n\n## Usage\n\nRun a number of tasks:\n\n```commandline\n$ powerchord -t \"ruff check .\" pytest mypy\n\u2714 ruff check . 21.075 ms\n\u2714 mypy 166.433 ms\n\u2714 pytest 187.096 ms\n```\n\nTasks can be labeled by passing them as NAME=COMMAND values:\n\n```commandline\n$ powerchord -t lint=\"ruff check .\" test=pytest typing=mypy\nTo do:\n\u2022 lint ruff check .\n\u2022 test pytest\n\u2022 typing mypy\n\nResults:\n\u2714 lint 48.452 ms\n\u2714 typing 202.403 ms\n\u2714 test 286.231 ms\n```\n\nVerbosity can be specified for all output, for successful tasks and for failed tasks by setting log levels:\n\n```commandline\n$ powerchord -t \"ruff chekc .\" pytest mypy -l all=info success=info fail=error\n\u2718 ruff chekc . 126.852 ms\nchekc:1:1: E902 No such file or directory (os error 2)\nFound 1 error.\n\n\u2714 pytest 255.197 ms\n.. [100%]\n2 passed in 0.03s\n\n\u2714 mypy 542.490 ms\nSuccess: no issues found in 11 source files\n\n\n\u2718 Failed tasks: ['ruff chekc .']\n```\n\nFor all options see the help:\n\n```commandline\npowerchord -h\n```\n\nConfig can also be specified in `pyproject.toml`:\n\nTasks:\n```toml\n[tool.powerchord]\ntasks = [\"command --arg\", \"...\", \"...\"]\n```\n\nLabeled tasks:\n```toml\n[tool.powerchord.tasks]\ntask = \"command --foo bar /path/to/happiness\"\nother-task = \"...\"\nyou-get-the-idea = \"...\"\n```\n\nLog levels:\n```toml\n[tool.powerchord.log_levels]\nall = \"info\" # \"debug\" | \"info\" | \"warning\" | \"error\" | \"critical\" | \"\"\nsuccess = \"\" # log level of successful task output\nfail = \"error\" # log level of failed task output \n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Concurrent CLI task runner",
"version": "0.2.6",
"project_urls": {
"Github": "https://github.com/githuib/powerchord",
"PyPI": "https://pypi.org/project/powerchord/"
},
"split_keywords": [
"task runner",
" cli utility",
" concurrency"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4bfcd5b26aa3e6ef86be60277d88276312df9721b6a2645806978fb5b3725444",
"md5": "af4eae272daf41974f42a6b77652d35c",
"sha256": "2148f51c4aaeb670f8c1fc136f09277e39481253b738eefc67e7fa1724ae9ffa"
},
"downloads": -1,
"filename": "powerchord-0.2.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "af4eae272daf41974f42a6b77652d35c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 9075,
"upload_time": "2025-10-16T16:37:57",
"upload_time_iso_8601": "2025-10-16T16:37:57.452986Z",
"url": "https://files.pythonhosted.org/packages/4b/fc/d5b26aa3e6ef86be60277d88276312df9721b6a2645806978fb5b3725444/powerchord-0.2.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa17689e026f053d601bfc0cdbe304b87a7572643c285d9dbc37c886597890c5",
"md5": "ff218fc84d9cce4fd1860eea9b1633ee",
"sha256": "b26bb842a10e1db349942073cfd9b5532a256b88731d4e6f197f99c5ecb10105"
},
"downloads": -1,
"filename": "powerchord-0.2.6.tar.gz",
"has_sig": false,
"md5_digest": "ff218fc84d9cce4fd1860eea9b1633ee",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 7862,
"upload_time": "2025-10-16T16:37:58",
"upload_time_iso_8601": "2025-10-16T16:37:58.740929Z",
"url": "https://files.pythonhosted.org/packages/aa/17/689e026f053d601bfc0cdbe304b87a7572643c285d9dbc37c886597890c5/powerchord-0.2.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-16 16:37:58",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "githuib",
"github_project": "powerchord",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "powerchord"
}