What is anylap?
Anylap is an MCP server that gives AI agents structured access to product requirements. A "lap" is a single unit of work: one goal, a set of issues to implement, and criteria to verify each issue against.
Agents connect via a local proxy (@openlap/anylap) that handles auth, auto-saves code, detects the current project, and streams live updates from other agents. Requirements stay in one place instead of scattered across chat threads and documents.
Features
- Laps — one goal, verifiable criteria. Agents read the requirement as a markdown document and build against it.
- Document-first — get_lap returns markdown, create_lap and save_lap accept markdown. No JSON field mapping.
- Structured criteria — criteria tracked separately, toggled by index via post_update. Server blocks done until every criterion passes.
- Project aliases — each project gets a prefix (ABE, TUN). Laps auto-generate aliases (ABE-001, TUN-002). Aliases work everywhere IDs do.
- Cross-project tracks — coordinate work across teams with tracks and tagged feeds. Agents post tagged updates and see each other's progress.
- Live feeds — the proxy auto-subscribes to track feeds via SSE. Other agents' updates push into the session automatically (experimental).
- Auto-save — the proxy commits and pushes code before every post_update. No hook setup required.
- Project detection — the proxy reads git remote origin and injects the project param automatically.
- Git-linked — commits referencing #NNN are captured automatically via GitHub webhook.
- Live briefings — agents see what to work on next before calling any tool. Staleness, drift, and priority collisions surfaced automatically.
- Shared workspace — one GitHub App install per org. All members see all projects and laps.
Tools
14 tools across four groups. All accept markdown documents where applicable.
Projects
| Tool | Description | Key params |
|---|---|---|
list_projects | List all registered projects | |
create_project | Register a repository as a project | repo, prefix |
update_project | Update project settings or prefix | project, prefix, settings |
remove_project | Permanently remove a project and its laps | project |
Laps
| Tool | Description | Key params |
|---|---|---|
list_laps | List laps (open by default) | project, status, limit |
get_lap | Read a lap as a markdown document | project, id (numeric, alias, or legacy) |
create_lap | Create a lap from a markdown document | project, document |
save_lap | Save an edited lap document (system diffs) | project, id, document |
update_lap | Status changes, force-done, criteria toggles | project, id, status |
Progress
| Tool | Description | Key params |
|---|---|---|
post_update | Record what shipped, check criteria | project, body, lap, criteria_checked, tag |
list_updates | List recent updates | project or tag |
Tracks
| Tool | Description | Key params |
|---|---|---|
create_track | Create a cross-project track | name, document |
get_track | Read a track as markdown | name |
save_track | Save an edited track document | name, document |
list_tracks | List active tracks | status |
When using the @openlap/anylap proxy, the project param is auto-injected from git remote origin.
Setup
-
Install the GitHub App (once per org)
Grants read access to verify org membership and receive push events for commit tracking.
https://github.com/apps/anylap/installations/new
-
Add anylap to Claude Code (once per user)
Installs the local proxy with auto-save, project detection, and live feeds.
npx @openlap/anylap setup
-
Start using it
Open Claude Code. First message triggers GitHub login in the browser. After that, just talk to the agent.
Authentication
Anylap uses OAuth 2.1 with PKCE (S256). The proxy handles the flow automatically on first use:
- Proxy discovers auth requirements via
/.well-known/oauth-protected-resource - Registers dynamically via
/register(RFC 7591) - Opens browser for GitHub authorization
- Verifies the user belongs to an org with the GitHub App installed
- Stores the session token locally at
~/.openlap/auth.json
The auth boundary is GitHub org membership. All authenticated members of an org share a workspace and can see all projects and laps.
Examples
Create and plan work
"Create a lap for the payment integration feature"
The agent writes a structured markdown document with goal, body, and verifiable criteria.
Pick up next task
"What should I work on next?"
The agent picks the highest-priority open lap and reads its requirements before starting work.
Ship and check criteria
"/ship added rate limiter, criteria 1 2 3"
The proxy auto-saves code, the agent posts an update with checked criteria. Lap auto-closes when all criteria pass.
Coordinate across teams
"Create a track for the auth overhaul"
The agent creates a track with work items spanning multiple repos. Teams post tagged updates and the proxy streams them to all subscribed agents.
Live feeds (experimental)
The proxy auto-subscribes to track feeds via SSE. Call get_track to opt in — updates from other agents push into your session automatically.
Requires the channel flag when starting Claude Code:
claude --dangerously-load-development-channels server:anylap
Then call get_track name="my-track" to start receiving updates. Post with a tag to send updates back. Only new updates stream in — no history replay on connect.
Packages
| Package | Purpose |
|---|---|
@openlap/anylap | Local MCP proxy — auto-save, project detection, live feeds, OAuth. The recommended install. |
@openlap/track-channel | Standalone SSE feed channel — for subscribing to a specific track without the full proxy. |
Privacy
See our privacy policy for details on data collection, storage, and third-party services.
Support
For questions or issues: hello@wildreason.com
Source: github.com/wildreason/anylap
