# things3

[![Main](https://github.com/evanpurkhiser/things3-cloud/actions/workflows/main.yml/badge.svg)](https://github.com/evanpurkhiser/things3-cloud/actions/workflows/main.yml)

A Rust command-line client for [Things 3](https://culturedcode.com/things/) that talks
directly to the Things Cloud API.

## Install

Via Homebrew:

```bash
brew install evanpurkhiser/personal/things3-cloud
```

From source:

```bash
cargo install --path .
```

From crates.io:

```bash
cargo install things3-cloud
```

## Build

```bash
cargo build
```

## Configure auth

```bash
things3 set-auth
```

## Usage

```bash
$ things3 today
⭑ Today  (9 tasks)

  LZ4 ▢ Follow up with team
      │ Shared notes for context
      │
    D ├╴○ draft update
    J └╴○ review checklist
  4HY ▢ Task with notes
      │ Multi-line note example
      └ with a second line
  Uuq ▢ Review inbox and prioritize
  699 ▢ Prepare weekly summary  [Planning]
  H47 ▢ Submit reimbursement  ⚑ due by 2026-04-10

  ☽ This Evening
  8KU ▢ Reflect on highlights
  63E ▢ Reset workspace for tomorrow
```

```bash
things3 find --query "rent" --deadline "<=2026-03-31"
things3 new "Follow up with team" --when today
things3 schedule <task-id> --deadline 2026-04-10
things3 mark <task-id> --done
```

## Supported features

- [x] Configure auth with `set-auth` (stored in XDG state)
- [x] Incremental sync with local cache for fast startup
- [x] `--no-sync` flag to skip cloud sync and use local cache only

**Views**
- [x] `inbox`, `today`, `upcoming`, `anytime`, `someday`, `logbook`
- [x] `projects` / `project <id>`, `areas` / `area <id>`, `tags`
- [x] Show notes via `--detailed`
- [x] Show checklist items via `--detailed`
- [x] `find` with title/notes/checklists and tag/area/project/status/date filters

**Tasks**
- [x] `new` — create tasks with title, notes, tags, when, deadline, and position
- [x] `edit` — rename, set/remove notes, move, add/remove tags (multi-ID supported)
- [x] `edit --add-checklist/--remove-checklist/--rename-checklist`
- [x] `mark` — done/incomplete/canceled (multi-ID supported)
- [x] `mark --check/--uncheck/--check-cancel` for checklist toggles
- [x] `schedule` — when/start date, deadline, today/evening/someday
- [x] `reorder` — reorder tasks within lists
- [x] `delete` — trash tasks

**Projects / Areas / Tags**
- [x] `projects new` / `projects edit`
- [x] `areas new` / `areas edit`
- [x] `tags new` / `tags edit` / `tags delete`

## Testing

Run all Rust tests:

```bash
cargo test --all-targets
```

The CLI snapshot suite uses `trycmd` test cases in `trycmd/`.
