Internal Linear, for agents.
Local issue boards for solo work and agent fleets — markdown files, not a SaaS.
Website · Install · Quick start · Commands
Agents need issue IDs, status, priorities, labels, sub-issues, blockers, and comments — not a sticky note in chat.
internalist keeps all of that as plain markdown under .internalist/ in your repo. No cloud, no account, no sync. Works great for humans too via a local watch UI.
It’s also faster for agents than tracking work over MCP: list, create, update, and close run as local CLI calls with no round-trip waiting on an MCP server or hosted issue API.
Requires Bun ≥ 1.0.
bun install -g github:joshjkns/internalistThen either command works — il is a short alias for internalist:
internalist --help
il --helpcd your-project
# one-time board setup
il init --prefix INT --name my-app
# create work
il create --title "Ship auth flow" --priority 3 --label core
il create --title "Write tests" --parent INT-1
# move things along
il update INT-1 --status in_progress
il list --tree
il close INT-1
# local Linear-style board (live reload)
il watch --port 4280Staged create (prompts for title, priority, labels) if you omit flags:
il create| Feature | Notes |
|---|---|
| Statuses | backlog → todo → in_progress → done (+ canceled) |
| Priority | 0–4 (none → urgent) |
| Labels | Freeform tags on each issue |
| Sub-issues | --parent INT-1 trees |
| Blockers | block INT-5 --by INT-2 — INT-2 must finish first |
| Comments | Activity threads per issue |
| Batch | Create / update / close many at once |
| Watch UI | Local web board with live reload |
| Agent skill | internalist skill --install |
Issues live as markdown + YAML frontmatter. Comments as JSON. Gitignored by default.
| Command | What it does |
|---|---|
init |
Create .internalist/ board |
create |
New issue (flags or interactive) |
list |
Filter / tree / JSON |
get <id> |
Show one issue |
update <id…> |
Patch title, status, priority, labels, parent, body |
close / reopen |
Done ↔ open |
delete <id…> |
Remove (blocked if children exist) |
block / unblock |
Blocker edges |
comment <id> |
Add or list comments |
watch |
Local board UI |
skill --install |
Install agent skill |
path |
Print board root |
IDs look like INT-12 ({prefix}-{n}).
il list --status in_progress --tree
il list --label core --json
il update INT-1 INT-2 --status todo
il close INT-3 INT-4
il block INT-5 --by INT-2
il comment INT-1 --body "Blocked on KMS" --author Nova
il create --batch --file issues.ndjsonil skill --install(or point your agent atpackages/cli/skills/internalist/SKILL.md)initonce per project- Plan → create issues / sub-issues → claim (
in_progress) → work →close - Prefer
--jsonwhen parsing output
Agents may use eitherinternalistoril— same binary.
.internalist/
config.json
issues/
INT-1.md
comments/
INT-1.json
No database. No network. Your disk, your gitignore.
Live preview and install copy: internalist.jooo.sh
MIT
