@novateva/teurtask-cli
v0.2.4
Published
CLI for teurtask project management API
Readme
teurtask CLI
CLI for Teurtask project management operations. It supports environment management, browser login, and day-to-day CRUD/reporting actions across projects, tasks, sprints, phases, goals, tags, comments, schedules, users, scores, notifications, and documents.
What this CLI is for
Use teurtask to:
- switch between local/dev/prod API environments
- authenticate from terminal via browser login
- automate team/project operations from scripts or shell aliases
- inspect and manage delivery lifecycle (project -> phase -> sprint -> task)
- manage related entities (goals, tags, comments, schedules, users, scores)
- handle personal flows (active tasks, personal tasks, notifications)
Install and run
Requirements:
- Node.js 20+
- npm
Install dependencies:
npm installRun in development mode:
npm run dev -- --helpBuild TypeScript:
npm run buildRun tests:
npm testUse the CLI directly:
npx tsx bin/teurtask.ts --helpGlobal options
These options work across commands:
--jsonoutput machine-readable JSON--env <name>override active environment for a command--verboseverbose logging/output
Example:
npx tsx bin/teurtask.ts --env dev --json task list --activeEnvironments and config
The CLI stores state in:
~/.teurtask/config.jsonfor environments and active environment~/.teurtask/auth.jsonfor tokens and user data per environment
Default environments:
local->http://localhost:8000/apidev->https://dev-api.teurtask.com/apiprod->https://api.teurtask.com/api
Security note:
- auth file permissions are set to user-only (
0600) when tokens are saved
Useful commands:
teurtask env list
teurtask env show
teurtask env set dev
teurtask env add staging --api-url "https://staging-api.example.com/api" --web-url "https://staging.example.com"Authentication
teurtask auth login
teurtask auth me
teurtask auth refresh
teurtask auth logoutComplete command reference
env
env listenv set <name>env showenv add <name> --api-url <url> --web-url <url>
auth
auth loginauth logoutauth meauth refresh
project
project list [--archived]project get <id> [--with-sprints] [--with-goals]project create --name <name> --description <description> [--administrative] [--clients <ids>]project update <id> [--name <name>] [--description <description>] [--archived] [--administrative] [--clients <ids>]project delete <id>project backlog <id> [--start-date <date>] [--end-date <date>] [--tags <ids>] [--goal <id>] [--users <ids>] [--sprint <ids>] [--phase <ids>] [--state <states>] [--task-name <name>] [--per-page <n>] [--with-duration]project archive <id>
task
task list [--project-id <id>] [--sprint-id <id>] [--with-users] [--with-project] [--with-sprint] [--with-tags] [--with-goal] [--active] [--personal]task get <id> [--with-users] [--with-comments] [--with-reviewer] [--with-duration]task create --title <title> --state <state> [--sprint-id <id>] [--phase-id <id>] [--project-id <id>] [--users <ids>] [--deadline <date>] [--description <text>] [--start-date <date>] [--priority <priority>] [--story-point <n>] [--reviewer-id <id>] [--goal-id <id>] [--is-recurrent <bool>] [--type-tasks <ids>] [--tags <ids>]task update <id> [--title <title>] [--state <state>] [--description <text>] [--priority <priority>] [--difficulty <difficulty>] [--story-point <n>] [--deadline <date>] [--start-date <date>] [--finish-date <date>] [--sprint-id <id>] [--users <ids>] [--type-tasks <ids>] [--tags <ids>] [--reviewer-id <id>]task delete <id>task track <id>task state <id> <state>task active
sprint
sprint list [--project-id <id>] [--phase-id <id>] [--archived] [--page <n>] [--page-size <n>] [--with-project] [--with-phase] [--with-users] [--with-tasks] [--with-sprint-metrics]sprint get <id>sprint create --project-id <id> --phase-id <id> --start-date <date> --deadline <date> [--description <text>] [--should-fill-daily] [--users <userId:capacity,...>] [--task-ids <ids>] [--responsible-ids <ids>]sprint update <id> [--description <text>] [--start-date <date>] [--deadline <date>] [--users <userId:capacity,...>] [--responsible-ids <ids>]sprint delete <id>sprint close --sprint-id <id> --score-client <n> --comment-client <text> --review-users <reviews> [--open-new] [--task-ids <ids>]sprint report <id>
user
user list [--sprint-id <id>]user get <id>user create --name <name> --last-name <lastName> --email <email> --id-card <idCard> --address <address> --charge <charge> --phone <phone> --role-id <n> --date-of-birth <date> --hour-price <n> [--url-avatar <url>] [--authorized] [--manual-limit <n>]user update <id> [--name <name>] [--last-name <lastName>] [--email <email>] [--id-card <idCard>] [--address <address>] [--charge <charge>] [--phone <phone>] [--role-id <n>] [--date-of-birth <date>] [--hour-price <n>] [--url-avatar <url>] [--authorized] [--manual-limit <n>]user personal-tasksuser payments
comment
comment list <taskId>comment create --task-id <id> --description <text> [--data-daily-id <id>]comment update <id> [--description <text>]comment delete <id>
phase
phase list [--project-id <id>] [--with-project] [--with-users] [--with-tasks]phase get <id>phase create --name <name> --start-date <date> --end-date <date> --project-id <id> [--invoice-number <number>] [--amount <n>]phase update <id> [--name <name>] [--start-date <date>] [--end-date <date>] [--project-id <id>] [--invoice-number <number>] [--amount <n>]phase report <id> [--sprint-id <id>]phase close <id> --score-client <n> --comment-client <text> [--create-phase] [--create-sprint]
Important:
phase createcreates the phase inCreatedstate.- To activate the phase (
Doing), runsprint createwith--phase-id <phaseId>.
notification
notification listnotification read <id>notification read-allnotification delete <id>notification delete-all
schedule
schedule list --start <timestamp> --end <timestamp> --users-id <ids>schedule get <id>schedule create --title <title> --body <body> --start <timestamp> --end <timestamp> --category <category> --location <location> --state <state> --user-id <n> --task-id <n> [--type <type>]schedule update <id> [--title <title>] [--body <body>] [--start <timestamp>] [--end <timestamp>] [--category <category>] [--location <location>] [--state <state>] [--user-id <n>] [--task-id <n>] [--type <type>]schedule delete <id>
goal
goal list [--project-id <id>] [--name <name>] [--tags <ids>]goal get <id>goal create --name <name> --project-id <id> [--tags <ids>]goal update <id> [--name <name>] [--tags <ids>]goal delete <id>
tag
tag list [--project-id <id>] [--name <name>]tag get <id>tag create --name <name> --project-id <id>tag update <id> [--name <name>]tag delete <id>
score
score list [--task-id <id>] [--with-user]score get <id>score create --score <n> --state <state> --deadline-task <date> --task-id <n> --dedicated-hours <n> --dificulty <dificulty> [--description <text>]score update <id> [--score <n>] [--state <state>] [--deadline-task <date>] [--task-id <n>] [--dedicated-hours <n>] [--dificulty <dificulty>] [--description <text>]score delete <id>
document
document delete <id>
document upload/store is not currently implemented in this CLI.
careers
careers position list [--status <status>]careers position get <id>careers position create --title <title> [--area <area>] [--team <team>] [--lead <lead>] [--intro <text>] [--reqs <items>] [--mode <mode>] [--type <type>] [--location <location>] [--salary-min <n>] [--salary-max <n>] [--salary-period <period>] [--is-priority <bool>] [--status <status>] [--field-config <json>] [--questions <json>]careers position update <id> [same options as create]careers position delete <id>careers application list [--position-id <id>] [--status <status>] [--segment <tag>] [--flagged] [--reviewer-id <id>] [--q <term>] [--min-match <percentage>] [--sort match]careers application get <id>careers application update <id> [--status <status>] [--segment <tag>] [--is-flagged <bool>] [--reviewer-id <id>]careers application bulk-update --ids <ids> [--status <status>] [--is-flagged <bool>] [--reviewer-id <id>] [--add-segment <tag>]careers application reviewers
Careers endpoints require the careers.manage permission on the account.
support
support list [--status <open|in_progress|resolved>] [--user-id <id>] [--date-from <date>] [--date-to <date>] [--page <n>] [--per-page <n>]support show <id>support update <id> --status <open|in_progress|resolved>support resolve <id>
Support tickets are automatically captured API error reports (URL, method, HTTP status, request/response bodies, error message, plus the reporting user's description) — not a general helpdesk. Listing all tickets and filtering by status/user_id/date_from/date_to, plus update/resolve, require the support.manage permission; without it you only see your own tickets. resolve and update --status resolved notify the reporting user by push.
Common workflows
1) First-time setup
teurtask env list
teurtask env set dev
teurtask auth login
teurtask auth me2) Create delivery structure
teurtask project create --name "Platform Revamp" --description "Q2 delivery"
teurtask phase create --name "Phase 1" --start-date "2026-03-01" --end-date "2026-03-31" --project-id 1
teurtask sprint create --project-id 1 --phase-id 1 --start-date "2026-03-01" --deadline "2026-03-14" --description "Sprint 1"
teurtask task create --title "Implement login" --state "todo" --project-id 1 --sprint-id 1 --priority "high"Activation rule:
phase createalone does not activate the phase.- Use
sprint create --phase-id <phaseId>to move phase state toDoing.
3) Daily execution
teurtask task active
teurtask user personal-tasks
teurtask comment create --task-id 42 --description "Progress update"
teurtask notification list
teurtask notification read-all4) Reporting and closure
teurtask sprint report 1
teurtask phase report 1
teurtask sprint close \
--sprint-id 1 \
--score-client 9 \
--comment-client "Delivered as expected" \
--review-users "1000:9:Great ownership;1001:8:Good delivery"--review-users format:
- Semicolon-separated entries.
- Each entry:
user_id:score:comment - Example:
"1000:10:Excellent sprint;1001:8:Delivered scope"
Tips
- Use
--jsonwhenever you need integration with scripts. - Use command-specific help to inspect argument details quickly:
teurtask <group> --helpteurtask <group> <command> --help
