Skip to main content

ct — creativetasks.me CLI

One command, one interface. ct opens a full-screen chatbox in your terminal: you type a message, the model answers, and when the task needs the filesystem it calls tools inline — reading, editing and running commands in front of you, asking before it changes anything.

Zero runtime dependencies. Plain stdlib, Python 3.10+.

install

cd d:\creativetasks\cli
pip install --user .
ct setup          # paste your ct-live-... key

That installs two native launchers, ct.exe and creativetasks.exe, into your user scripts directory:

C:\Users\<you>\AppData\Roaming\Python\Python312\Scripts

Make sure that directory is on your PATH, then ct runs from anywhere — no wrapper script, no python -m:

ct                # full-screen interface
creativetasks     # same thing, longer name

A plain pip install . (without --user) writes to the system Python Scripts\ directory instead, which needs an elevated shell.

Config lands in ~/.ct/config.toml. Environment variables override it:

$env:CT_API_KEY  = "ct-live-..."
$env:CT_MODEL    = "opus"
$env:CT_BASE_URL = "https://api.creativetasks.me/v1"

use

Run ct with no arguments for the full-screen interface:

┌────────────────────────────────────────────────────────────────┐
│ ct · claude-opus-5              session:bugfix  D:\creativetasks│
│ › fix the streaming bug in the SSE reader                      │
│                                                                │
│ ● read_file cli/ct/core.py                                     │
│   ✓ 280 lines                                                  │
│ ● edit_file cli/ct/core.py                                     │
│   ✓ edited (1 replacement)                                     │
│                                                                │
│ Swapped the blocking read(512) for line-wise iteration.        │
│────────────────────────────────────────────────────────────────│
│ › now run the tests                                            │
│  ready        ttft 2310ms · 4,182 tok   enter send · /help     │
└────────────────────────────────────────────────────────────────┘

Anything else is headless — it streams to stdout and exits, so pipes and scripts work the way you would expect:

ct "write a bash one-liner that counts .py files"
ct -m sonnet "quick take on X"
Get-Content prompt.txt | ct
ct --json "summarise this repo" > out.json
ct -f notes.md -o summary.md

keys

key does
enter send
ctrl+n newline (multi-line message)
up / down input history — or scroll when the box is empty
pgup / pgdn scroll the transcript
ctrl+u / ctrl+w kill line / kill word
ctrl+l redraw
ctrl+c cancel a running turn, or quit when idle

tool permissions

Reads run silently. Anything that writes to disk or runs a shell command stops and asks first:

 write_file  src/main.py
 + def main():
 +     print("hello")
 [y] allow   [n] skip   [a] always   [q] abort turn

a allows that tool for the rest of the session. --yolo skips every prompt. --no-tools turns the filesystem off entirely and gives you plain chat.

In headless mode there is nobody to ask, so guarded tools are refused unless you pass --yolo.

Every path is pinned under the working directory (-C, default .), so a tool call cannot reach outside it. Shell commands inherit that directory and a 60s timeout.

slash commands

Type / and the full menu appears above the input, filtering as you keep typing. Arrow keys move, Tab completes, Esc dismisses, Enter runs.

  • /help — show this list
  • /model <name> — swap model for the rest of the session
  • /models — list every model the gateway offers
  • /api [key] — show or replace the API key
  • /usage — tokens, timing and estimated cost
  • /mcp [list|reload] — MCP servers and their tools
  • /tools [on|off] — toggle filesystem tool access
  • /yolo [on|off] — skip tool confirmation prompts
  • /reasoning [on|off] — show or hide thinking traces
  • /clear — drop the conversation history
  • /retry — re-run the last user message
  • /session <name> — switch to a named session
  • /sessions — list saved sessions
  • /save <path> — write the transcript to a file
  • /quit — exit ct

MCP servers

ct speaks the Model Context Protocol over stdio. Declare servers in ~/.ct/mcp.json using the same shape Claude Desktop uses, so an existing config pastes straight in:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "D:\code"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "ghp_..." }
    }
  }
}

/mcp init writes a starter file, /mcp shows what is connected, /mcp reload reconnects after an edit. Servers start in the background, so a slow or broken one never delays startup — it just reports as failed.

Their tools are namespaced server__tool and offered to the model alongside the built-ins. MCP tools are not covered by the built-in sandbox — a server can do whatever it was written to do — so only add servers you trust.

usage and cost

/usage reports what this session and every past session spent:

this session
  tokens            2,481 in / 1,102 out
  turns             3
  model time        54.7s  (avg 18.2s, slowest 38.2s)
  throughput        20 tok/s
  est. cost         $0.13

all time
  requests          148
  tokens            184,220 in / 61,405 out
  est. cost         $2.41

The status bar counts up live while the model works (⠹ thinking 4.2s) and reports ttft, duration and tok/s when the turn lands.

Dollar figures are local estimates, computed from a price table in ct/usage.py — the gateway does not report per-request cost to an API key, and your real balance lives behind the web dashboard's 2FA. To get a real balance in /usage, add the endpoint in docs/worker-usage-endpoint.md; the CLI already calls it and will use it the moment it exists.

Raw per-call records are appended to ~/.ct/usage.jsonl.

shipping a binary

python build.py          # dist/ct.exe, one file, ~8.6 MB
python build.py --dir    # dist/ct/, starts faster, ship as a zip

The result runs on a machine with no Python installed — drop it anywhere on PATH. The one-file build unpacks to a temp directory on each launch, which costs about a second of startup; --dir avoids that.

flags

flag short default meaning
--model -m anthropic/claude-opus-5 model id or alias
--session -s named session; resumes and autosaves
--workdir -C . sandbox root for tools
--max-tokens -n 8192 output ceiling
--reasoning -r off show thinking traces
--no-tools off chat only, no filesystem
--yolo off skip confirmations
--max-iters 25 cap on tool rounds per turn
--file -f read prompt from a file (repeatable)
--out -o write the reply to a file
--json machine-readable one-shot

subcommands

ct models                  # list available models
ct sessions ls             # saved sessions
ct sessions show <name>    # replay a transcript
ct sessions rm <name>      # delete one
ct setup                   # write the config file

layout

ct/
  core.py     config, sessions, SSE client, delta folding
  term.py     ANSI, Windows VT setup, raw key input, wrapping
  commands.py the slash-command registry (palette + /help + dispatch)
  tools.py    built-in tool surface, sandbox, permission classes
  mcp.py      MCP stdio client: handshake, tool discovery, dispatch
  usage.py    token/cost accounting, ~/.ct/usage.jsonl
  ui.py       screen regions, transcript blocks, composer, palette
  app.py      the unified turn loop
  __main__.py argument parsing, headless mode
build.py      standalone binary via PyInstaller
tests/        84 tests, no network required
docs/         worker patch for a real credit balance

Run the tests with python -m unittest discover -s tests.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

creativetasks-2.5.0.tar.gz (44.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

creativetasks-2.5.0-py3-none-any.whl (50.2 kB view details)

Uploaded Python 3

File details

Details for the file creativetasks-2.5.0.tar.gz.

File metadata

  • Download URL: creativetasks-2.5.0.tar.gz
  • Upload date:
  • Size: 44.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.4

File hashes

Hashes for creativetasks-2.5.0.tar.gz
Algorithm Hash digest
SHA256 27ca161bf94bc74df04614ef46113f15c276cf26c9bcefc62f8fdc57924c487b
MD5 567a555603f398f9777eaf46c8cc3b71
BLAKE2b-256 de4ff28cc145f9e5d8dc4565f202bde6d2eb2910a21dec4872ef8e5b2165e739

See more details on using hashes here.

File details

Details for the file creativetasks-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: creativetasks-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 50.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.4

File hashes

Hashes for creativetasks-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d7540d0e5896a8959ce5fbd23ff7aecdb1bd293c157db5c1d50cbb4b1f03a9a
MD5 e2234bab1e4f55a520bdd46b1056e3de
BLAKE2b-256 15ca924ca36bd5f05d6a5759900aa1f063910964856d557ce9f29e6fef4e7a3b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.5.0 This release

2 files

2.4.0

2 files

2.3.1

2 files

2.3.0

2 files

2.2.1

2 files

2.2.0

2 files

2.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page