cdno track
File a tracking note under an expanded stewardship. The activity is positional and selects the
template: a vault’s .cuaderno/templates/tracking-<activity>.md if present, else the generic
built-in. No activity-specific templates ship built-in — ready-made gym/body/swim variants are
in examples/templates/tracking/.
cdno track [OPTIONS] <ACTIVITY>
Arguments
| Argument | Description |
|---|---|
<ACTIVITY> | Activity slug — anything you track (e.g. gym, swim, reading). Selects tracking-<activity>.md if present, else the generic template. |
Options
| Flag | Description |
|---|---|
--stewardship <STEWARDSHIP> | Stewardship slug. Defaults to the only expanded stewardship if there’s exactly one; otherwise required. |
--routine <ROUTINE> | Bare slug of a routine doc — wrapped into [[stewardships/<slug>/routines/<routine>]] and substituted into the template’s routine: field. Only takes effect when the resolved template has a routine: field; the generic default has none, so it silently no-ops there. |
--content <CONTENT> | Inline body. Optional; defaults to empty so you can fill in tables afterward. |
--at <WHEN> | File the entry at a past (or near-future) day rather than today: YYYY-MM-DD, or a full YYYY-MM-DDTHH:MM[:SS] as cdno log --at takes (only the date is kept). For a session recorded after the fact — a statement reconciled days later, a reading taken this morning. Only the date is kept; the entry lands on that day and the daily-log line still goes into today’s note, naming the day it describes. Bounded to 50 years back and 1 year ahead: an unbounded date makes history writable, and a mistyped year would silently reshape a trend. |
--var <NAME=VALUE> | Value for a custom tracking template’s prompted variable ([variables.prompt]). Repeatable. Prompts come from the activity’s template (e.g. tracking-gym) when one exists. See Prompted variables. |
Plus the global options. With --json, emits a {path, message}
result and runs non-interactively.
Examples
cdno track gym --stewardship health --content "Upper body A; RDL up to 25kg"
cdno track body --stewardship health --content "Weight 78.4kg, resting HR 54"
cdno track swim --stewardship health --content "1500m, 28min"
# --routine needs a template with a routine: field (the example gym.md has one):
cdno track gym --routine upper-body-a
# With one expanded stewardship, --stewardship can be omitted:
cdno track gym --content "Legs day"
Tracking entries are append-only and only land in expanded
stewardships (those created with --tracking).
Until a vault has any tracking template, cdno track prints a one-line hint (on stderr) pointing
at examples/templates/tracking/
for a structured layout. It goes quiet once you author a template, and is suppressed under --json.
Merging a day
A second cdno track for the same activity and date merges into the first rather than
erroring: --content is appended to the entry’s ## Notes, and any metrics are folded into its
frontmatter. Recording a day in two passes — a morning and an evening session, spending logged as
it happens — is ordinary rather than exceptional.
Merging is not blind concatenation. A record carrying a stable id replaces the record with
that id, so re-applying the same payload is idempotent; a record without one appends, so
re-running an import that omits ids double-counts every summed metric. Scalars are
last-write-wins: there is no array to key on, and the later reading is what a level means — but
sending a plain value for a key that already holds records is refused, since that would discard
the day’s entries on a note type that only grows.