CLI for Huly project management
Project description
huly-cli
Python CLI for interacting with a Huly workspace from the terminal.
Features
Full CRUD support for the core Huly entities:
| Command | list | get | create | update | delete | describe |
|---|---|---|---|---|---|---|
projects |
x | x | ||||
issues |
x | x | x | x | x | x |
documents |
x | x | x | x | x | x |
components |
x | x | x | x | x | |
milestones |
x | x | x | x | x | |
templates |
x | x | x | |||
labels |
x | x | x | x | x | |
members |
x |
Additional capabilities:
- Issue descriptions & document content: read and write rich-text content via the Collaborator RPC. Markdown is converted to/from ProseMirror JSON automatically.
- Issue fields: priority, status, assignee, due date, component, and labels
(repeatable
--labelflag on create/update) - Status filtering:
issues list --status <name>resolves against the live workspace status index, supporting custom statuses - JSON mode:
huly --json <command>for machine-readable output - Self-upgrade:
huly upgradeto update from PyPI - Shell completion:
huly --install-completion
Prerequisites
- Python
3.11+ uv(only needed for source-checkout development)- A Huly account with access to the target workspace
Install
Option 1: Install from PyPI
The package name is huly-cli. The executable is huly.
Recommended: pipx (standalone CLI install)
pipx creates an isolated environment per tool and
puts the executable on PATH automatically.
pipx install huly-cli
huly --help
Upgrade:
pipx upgrade huly-cli
# or: huly upgrade
Alternative: pip (virtualenv or CI)
pip install huly-cli
Option 2: Use from a source checkout
- Install dependencies, including dev tools:
uv sync --extra dev
- Copy the example environment file:
cp .env.example .env
- Edit
.envwith at least:
HULY_URLHULY_WORKSPACE
- Run commands with
uv run hulyinstead ofhuly.
Environment Variables
The CLI loads config in this order:
- CLI flags (
--url,--workspace) - Environment variables
.envin the current directory~/.config/huly/config.toml
Supported variables:
HULY_URLHULY_WORKSPACEHULY_EMAILHULY_PASSWORD
Auth cache location:
- Config:
~/.config/huly/config.toml - Tokens:
~/.config/huly/auth.json
The token cache is reused automatically. If the cached token expires, the CLI
needs HULY_EMAIL and HULY_PASSWORD available to re-authenticate.
Login
Source checkout? Replace
hulybelow withuv run huly.
Interactive login
huly --url https://huly.example.com --workspace my-ws auth login
You will be prompted for email and password. Then confirm:
huly auth status
Login using .env
Put all four values in .env:
HULY_URL=https://huly.example.com
HULY_WORKSPACE=my-ws
HULY_EMAIL=you@example.com
HULY_PASSWORD=your-password
Then run:
huly auth login
huly auth status
Usage Examples
Projects
huly projects list
huly projects get DEMO
Issues
# List and filter
huly issues list --project DEMO --limit 10
huly issues list --status backlog --assignee john
# Create
huly issues create --project DEMO --title "Fix login bug" \
--priority high --status todo --assignee "Jane" \
--due-date 2025-06-01 --component "Auth" --label "bug"
# Update
huly issues update DEMO-1 --status done --priority low
huly issues update DEMO-1 --due-date 2025-07-01 --component "API"
huly issues update DEMO-1 --label "sprint-3"
# Read/write descriptions
huly issues describe DEMO-1
huly issues describe DEMO-1 --set "## Updated description"
huly issues describe DEMO-1 --set-file ./description.md
huly issues describe DEMO-1 --raw # show ProseMirror JSON
# Delete
huly issues delete DEMO-1
Documents
huly documents list --space "Engineering"
huly documents create --space "Engineering" --title "Design Doc"
huly documents describe DOC_ID --set "# Design\n\nContent here."
huly documents describe DOC_ID --set-file ./doc.md
huly documents update DOC_ID --title "Updated Title"
huly documents delete DOC_ID
Components
huly components list --project DEMO
huly components create --project DEMO --label "Auth Service" --description "Handles auth"
huly components update COMP_ID --label "Renamed" --description "Updated"
huly components delete COMP_ID
Milestones
huly milestones list --project DEMO
huly milestones create --project DEMO --label "v1.0" --status planned --target-date 2025-06-01
huly milestones update MS_ID --status completed
huly milestones delete MS_ID
Labels
huly labels list
huly labels create --title "bug" --color 1
huly labels update LABEL_ID --title "critical-bug"
huly labels delete LABEL_ID
Templates
huly templates list --project DEMO
huly templates get TEMPLATE_ID
huly templates describe TEMPLATE_ID
huly templates describe TEMPLATE_ID --set "## Template description"
Members
huly members list
JSON mode
huly --json projects list
huly --json issues list --project DEMO --limit 5
huly --json issues describe DEMO-1
Smoke Testing
The repo includes an automated smoke runner:
uv run python scripts/live_smoke.py # read-only checks
uv run python scripts/live_smoke.py --allow-writes # CRUD checks with cleanup
Local Test Suite
uv run --extra dev pytest -q
Packaging and PyPI
The package is published on PyPI as huly-cli.
pipx install huly-cli
Or with pip in a virtualenv or CI:
pip install huly-cli
For the maintainer release checklist, see RELEASE.md.
CLI Help
huly --help
huly issues --help
huly issues create --help
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file huly_cli-0.1.6.tar.gz.
File metadata
- Download URL: huly_cli-0.1.6.tar.gz
- Upload date:
- Size: 115.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29f4b9759ea8e0de9f42c0b536001b44cae976fce66d9419af263fb4672db692
|
|
| MD5 |
f19a9e88ee80f6302470f3743826de0e
|
|
| BLAKE2b-256 |
160914e4881821e8af36bf3f80ad6745df580030b5ca0bc489af1787003cd07b
|
Provenance
The following attestation bundles were made for huly_cli-0.1.6.tar.gz:
Publisher:
publish-pypi.yml on teslakoile/huly-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
huly_cli-0.1.6.tar.gz -
Subject digest:
29f4b9759ea8e0de9f42c0b536001b44cae976fce66d9419af263fb4672db692 - Sigstore transparency entry: 1326140321
- Sigstore integration time:
-
Permalink:
teslakoile/huly-cli@50bd2141e8019d459c03cc99aafb2aa224938d0c -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/teslakoile
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50bd2141e8019d459c03cc99aafb2aa224938d0c -
Trigger Event:
push
-
Statement type:
File details
Details for the file huly_cli-0.1.6-py3-none-any.whl.
File metadata
- Download URL: huly_cli-0.1.6-py3-none-any.whl
- Upload date:
- Size: 49.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b4002e2af96f9ffbf273b1fa42e9b292d8d7bc3b00ecad47802df31e3c5d1d8
|
|
| MD5 |
cc35ba4a997c75cbd86e74862b978897
|
|
| BLAKE2b-256 |
0b55a4ecaed7ffda010dd7d793bae5ff30ef9e2fda481578915fdd75823599ff
|
Provenance
The following attestation bundles were made for huly_cli-0.1.6-py3-none-any.whl:
Publisher:
publish-pypi.yml on teslakoile/huly-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
huly_cli-0.1.6-py3-none-any.whl -
Subject digest:
3b4002e2af96f9ffbf273b1fa42e9b292d8d7bc3b00ecad47802df31e3c5d1d8 - Sigstore transparency entry: 1326140394
- Sigstore integration time:
-
Permalink:
teslakoile/huly-cli@50bd2141e8019d459c03cc99aafb2aa224938d0c -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/teslakoile
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50bd2141e8019d459c03cc99aafb2aa224938d0c -
Trigger Event:
push
-
Statement type: