CLI for Huly project management
Project description
huly-cli
Python CLI for interacting with a Huly workspace from the terminal.
Status
This repo is currently a Python typer CLI, not a Node or pnpm project.
It has been checked against hcengineering/platform@v0.6.504 and smoke-tested against
https://huly.example.com workspace my-ws.
What is verified today:
- Authentication flow via
/_accounts - Read access for projects, issues, components, documents, templates, members, labels, and issue descriptions
- Live CRUD for issues, documents, components, and milestones on
https://huly.example.comworkspacemy-ws - Live template description update and restore flow
- Workspace-specific issue status display and status filtering
- Local unit/CLI test suite
- CI-equivalent local checks:
uv sync --extra dev,uv run ruff check .,uv run ruff format --check .,uv run pytest tests/ -v,uv run python -m build, anduv run twine check dist/*
What is not fully verified yet:
- Automated live-workspace CI has not been added
- You should still prefer a disposable project or disposable teamspace for release-time live smoke tests
Known live compatibility gaps at the time of writing:
- No known read-path breakage remains from the
v0.6.504comparison and smoke tests - No known CLI CRUD gap remains on the currently implemented issue, document, component, and milestone surfaces
- The test suite now patches auth correctly; it no longer depends on a developer's local cached login state
Compatibility Target
- Huly platform tag:
v0.6.504 - Example workspace URL used during verification:
https://huly.example.com/workbench/my-ws/tracker/PROJECT_ID/issues
Important distinction:
my-wsis the workspace slugDEMOis the project identifier in that workspace
If you run huly issues list --project MY-WS, it will fail because MY-WS is not a project ID.
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
Use this if you only want the CLI and are not modifying the source:
pip install huly-cli
huly --help
Upgrade an existing install:
pip install --upgrade huly-cli
The package name is huly-cli. The executable is huly.
If huly is not found after installing, the install directory may not be on your
PATH. Common fixes:
# Check where pip installed it
python -m site --user-base
# Typical paths to add:
# macOS/Linux: ~/.local/bin
# Windows: %APPDATA%\Python\PythonXY\Scripts
# macOS / Linux — add to your shell profile (~/.zshrc, ~/.bashrc, etc.):
export PATH="$HOME/.local/bin:$PATH"
# Or install with pipx, which handles PATH automatically:
pipx install huly-cli
Option 2: Use from a source checkout
Use this if you are developing in this repository:
- 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
- Choose one auth approach:
- Interactive login: preferred for local use
- Environment-based login: useful for non-interactive runs and token refresh
Environment Variables
The CLI loads config in this order:
- CLI flags
- 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 in order to re-authenticate automatically.
Login Walkthrough
Source checkout? Replace
hulybelow withuv run huly.
Option 1: Interactive login
This is the simplest flow if you are testing locally and do not want to keep your password
in .env.
huly --url https://huly.example.com --workspace my-ws auth login
You will be prompted for:
- Password
- Workspace slug, if it was not passed on the command line or set in
.env
Then confirm auth is valid:
huly auth status
Option 2: 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
Agent Skill
This repo includes a Codex skill for agents that need to install or operate the CLI:
- skill path:
skills/huly-cli - explicit invocation:
$huly-cli
If you want to install that skill into a Codex skills directory outside this
repo, copy or symlink it into ${CODEX_HOME:-$HOME/.codex}/skills:
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
ln -s "$(pwd)/skills/huly-cli" "${CODEX_HOME:-$HOME/.codex}/skills/huly-cli"
If you prefer a copy instead of a symlink:
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
cp -R skills/huly-cli "${CODEX_HOME:-$HOME/.codex}/skills/"
Hands-On Smoke Test
Source checkout? Replace
hulybelow withuv run huly. The repo also has an automated smoke runner:uv run python scripts/live_smoke.py(add--allow-writesfor CRUD checks with automatic cleanup).
- Confirm auth:
huly auth status
- List projects:
huly projects list
- Inspect a project:
huly projects get DEMO
- List a few issues from that project:
huly issues list --project DEMO --limit 5
- Inspect one issue:
huly issues get DEMO-1
- Read the issue description:
huly issues describe DEMO-1
- List project components:
huly components list --project DEMO --limit 5
- Inspect a component by internal ID:
huly components get COMPONENT_ID
- List a few documents:
huly documents list --limit 5
- List issue templates:
huly templates list --limit 5
- Verify status filtering:
huly issues list --status backlog --limit 5
- List workspace members:
huly members list
- List labels:
huly labels list
JSON mode
If you want machine-readable output for quick inspection:
huly --json projects list
huly --json issues list --project DEMO --limit 5
huly --json auth status
Commands That Currently Need Caution
The CLI write paths were exercised live during verification, but you should still prefer a disposable project or disposable teamspace when doing release-time smoke tests against a real workspace.
Local Test Suite
Run the unit and CLI regression tests with:
uv run --extra dev pytest -q
Expected result at the time of verification:
155 passed
Packaging And PyPI
The package is published on PyPI as huly-cli.
Install it with:
pip install huly-cli
The repo also builds a wheel and sdist cleanly and CI validates the distribution metadata.
For the maintainer release checklist and publisher configuration notes, see RELEASE.md.
CLI Help
Top-level help:
huly --help
Auth help:
huly auth login --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.2.tar.gz.
File metadata
- Download URL: huly_cli-0.1.2.tar.gz
- Upload date:
- Size: 99.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b1bbe414c89b4a1e0bcadad0499a3c26ae5e67dcea8540015d591ade09dca51
|
|
| MD5 |
14d8af0d8125da686e3ba3e01c1e77f9
|
|
| BLAKE2b-256 |
b37f8b3f65a97f90d557fbfac24a3cddf42dde154c787fefa76947508726d52b
|
Provenance
The following attestation bundles were made for huly_cli-0.1.2.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.2.tar.gz -
Subject digest:
4b1bbe414c89b4a1e0bcadad0499a3c26ae5e67dcea8540015d591ade09dca51 - Sigstore transparency entry: 1280868351
- Sigstore integration time:
-
Permalink:
teslakoile/huly-cli@69e41d32f1003e10fc54d74b339b29a06a367c1a -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/teslakoile
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@69e41d32f1003e10fc54d74b339b29a06a367c1a -
Trigger Event:
push
-
Statement type:
File details
Details for the file huly_cli-0.1.2-py3-none-any.whl.
File metadata
- Download URL: huly_cli-0.1.2-py3-none-any.whl
- Upload date:
- Size: 44.9 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 |
19e3e21084a4bbd77b5b0b963de992a10ebf4e991bd410522e2a7c306e059afd
|
|
| MD5 |
dba4a199e3c99874131bd8faf5cd5c8c
|
|
| BLAKE2b-256 |
b5b59143f73818298e8cf2852fdc2c02a21222053f4c225fdb659fc7e81a2c37
|
Provenance
The following attestation bundles were made for huly_cli-0.1.2-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.2-py3-none-any.whl -
Subject digest:
19e3e21084a4bbd77b5b0b963de992a10ebf4e991bd410522e2a7c306e059afd - Sigstore transparency entry: 1280868364
- Sigstore integration time:
-
Permalink:
teslakoile/huly-cli@69e41d32f1003e10fc54d74b339b29a06a367c1a -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/teslakoile
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@69e41d32f1003e10fc54d74b339b29a06a367c1a -
Trigger Event:
push
-
Statement type: