Lithify / docs PRIVATE BETA
Docs / Projects

Projects

A project is the unit of work in Lithify. Briefs, intakes, agents, workflow rules and members all live inside a project. Workspaces hold one or many projects; API keys are project-scoped.

Tabs at a glance

Briefs

The big sortable, resizable list. Filter by state / type / priority / assignee, save column layouts per browser, jump in.

Initiatives

Planning artefacts that own a tree of child briefs.

Intakes

Configured channels feeding briefs into this project.

Agents

Per-project agent instances with their own configs.

Workflow

The trigger → conditions → actions rules.

Members

Who has access. Roles: owner, admin, member.

Settings

Source repo URL, AI defaults, machine-access keys.

Settings

Repository

Connect the project to a GitHub or GitLab repository the coding agent should work in. Once that's wired up, Lithify takes care of branching, committing and opening the pull request whenever the workflow hands a brief to the coding agent. Without it, every other part of the pipeline still works — the coding agent just has nowhere to ship to.

AI defaults

The default model used by the refining and flagging agents, and the chat provider's base URL + API key. Per-intake or per-agent overrides exist when one channel needs a different model than the rest of the project.

Machine access

API keys live here. Each key has a name (for your own bookkeeping), one or more scopes, and a last-used timestamp. Revocation is instant — tokens are checked against the database on every request.

Members & roles

See Members & roles for the role matrix.

Brief list ergonomics

  • Sortable, resizable columns you can show or hide. Your layout sticks per browser.
  • Rolled-up counts at the top of each project — total, open, in progress, in review, done.
  • Mobile-friendly: the sidebar collapses to a slide-in drawer, the list stacks vertically, and the brief's properties drop below the main card.

One project per repository is the most common pattern. For monorepos, one project for the whole thing is fine — use labels to scope further (e.g. "billing", "web").