{"_id":"@andreykko/todomd-cli","_rev":"7-9070ff4ac83d9057c7b3df1309035883","name":"@andreykko/todomd-cli","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.0":{"name":"@andreykko/todomd-cli","version":"0.1.0","keywords":["task-tracker","claude-code","wesoftyou","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.1.0","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"ae2a497ae1b47305a53214de45ac029a00e784a0","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.1.0.tgz","fileCount":13,"integrity":"sha512-l6ar03byssDkmeI2D3byI6gipvh7zA15+ZsJHGVIY5QRC59CWVXKQhWxmOs6p6OHJ6MakdvvWjlIoKXP7fiFJA==","signatures":[{"sig":"MEYCIQCOjA3RLvxoeX5Uf5F2aFApheLC/Njkr7oasvUjpH3egQIhAPFvIFcMSLIj57oyIJ1diPbRxrPniZaQaBRzrZN1xg8V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56870},"type":"module","engines":{"node":">=20"},"gitHead":"a3bac0b20e86f8888894ef9f3304888463a6c808","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for the wesoftyou task tracker.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.1.0_1779988739741_0.007790121963217267","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@andreykko/todomd-cli","version":"0.2.0","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.2.0","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"53bfd3eda0fc4c6aec0caf7309473d3671d3b7f8","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.2.0.tgz","fileCount":13,"integrity":"sha512-sfzcWG9tVcRLlaZgjJrX2xpsqt1vqeqsaL9ExEXDCreNi7qSPA+V+zu4OBKjItRJ4uVOjYKvoMRTM/yJJWty2w==","signatures":[{"sig":"MEYCIQD5e9vTxsoMHhwgxtQyYyUdt9VMcNCwiA7811gXkDZFnQIhAJ/hZb+4j7IlFRfzKu3z4RM/ZPmQqr0IlThm9Pao+Cn/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58091},"type":"module","engines":{"node":">=20"},"gitHead":"fd84d6d9e1a022eb00e81bca83408aabdd5e988a","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.2.0_1780005779664_0.854068479768405","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@andreykko/todomd-cli","version":"0.3.0","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.3.0","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"e42f1f4361c3a238c2c83167e4eb6d8a366447fb","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.3.0.tgz","fileCount":13,"integrity":"sha512-JXvxmvVnAHxAQ21O5ZCoyU6/JvSEDhr+eAVpwV3o7dOSo/2YVPhLyV89l3cI95DsA/wY01afG3Z2DTAmZp+dTg==","signatures":[{"sig":"MEUCIFmPtpgm2b791kX6e2RAW9/fDCU39edcLnOaBcrceGtAAiEA7BN0oPdIljRlqLa0lRQK/X8Ut0jXO/5ovigQniQL9Zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67531},"type":"module","engines":{"node":">=20"},"gitHead":"831acf91b57e861cf21034847f1e3543627692e4","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.3.0_1780515278246_0.7247004963743116","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@andreykko/todomd-cli","version":"0.4.0","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.4.0","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"95e28e76cdd1b7fc08a154c9ef86546715612e08","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.4.0.tgz","fileCount":13,"integrity":"sha512-rV1YgBM8kBHjEhVhDBGtRVlW3dQin5GKT8gDyfGkGq9nK77OcFj42t3Own9M9v5wwbw359hNmvwOHPXEnOzoKA==","signatures":[{"sig":"MEUCIQCzWgkDuBEIZOQOXm+f6hFsE5RYTBz/YciaFA2fQZq7ogIgH5wvefScaGlYJ6JDIABwfXjotpq+Mn9n6j0NRT/MKpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68832},"type":"module","engines":{"node":">=20"},"gitHead":"f009fa21c08620dca573f613794f1181549043f4","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.4.0_1780592337248_0.3269989532239037","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@andreykko/todomd-cli","version":"0.5.0","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.5.0","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"aaee35bff0510d93984fce2f737187919f847dc5","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.5.0.tgz","fileCount":13,"integrity":"sha512-3TLFGQT2RvyZykNftCtidxI4pFoMT4zxtRIlxJjxgbKsRPR23UdCCZ7h4bYGx49yCHTj1UAsH4pEEuYIDXlybQ==","signatures":[{"sig":"MEQCIDPiwaWmdmhskBPggSwonBTb+MfwEThUpPUpsk9z4ea1AiAbvxieEskZ7srOwQF0er+fYIlY8o+uEHuCTrPGL+2d6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72072},"type":"module","engines":{"node":">=20"},"gitHead":"8056fcfee08fd8db3dc12becf8c90c737ca78fd7","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.5.0_1780941159417_0.027924262365357055","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@andreykko/todomd-cli","version":"0.5.1","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","_id":"@andreykko/todomd-cli@0.5.1","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"bin":{"tt":"dist/bin/tt.js"},"dist":{"shasum":"10804f0d46c73fe0980499613505d9d2aeda3430","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.5.1.tgz","fileCount":13,"integrity":"sha512-0VpL1hmqTlSjnh9ZdNkkJAUp4vZx4FAk2H/pnh0jf6Dtm2bjoKYCxxoYxkeo2dx6NWOlpbpArCk2OJMBAVcQ4g==","signatures":[{"sig":"MEYCIQDO/Oko8RK/flZLF4WaCiqbe5gXwFNJsquPW8dwWtrABwIhAIM5HaN4h1jbd22QXT6Znb075wgiUAf2ypsHl6xbCUZf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72401},"type":"module","engines":{"node":">=20"},"gitHead":"f5a0b3c21b2b63b579525fe0e54ea8f6a0b7ed20","private":false,"scripts":{"tt":"node dist/bin/tt.js","dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","clean":"rm -rf dist src/lib/buildConstants.ts","predev":"node scripts/build-constants.mjs","prebuild":"node scripts/build-constants.mjs","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"_npmVersion":"11.6.2","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"open":"^10.1.0","commander":"^12.1.0","picocolors":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/todomd-cli_0.5.1_1781052297122_0.4045375018054054","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@andreykko/todomd-cli","version":"0.7.0","description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","type":"module","private":false,"bin":{"tt":"dist/bin/tt.js"},"scripts":{"prebuild":"node scripts/build-constants.mjs","build":"tsc -p tsconfig.json","predev":"node scripts/build-constants.mjs","dev":"tsc -p tsconfig.json --watch","tt":"node dist/bin/tt.js","clean":"rm -rf dist src/lib/buildConstants.ts","prepublishOnly":"npm run clean && npm run build"},"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"license":"MIT","engines":{"node":">=20"},"dependencies":{"commander":"^12.1.0","open":"^10.1.0","picocolors":"^1.1.0"},"devDependencies":{"@types/node":"^22.5.0","typescript":"^5.6.2"},"gitHead":"eea6f05a1a46c9678c0fecc7214a30e22f4311e7","_id":"@andreykko/todomd-cli@0.7.0","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-wLAx3jjVoeXN+L7vl2KXQed2egeo0xg8nGf4P0sxPx3Nv93PCRtgEC7Rnzf1vymHRHSSRCH6tWRwm6yS4DR4dQ==","shasum":"de7cfc3217fc14226f26b9a2f01509ae9ce791ac","tarball":"https://registry.npmjs.org/@andreykko/todomd-cli/-/todomd-cli-0.7.0.tgz","fileCount":14,"unpackedSize":80134,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCYtMPASghVlQgcctfMjDMvlEGC3wwMF/6EEYAlGXxbPwIhAP76rVvHlg6lzz0r2bLBPejz5BwtYbcpJsG7xxIlijDe"}]},"_npmUser":{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"},"directories":{},"maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/todomd-cli_0.7.0_1782269422245_0.5961124805662386"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T17:18:59.610Z","modified":"2026-06-24T02:50:22.506Z","0.1.0":"2026-05-28T17:18:59.955Z","0.2.0":"2026-05-28T22:02:59.848Z","0.3.0":"2026-06-03T19:34:38.402Z","0.4.0":"2026-06-04T16:58:57.392Z","0.5.0":"2026-06-08T17:52:39.568Z","0.5.1":"2026-06-10T00:44:57.259Z","0.7.0":"2026-06-24T02:50:22.392Z"},"author":{"name":"Andrey Kovalchuk","email":"andrey.kovalchuk@wesoftyou.com"},"license":"MIT","keywords":["todo-md","todomd","task-tracker","claude-code","cli"],"description":"CLI + Claude Code skill for todo.md — drive the task tracker from your terminal, and let Claude Code do it for you.","maintainers":[{"name":"andreykko","email":"andrey.kovalchuk@wesoftyou.com"}],"readme":"# `@andreykko/todomd-cli`\n\nCLI for [todo.md](https://todo-md.pages.dev) — a Linear-grade task tracker.\nDoubles as a Claude Code skill so an agent can run `tt` to read assigned work,\nupdate tasks, comment, and log time on your behalf.\n\n## Install\n\n```bash\nnpm install -g @andreykko/todomd-cli\ntt auth login\n```\n\nThe tracker URL is baked into the published package — no env vars required.\n\n### Building from source\n\n```bash\ncd packages/cli\ncp .env.example .env       # edit URLs for your deployment / local stack\nnpm install\nnpm run build\nnpm link                   # makes `tt` available globally\n```\n\n`packages/cli/.env` is read at build time by `scripts/build-constants.mjs` and\ninlined into `dist/lib/buildConstants.js`. CI sets the same `TODOMD_WEB_URL` /\n`TODOMD_API_URL` vars via `process.env` (which overrides the file) before\n`npm run build && npm publish`.\n\n## Auth\n\n`tt auth login` opens a browser to the tracker; click **Authorize** and the\nloopback redirect drops a token onto your machine.\n\nIf the loopback redirect can't reach your terminal (SSH, firewalls, etc.), pass\n`--device-code`:\n\n```bash\ntt auth login --device-code\n# CLI prints ABCD-EFGH; you enter it on the same /cli-auth page.\n```\n\nIf the build doesn't have URLs baked (e.g. someone running from source without\na `.env`), `tt` accepts runtime overrides:\n\n```bash\ntt auth login --web-url https://… --api-url https://….convex.site\n# or, persistent across calls:\nexport TODOMD_WEB_URL=https://…\nexport TODOMD_API_URL=https://….convex.site\ntt auth login\n```\n\nTokens have a **sliding 7-day idle expiry** — every successful request extends them.\nStop using `tt` for 7+ days and you'll be asked to re-auth. Revoke any time:\n\n```bash\ntt auth logout                        # this device\n# or revoke from your profile in the web app\n```\n\nConfig lives at `~/.config/todomd/auth.json` (mode 0600). Override path with\n`TODOMD_CONFIG=/some/path tt ...`.\n\n## Commands\n\n### Read\n\n```\ntt next                           # the top open task assigned to me\ntt list [--mine|--all] [--status open|done|<col>] [--project KEY] [--limit N]\ntt show <id> [--no-comments] [--no-time] [--include-activity]\ntt context <id>                   # markdown brief for an agent\ntt projects                       # projects I can access (names + keys)\ntt project <KEY>                  # one project: columns, planning flags, members\ntt search \"query\"\ntt time [--from YYYY-MM-DD] [--to YYYY-MM-DD] [--project KEY] [--mine]\n```\n\n`tt project <KEY>` is the companion to `tt create` / `tt update --status`: it\nprints the valid column (status) names and which one is the \"done\" column, plus\nwhich planning features are enabled (sprints / timeline / estimates / epics).\n\n`tt time` aggregates logged hours over a date window with per-project / per-user\nroll-ups (defaults to the last 7 days). Non-admins only ever see their own time;\n`--mine` restricts admins to their own.\n\n### Create & modify\n\n```\ntt create --project KEY --title \"...\"\n   [--status <col>] [--priority low|med|high|urgent] [--assignee me|<email>]\n   [--due YYYY-MM-DD] [--description \"...\"] [--parent <taskId>]\ntt update <id>\n   [--status done|todo|<col>] [--priority low|med|high|urgent]\n   [--assignee me|<email>|\"\"] [--title \"...\"] [--due 2026-05-20] [--description \"...\"]\ntt done <id>                      # move to the done column\ntt reopen <id>                    # move back to the first open column\ntt rm <id> --yes                  # delete (cascades; refuses without --yes)\ntt comment <id> \"<body>\"\ntt log <id> <hours> [--note \"...\"] [--date 2026-05-09]\n```\n\n`tt create` defaults `--status` to the project's first open column. Pass\n`--parent <taskId>` to file a subtask (it inherits the parent's sprint/epic per\nthe server rules). `tt done` / `tt reopen` move the task between the done and\nfirst-open columns — they're shortcuts for the most common `tt update --status`.\n\n### Epics\n\n```\ntt epics --project KEY                       # list epics (id, name, task counts)\ntt epics list --project KEY                   # same as above\ntt epics create --project KEY --name \"...\"\n   [--color epic-indigo|epic-pink|epic-amber|epic-teal|epic-violet|epic-slate|epic-emerald|epic-rose]\n   [--description \"...\"]\n```\n\nEpics must be enabled for the project (see `tt project <KEY>`). `--color` defaults\nto `epic-indigo`. Once an epic exists, put tasks in it with\n`tt create … --epic \"<name or id>\"` or `tt update <id> --epic \"<name or id>\"`.\n\n### Labels\n\n```\ntt labels --project KEY                       # list labels (name, color, id)\ntt create … --label Bug --label Backend       # add labels (repeatable, name or id)\ntt update <id> --label Bug                    # replace the task's labels\ntt update <id> --clear-labels                 # remove all labels\n```\n\nLabels are created in the web UI; the CLI assigns existing ones. `--label` is\nrepeatable and replaces the full set on update (`--clear-labels` empties it).\n\n### Attachments\n\n```\ntt attach <taskId> <file> [--name \"shown-as.png\"]   # upload a local file (max 50 MB)\ntt attachments <taskId>                              # list a task's files\n```\n\n`tt attach` reads a local file and uploads it to the task — so it works from\n**Claude Code** and **Cowork** (both have a filesystem). The remote MCP connector\n(Claude.ai web chat) can't transfer files, so attaching there isn't supported;\nuse `tt attach` or the web UI instead.\n\n### Auth & skill\n\n```\ntt auth login [--device-code]\ntt auth logout\ntt auth whoami\n\ntt skill install [--project|--global] [--force]   # install Claude Code skill\n```\n\nGlobal flags:\n\n- `--json` — emit machine-readable JSON instead of human output\n- `--no-color` — disable ANSI color (also honors `NO_COLOR` env)\n\n## Project Docs\n\nEvery project has a Confluence/Notion-style docs tree. `tt docs` reads, writes,\nsearches, and attaches files to those pages — useful for grounding an agent in\nyour SRS, ADRs, or runbooks before it touches code. All subcommands take\n`--project <KEY>`. Refer to a doc by its id or by a slash-path through the tree\n(e.g. `SRS/Auth`).\n\n```\ntt docs list --project APP [--tree]\ntt docs read <ref> --project APP [--with-attachments]\n\ntt docs create --project APP --title \"<title>\"\n   [--parent <ref>] [--file <path.md>] [--icon <LucideName>]\ntt docs update <ref> --project APP\n   [--title \"<new>\"] [--file <path.md>] [--append]\n\ntt docs upload <ref> <file> --project APP        # PDF/DOCX/MD/TXT, max 25 MB\ntt docs attachments <ref> --project APP          # status + extracted-text preview\n\ntt docs search \"<query>\" --project APP [--limit <n>]\ntt docs archive <ref> --project APP\ntt docs restore <doc-id> --project APP           # restore needs id, not slash path\n```\n\nServer-side text extraction runs in the background after `tt docs upload`.\nRe-run `tt docs attachments` a few seconds later to see `status: ready`; then\n`tt docs read … --with-attachments` includes the extracted text. PDF and DOCX\nextract today; other types upload but return `status: unsupported`.\n\n## Claude Code integration\n\nInstall the skill once:\n\n```bash\ntt skill install                 # installs to ~/.claude/skills/todomd/\ntt skill install --project       # installs into the current repo's .claude/skills/\n```\n\nNow any prompt mentioning your tasks/tickets/projects in this tracker will pull in\nthe skill, and Claude will know which `tt` commands to run.\n\n### Claude chat / Cowork (no CLI needed)\n\ntodo.md is also a **remote MCP custom connector** — you can drive it from\nClaude.ai, Desktop, Cowork, and mobile without installing the CLI at all. See\n[docs/MCP_CONNECTOR.md](../../docs/MCP_CONNECTOR.md) for setup. The connector\nexposes the same capabilities as a curated subset of these commands (create /\nupdate / done / comment / log time / read tasks, projects, time, and docs).\n\n## Exit codes\n\n| Code | Meaning                                   |\n|------|-------------------------------------------|\n| 0    | Success                                   |\n| 1    | Generic error                             |\n| 2    | Bad arguments / missing config            |\n| 4    | Unauthorized (token expired / revoked)    |\n| 5    | Forbidden (project access denied)         |\n\n## Development\n\n```bash\nnpm run build      # compile TS → dist/\nnpm run dev        # watch\nnpm link           # global install\n```\n\nSource layout:\n\n```\nsrc/\n  bin/tt.ts            # entry — parses argv, registers commands\n  commands/\n    auth.ts            # login (loopback + device-code), logout, whoami\n    tasks.ts           # next, list, show, context, create, update, done, reopen, rm,\n                       #   comment, log, time, search, projects, project\n    docs.ts            # docs list/read/create/update/upload/attachments/search/archive/restore\n    skill.ts           # skill install\n  lib/\n    api.ts             # HTTP client + ApiError (get/post/patch/del)\n    config.ts          # auth.json read/write\n    output.ts          # human + JSON output, color helpers\n  skill/SKILL.md       # ships in package; copied by `tt skill install`\n```\n\nThe backend for every command lives in [convex/cli.ts](../../convex/cli.ts)\n(bearer-auth HTTP actions over the `internal.cli.*As` functions). The same\nbackend powers the MCP connector ([convex/mcp.ts](../../convex/mcp.ts)).\n","readmeFilename":"README.md"}