Personal command center for GitHub — one Kanban board that stays in sync with every project you contribute to, plus a full project management CLI.
Project description
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 |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file focal_cli-1.16.0.tar.gz.
File metadata
- Download URL: focal_cli-1.16.0.tar.gz
- Upload date:
- Size: 159.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63ad7c33891347cc3ba650bd71f8be110de35231f19078f0d9c5bdc565ec5ab3
|
|
| MD5 |
8b906107f2bd643652a3ba4762296f23
|
|
| BLAKE2b-256 |
7926c629064c7ec2a35aaf06c88856142c60f143f89490ecb02146ceb0d7f288
|
Provenance
The following attestation bundles were made for focal_cli-1.16.0.tar.gz:
Publisher:
publish.yml on leninmehedy/focal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
focal_cli-1.16.0.tar.gz -
Subject digest:
63ad7c33891347cc3ba650bd71f8be110de35231f19078f0d9c5bdc565ec5ab3 - Sigstore transparency entry: 1755338045
- Sigstore integration time:
-
Permalink:
leninmehedy/focal@0f09a05e4245030c2985bbac40a2afc8bdcbcbb0 -
Branch / Tag:
refs/tags/v1.16.0 - Owner: https://github.com/leninmehedy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f09a05e4245030c2985bbac40a2afc8bdcbcbb0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file focal_cli-1.16.0-py3-none-any.whl.
File metadata
- Download URL: focal_cli-1.16.0-py3-none-any.whl
- Upload date:
- Size: 92.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1c2fac268d40c19140a5d2205cf2c14f0b1378878128a15db8dc0a3925ffcc4
|
|
| MD5 |
7835bdea2a1122bdd295e9a4f17e5d10
|
|
| BLAKE2b-256 |
df38ea7e6ea6fd151902fdf8989297be422e39cd32b0eb02a62b194e08a61ddd
|
Provenance
The following attestation bundles were made for focal_cli-1.16.0-py3-none-any.whl:
Publisher:
publish.yml on leninmehedy/focal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
focal_cli-1.16.0-py3-none-any.whl -
Subject digest:
c1c2fac268d40c19140a5d2205cf2c14f0b1378878128a15db8dc0a3925ffcc4 - Sigstore transparency entry: 1755338096
- Sigstore integration time:
-
Permalink:
leninmehedy/focal@0f09a05e4245030c2985bbac40a2afc8bdcbcbb0 -
Branch / Tag:
refs/tags/v1.16.0 - Owner: https://github.com/leninmehedy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f09a05e4245030c2985bbac40a2afc8bdcbcbb0 -
Trigger Event:
release
-
Statement type: