Focal
For engineers who contribute to many GitHub repos and want structured project management — without the overhead, without context switching, without leaving the terminal.
Focal gives you one personal Kanban board that stays in sync with every project you contribute to, plus a full PM CLI for running delivery end-to-end: epics, stories, iteration planning, retros, and velocity — all in GitHub issues and markdown.
Works entirely from the terminal, no AI required. Add an agent later to accelerate — not to unlock.
AI-ready when you are — Focal ships with AGENTS.md so any
capable agent can set it up, run PM commands, and manage your backlog on your
behalf. For deeper integration, focal skill install wires Focal into your
agent as an MCP server — every PM command becomes a callable tool.
The problem
If you're an engineer contributing across many repos, planning your day means opening every project board one by one — context switching before you've written a single line of code. And when it comes to planning a release, you're either reaching for a separate PM tool (another context switch) or keeping it in your head (no record, no accountability).
Most teams also spend energy maintaining the process itself — updating boards, attending standups for status, fielding "where are we on X?" questions. Focal makes the process self-maintaining: the board syncs automatically, plans and retros are committed to the repo, and anyone can see current status without interrupting the engineer.
Focal solves this by working inside GitHub — not beside it:
- One board, every repo — open issues assigned to you flow onto a single personal Kanban board automatically; status changes push back to every origin project
- GitHub-native, no new tool — everything Focal creates lives in GitHub issues and markdown files; no new login, no new subscription, no data silo
- PM in the terminal — epics, stories, iteration planning, retros, velocity — all committed alongside your code, readable by anyone with repo access
- Engineer as their own PM — planning is a CLI command, not a dashboard to maintain; every plan, retro, and design doc lives in git on the same timeline as your code
- What-if before you commit — model the impact of PTO, scope injection, or a re-estimate before touching the plan
- Opinionated conventions that scale — every repo initialized with Focal works the same way; engineers across many projects never re-learn a planning setup
- Works without an agent — fully interactive terminal prompts mean no AI required; add an agent later to accelerate, not to unlock
→ Full breakdown and comparisons
What it does
Board sync
| Without Focal | With Focal |
|---|---|
| Open 5 project boards to see what's assigned to you | One board aggregates everything automatically |
| Update status on your board, then update every origin project board too | Move a card once — status pushes back to every origin project automatically |
| Closed or unassigned issues linger on your board until you remove them manually | Closed or unassigned issues move to Done automatically |
PM CLI — epics, stories, iteration planning, retros, and velocity — all in GitHub issues and markdown, without leaving the terminal.
Install
bash <(curl -fsSL https://raw.githubusercontent.com/leninmehedy/focal/main/install.sh)
The installer handles Python, pipx, and focal-cli in one step, then prompts
you to run focal board setup — an interactive wizard that creates your GitHub
Projects board and asks which repos to watch.
Set up with an AI agent
Open Claude Code (or any agent that can fetch a URL) and paste:
Set up Focal from https://raw.githubusercontent.com/leninmehedy/focal/main/AGENTS.md
The agent installs Focal, runs the wizard, verifies sync, and sets up the hourly scheduler — no manual steps required.
For a deeper integration, install Focal as an MCP skill so your agent can call every PM command as a structured tool — no CLI invocations needed:
focal skill install claude # writes to ~/.claude/settings.json
focal skill install cursor # writes to ~/.cursor/mcp.json
Once set up, you can drive everything in plain language:
- "Add leninmehedy/focal to my sync"
- "Plan I1 — 2-week sprint, me and @bob at 8 SP each, starting Monday"
- "What's our iteration status?"
- "Walk me through the I1 retro — we hit our goal" — agent asks follow-up questions for went-well, to-improve, and action items
- "What slips if I'm out next week?"
- "We just got a security fix dropped in — what gets pushed to I2?"
Docs
| Why Focal? | The motivation, philosophy, and design principles behind Focal |
| User Guide | Install, board sync, PM CLI, scheduler, troubleshooting |
| PM Guide | Full project management workflow — design docs, epics, delivery cycle |
| Testing Guide | Beta testing — test cases for every command |
| AGENTS.md | Full command reference for AI agents |
Metadata
Release files for focal-cli 1.16.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| focal_cli-1.16.0.tar.gz | 159.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| focal_cli-1.16.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 251.7 kB
Release files / focal_cli-1.16.0.tar.gz
| Download URL | focal_cli-1.16.0.tar.gz |
|---|---|
| Size | 159.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
63ad7c33891347cc3ba650bd71f8be110de35231f19078f0d9c5bdc565ec5ab3
|
|
BLAKE2b-256 checksum How to use checksums |
7926c629064c7ec2a35aaf06c88856142c60f143f89490ecb02146ceb0d7f288
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.
Transparency logRelease files / focal_cli-1.16.0-py3-none-any.whl
| Download URL | focal_cli-1.16.0-py3-none-any.whl |
|---|---|
| Size | 92.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c1c2fac268d40c19140a5d2205cf2c14f0b1378878128a15db8dc0a3925ffcc4
|
|
BLAKE2b-256 checksum How to use checksums |
df38ea7e6ea6fd151902fdf8989297be422e39cd32b0eb02a62b194e08a61ddd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.
Transparency log