Skip to content

Core Concepts

Gest manages three primary entity types -- tasks, artifacts, and iterations -- and connects them through links, tags, and metadata. All data is stored as plain files that you can inspect and version-control alongside your code.

Tasks

A task represents a unit of work. Tasks are stored as TOML files and have the following properties:

FieldDescription
titleShort summary of the work
descriptionLonger explanation (Markdown)
statusCurrent state of the task
priorityUrgency level, 0 (highest) through 4 (lowest)
phaseNumeric execution phase for parallel grouping
assigned_toActor responsible for the task
tagsFreeform labels for filtering and grouping
metadataArbitrary key-value pairs (TOML table)
linksRelationships to other tasks or artifacts

Task Statuses

StatusMeaning
openNot yet started (default)
in-progressActively being worked on
doneCompleted successfully
cancelledAbandoned or no longer needed

done and cancelled are terminal statuses. Resolved tasks are excluded from listings and searches by default; pass --all to include them.

Priority

Priority is a number from 0 to 4, where 0 is the most urgent. Priority is optional; tasks without a priority are treated as unprioritized rather than defaulting to any level.

Phase

Phase is a numeric label used to group tasks for parallel execution inside an iteration. Tasks in the same phase have no ordering dependency on each other and can run concurrently. Lower phase numbers execute first.

Artifacts

An artifact is a document -- a spec, ADR, RFC, design note, or any other prose output generated during development. Artifacts are stored as Markdown files with YAML frontmatter.

FieldDescription
titleDocument title (extracted from # heading if not set)
bodyMarkdown content
typeDocument kind (freeform string, e.g. spec, adr, rfc)
tagsFreeform labels for filtering
metadataArbitrary key-value pairs (YAML mapping)
archived_atTimestamp set when the artifact is archived

Artifact Types

The type field is a freeform string. Common conventions include:

TypeDescription
specProduct or feature specification
adrArchitecture Decision Record
rfcRequest for Comments
noteGeneral-purpose document

You are free to use any value that fits your workflow.

Archiving

Artifacts can be archived with gest artifact archive <id>. Archived artifacts are hidden from listings and searches by default, but remain on disk. Use --all to include them in queries.

Iterations

An iteration groups related tasks into an execution plan. Iterations are stored as TOML files and track which tasks belong to them, along with their phase assignments.

FieldDescription
titleName of the iteration
descriptionGoal or scope of the iteration (Markdown)
statusCurrent state of the iteration
tasksList of task IDs that belong to this iteration
tagsFreeform labels
metadataArbitrary key-value pairs (TOML table)
linksRelationships to other entities

Iteration Statuses

StatusMeaning
activeCurrently in progress (default)
completedAll tasks finished successfully
failedIteration did not succeed

Dependency Graphs

Use gest iteration graph <id> to visualize the phased execution plan. The graph shows tasks grouped by phase, with dependency edges derived from blocked-by / blocks links between tasks. This makes it clear which tasks can run in parallel and which must wait.

Managing Tasks in an Iteration

sh
gest iteration add <iteration-id> <task-id>      # add a task
gest iteration remove <iteration-id> <task-id>   # remove a task

Linking

Links create typed relationships between entities. When you link two tasks, gest automatically creates the reciprocal link on the target.

Relationship Types

TypeInverseMeaning
blocksblocked-bySource must complete before target can start
blocked-byblocksSource waits on target
parent-ofchild-ofSource is the parent of target
child-ofparent-ofSource is a child of target
relates-torelates-toGeneral association (symmetric)

Link a task to another task:

sh
gest task link <source-id> blocks <target-id>

Link a task to an artifact (no reciprocal link is created):

sh
gest task link <source-id> relates-to <artifact-id> --artifact

Tagging and Metadata

Tags

Tags are freeform string labels. Add them at creation time with --tags or after the fact:

sh
gest task tag <id> "api,security"
gest task untag <id> "security"

Use tags to filter listings:

sh
gest task list --tag api
gest artifact list --tag design

Metadata

Metadata stores arbitrary key-value pairs on any entity. Set values with the -m flag at creation time or through the meta subcommand:

sh
gest task meta <id> set complexity high
gest task meta <id> get complexity

Task and iteration metadata is stored as TOML. Artifact metadata is stored as YAML in the frontmatter.

Global vs Local Stores

Gest supports two storage modes:

  • Global store (default): Data lives in your system data directory (~/.local/share/gest/ on Linux, ~/Library/Application Support/gest/ on macOS). This is shared across all projects on the machine.
  • Local store: Data lives in a .gest/ directory inside your project. This is useful when you want to version-control gest data alongside your code or keep tasks scoped to a single repository.

Initialize with gest init for global or gest init --local for local. When a .gest/ directory exists in the current project, gest uses it automatically; otherwise it falls back to the global store.

File Layout

Tasks are stored as individual TOML files and artifacts as individual Markdown files with YAML frontmatter. This makes the data inspectable with standard tools, diffable in code review, and portable between machines.

Released under the MIT License.