slog

Headless project management
for AI-first teams

Slog runs in your terminal, your AI, and your chat tools. No dashboards required.

Works where you work
$  CLI
Claude
Slack
:// curl
bash
# create a task from anywhere in your terminal $ slog tasks create --team PLAT --title "Fix auth bug" --priority HIGH created PLAT-42 Fix auth bug TODO HIGH # list open tasks for your team $ slog tasks list --team PLAT --status IN_PROGRESS PLAT-39 Migrate user table IN_PROGRESS HIGH PLAT-42 Fix auth bug TODO HIGH # mark done when shipped $ slog tasks update PLAT-42 --status DONE updated PLAT-42
Claude Code
you
What's left on the auth sprint? Close anything I already shipped.
claude
Let me check the auth sprint via slog.
mcpsearch({ query: "auth sprint", status: "TODO", team: "PLAT" })
Found 3 open items. PLAT-42 (Fix auth bug) looks done based on your recent commits — marking it done now. PLAT-41 (SSO integration) is blocked on a vendor key, I've flagged it. 2 items remain.
mcpchange_task_status({ id: "PLAT-42", status: "DONE", note: "shipped in PR #918" })
acme-eng
channels
# general
# eng
# slog
# releases
PM
priya  9:41 AM
/slog create "Update onboarding copy" assign @taylor sprint design-q2
SL
slog app  9:41 AM
Created PROJ-143 · Update onboarding copy
Assigned → @taylor  ·  Sprint: design-q2
T
taylor  9:58 AM
/slog close PROJ-143 — shipped in PR #884
SL
slog app  9:58 AM
✓ Closed PROJ-143
bash
# every operation is a plain HTTP call $ curl -X POST https://slog.ai/tasks \ -H "Authorization: Bearer sk-slog-••••••••" \ -H "Content-Type: application/json" \ -d '{"title":"Fix auth bug","team":"PLAT","priority":"HIGH"}' { "id": "PLAT-42", "title": "Fix auth bug", "status": "TODO", "priority": "HIGH", "assignee": { "name": "Chris", "email": "chris@acme.com" }, "created_at": "2026-05-04T09:41:00Z" }

What is headless project management?

Headless means without a user interface, but what really makes slog different is that it is designed to be used from terminals and chats.

Why do I need project management?

Having your agent track work in an .md file is perfect when you work by yourself. As soon as you need to collaborate with teammates, then some kind of project management is necessary. Slog is as light-weight as possible. Just enough to know what is up next, what people are working on, and when work is done.

Does headless mean I can't use a UI?

Actually the opposite: headless means that many UIs are possible, you can choose the type of UI that is best for you. And each person on your team can the UI they like the best: CLI, AI agent, Slack, Teams, web.

You don't need an agent in your project management system.
You need a project management system in your agent.

Get started

Up and running in a few minutes using the cloud server.

1
Install the CLI
Requires Node 20+. Installs the slog command globally.
$ npm install -g @slog-ai/cli
2
Create your workspace
Create an account and initialize your workspace. Signup auto-detects Claude Code and offers to install the MCP integration.
$ slog auth signup ? Email: you@acme.com ? Your name: Alex ? Workspace name: acme Verification code sent to you@acme.com ? Enter the 6 digit verification code: 482910 Workspace created Logged in to workspace: acme
3
Create your first task
Create and assign a task from the terminal.
$ slog tasks create --team WORK --title "Ship it" --priority HIGH created WORK-1 Ship it TODO HIGH
4
Add slog to your agent
Add slog as an MCP server to your agent using the URL: https://slog.ai/mcp

API reference

Full documentation →
Base URL https://slog.ai
POST /tasks Create a task
Body parameters
ParameterTypeRequiredDescription
title string required Title of the task.
priority string optional LOW | MEDIUM | HIGH | URGENT. Defaults to MEDIUM.
assignee string optional User ID to assign the task to.
project string optional Project ID to add the task to.
Response
{ "id": "PLAT-42", "title": "Fix auth bug", "status": "TODO", "priority": "HIGH", "assignee": { "name": "Chris", "email": "chris@acme.com" }, "created_at": "2026-05-04T09:41:00Z" }
GET /tasks List tasks
Query parameters
ParameterTypeRequiredDescription
status string optional Filter by status: TODO | IN_PROGRESS | IN_REVIEW | BLOCKED | DONE | CANCELLED.
team string optional Filter by team ID or prefix (e.g. PLAT).
project string optional Filter by project ID.
limit integer optional Max results. Default 50, max 200.
Response
{ "data": [ { "id": "PLAT-42", "title": "Fix auth bug", "status": "TODO", "priority": "HIGH" } ], "total": 1, "cursor": null }
PATCH /tasks/{id} Update a task
Body parameters
ParameterTypeRequiredDescription
status string optional TODO | IN_PROGRESS | IN_REVIEW | BLOCKED | DONE | CANCELLED.
priority string optional New priority level.
assignee string optional Reassign to a different user handle.
note string optional Append a note to the task activity log.
Response
{ "id": "PLAT-42", "status": "DONE", "updated_at": "2026-05-04T10:15:00Z" }
GET /projects List projects
Query parameters
ParameterTypeRequiredDescription
team string optional Filter by team ID or prefix.
Response
{ "data": [ { "id": "proj_abc123", "name": "Auth Sprint Q2", "team": "PLAT", "task_count": 8 } ] }