Skip to main content
Projects are the spine. A milestone is a chunk of a project, a task is a unit of work in one, and both address their parent by slug or by display name. Goals, reminders and entities hang off the same graph without belonging to that hierarchy. Every one of these commands takes a short alias: base p for project, m for milestone, t for task, g for goal, r for reminder, e for entity. Verbs alias too, so base p l is base project list.
The four delete commands here (project delete, milestone delete, task delete and reminder remove) remove data. Three of them print a plan and change nothing until you pass --yes. base reminder remove is the exception: it deletes immediately.

Projects

base project add

Register a new project.
If you leave --path out and the protocol configuration is enabled, the folder is derived from the stage and created for you. If it is not enabled, the project has no folder, which is what base project list --unscoped finds later.

base project list

List projects. By default it shows the current workspace only.
Reach for --all before concluding a project has disappeared. Projects move between workspaces, and a project missing from the current workspace is usually a project that now lives somewhere else.

base project get

Show one project in full. Accepts the slug or the display name.

base project update

Change a project’s mutable fields.
--next-action is the field worth keeping current. It is the difference between a project you can resume and a project you have to reconstruct.

base project peer

Make a project surface in another workspace as well as its own, without moving it.
This adds a link, it does not copy anything. The project still lives in one place, and edits from either workspace are edits to the same project.

base project repath

Re-point a project at its new folder after you move it on disk. This updates the graph and the domain trigger together.
Both arguments are positional: the slug, then the new path, absolute or relative to the workspace root. Do this whenever a folder moves, because a path trigger pointing at a folder that no longer exists is a domain that silently stops firing.

base project move

Destructive. Preview by default. Re-home a project into another workspace’s graph, taking its tasks, its domain, and its decisions, rules and notes with it.
The code map regenerates at the destination rather than travelling, which is why the paths come out right. Pass --no-ast only if you intend to run base sync --ast there yourself.

base project delete

Destructive. Preview by default. Delete a project.
Without --force it refuses a project that still has children, which is the guard rail. With --force it takes them all, and the decisions and rules go too, and those are usually the part you would actually miss.

Milestones

base milestone add

Add a milestone to a project.

base milestone list

List milestones, optionally within one project.

base milestone get

Show one milestone.

base milestone update

Change a milestone’s status or description.

base milestone delete

Destructive. Preview by default. Delete a milestone.
By default the tasks survive: they are detached back to the project rather than deleted with their milestone. --force is what turns this into a cascade.

Tasks

base task add

Add a task to a project, optionally under a milestone.

base task list

List tasks, filtered by project, milestone or label.
Repeated --label narrows rather than widens: two labels means tasks carrying both, not either.

base task get

Show one task, every field.

base task update

Change a task’s mutable fields, including which project or milestone it belongs to.
Reassigning rewrites only the edge you named. Moving a task to a different milestone leaves its project edge alone.

base task done

Mark a task completed.
The short way to do what base task update <slug> --status completed does.

base task tag

Attach or detach free-form labels.

base task delete

Destructive. Preview by default. Delete a task and its edges.

Goals

A goal is a named target that is not a project and has no tasks under it.

base goal add

base goal list

base goal update

Reminders

A reminder surfaces at the start of a session once its time has come, and keeps surfacing until you remove it.

base reminder add

Give exactly one of --in, --at or --due.

base reminder list

base reminder remove

Destructive, no preview. Remove a reminder outright.
This is a hard delete with no confirmation. Run base reminder list first to get the slug you actually mean.

Entities

An entity is a person or an organization. Every entity must link to at least one domain, which is what stops orphans accumulating.

base entity add

base entity list

base entity get

Accepts the slug or the display name.

base entity update

base reconcile

Read each project’s folder for when it was last touched, and bring its active or deferred state back in line with that.
Run --dry-run first. This decides state from filesystem activity, so a project you have been working on outside its registered folder can look dormant when it is not.