Generate the next 10 project tasks from project state, git history and an LLM prompt.
Project description
lane
AI Cost Tracking
- 🤖 LLM usage: $1.5846 (25 commits)
- 👤 Human dev: ~$1028 (10.3h @ $100/h, 30min dedup)
Generated on 2026-06-16 using openrouter/qwen/qwen3-coder-next
lane is a Python package that inspects the current project state, reads recent git history, adds a user question for an LLM, and returns a concrete plan for the next 10 engineering tasks.
What is included
- Project snapshot analysis — README, manifests (pyproject.toml, package.json, Cargo.toml, …), directory tree, stack detection
- Git context — recent commits, most-changed files, TODO/FIXME markers
- Advanced code metrics — cyclomatic complexity, coupling analysis, bug hotspots, bus factor detection
- Koru-aware planning — Deep integration with koru framework for intelligent task generation
- Pydantic models — validated data models for tasks and plans (
Task,TaskPlan) - Provider abstraction — pluggable LLM backends; ships with an OpenAI-compatible provider (works with OpenRouter and any OpenAI-style API)
- Planner orchestrator —
generate_next_tasks()composes analysis + prompt + LLM call into a validated TaskPlan - Rich CLI —
lane plan,lane auto,lane metrics,lane print-context,lane print-prompt,lane validate,lane tickets - Reliability —
httpxfor HTTP,tenacityfor automatic retry/backoff,pydantic-settingsfor environment config
Quick start
python -m venv .venv
. .venv/bin/activate
pip install -e .
lane print-prompt .
To generate a real plan, set OPENROUTER_API_KEY or OPENAI_API_KEY and run:
lane plan . --extra-context "What should we build next for this repository?"
Output as JSON:
lane plan . --json
Inspect captured project and git context without calling the LLM:
lane print-context .
Validate a saved plan file:
lane validate plan.json
Analyze code metrics and coupling:
lane metrics .
CLI Reference
lane plan
Generate a 10-task engineering plan for a repository.
Usage:
lane plan [REPO_PATH] [OPTIONS]
Options:
--extra-context, -e TEXT: Additional prompt context for the LLM--model, -m TEXT: Override the LLM model name--base-url TEXT: Override the API base URL--json: Output plan as JSON instead of formatted text--max-commits INTEGER: How many recent commits to inspect (default: 30)
lane print-context
Print the assembled project and git context without calling the LLM.
Usage:
lane print-context [REPO_PATH] [OPTIONS]
Options:
--max-commits INTEGER: How many recent commits to inspect (default: 30)--raw: Print raw text instead of Rich panels
lane print-prompt
Print the full prompt that would be sent to the LLM.
Usage:
lane print-prompt [REPO_PATH] [OPTIONS]
Options:
--extra-context, -e TEXT: Additional prompt context for the LLM--max-commits INTEGER: How many recent commits to inspect (default: 30)
lane validate
Validate a saved JSON plan file against the TaskPlan schema.
Usage:
lane validate PLAN_FILE
lane auto
Auto-generate and sync tickets for the most important work. This is the quickest way to get actionable tickets into your planfile.
Usage:
lane auto [REPO_PATH] [OPTIONS]
What it does:
- Analyzes project for high-priority issues (hotspots, complexity, coupling)
- Generates tickets using koru-aware planning
- Auto-syncs to
.planfile/for execution via koru queue
Options:
--extra-context, -e TEXT: Additional prompt context for the LLM--dry-run: Show what would be done without executing
Example:
# Quick auto mode - analyze, generate, sync
lane auto
# With extra context
lane auto . -e "Focus on security improvements"
# Dry run to preview
lane auto --dry-run
Equivalent to:
lane tickets . --koru-aware --sync-planfile
lane metrics
Display comprehensive code metrics for the project including cyclomatic complexity, change coupling, bug hotspots, and bus factor analysis.
Usage:
lane metrics [REPO_PATH] [OPTIONS]
Options:
--top, -n INTEGER: Show top N items per category (default: 10)--min-coupling FLOAT: Minimum coupling score to display (default: 0.3)
Metrics displayed:
- Cyclomatic Complexity per file (identify complex functions to refactor)
- Coupling Analysis — which files change together frequently (plan refactors together)
- Coupling Clusters — groups of tightly coupled files (sprint planning)
- Bug Hotspots — files with high bug fix rate and code churn
- Bus Factor — files with few authors (knowledge silos)
Example:
# Show metrics for current project
lane metrics .
# Show top 5 with higher coupling threshold
lane metrics . --top 5 --min-coupling 0.5
lane tickets
Generate tickets from a plan using planfile integration.
This command generates tickets from a TaskPlan and optionally syncs them to TODO.md, .planfile/, or exports to planfile YAML format.
Usage:
lane tickets [REPO_PATH] [OPTIONS]
Options:
--extra-context, -e TEXT: Additional prompt context for the LLM--model, -m TEXT: Override the LLM model name--base-url TEXT: Override the API base URL--max-commits INTEGER: How many recent commits to inspect (default: 30)--sync-todo: Sync tasks to TODO.md checkboxes using planfile--sync-planfile: Store tickets in .planfile/ and sync with markdown--export-yaml: Export to planfile YAML format--output, -o PATH: Output file for YAML export--koru-aware: Enable koru integration schema for smart task planning
Examples:
# Generate and display tickets
lane tickets .
# Sync to TODO.md
lane tickets . --sync-todo
# Export to planfile YAML
lane tickets . --export-yaml --output strategy.yaml
# Koru-aware planning (generates tasks referencing koru operations)
lane tickets . --koru-aware --sync-planfile
Note: This feature requires the planfile package. It will be auto-installed if missing.
Configuration
All settings are read from environment variables:
| Variable | Default | Description |
|---|---|---|
OPENROUTER_API_KEY |
— | API key for OpenRouter (preferred) |
OPENAI_API_KEY |
— | API key for OpenAI-compatible endpoint |
LLM_MODEL |
openrouter/qwen/qwen3-coder-next |
Model name |
LLM_BASE_URL |
https://openrouter.ai/api/v1 |
API base URL |
LLM_TIMEOUT |
60 |
HTTP timeout in seconds |
LLM_MAX_RETRIES |
3 |
Number of retry attempts on network error |
MAX_COMMITS |
30 |
How many recent commits to read |
Runtime dependencies
pydantic>=2pydantic-settings>=2typer>=0.12rich>=13httpx>=0.27tenacity>=8
Examples
Generate a plan for a Python project
export OPENROUTER_API_KEY="your-api-key"
lane plan /path/to/project --extra-context "Focus on improving test coverage"
Use a custom model
lane plan . --model "openrouter/anthropic/claude-3.5-sonnet"
Inspect what data is sent to the LLM
lane print-prompt . --extra-context "Review security issues"
Generate a plan and save as JSON
lane plan . --json > plan.json
lane validate plan.json
Analyze a project with limited git history
lane plan . --max-commits 10
Quick auto mode (analyze + generate + sync)
# One command to analyze project and create tickets in planfile
lane auto
# With custom focus
lane auto . -e "Refactor authentication system"
Code metrics analysis
# Full metrics report
lane metrics .
# High coupling files
lane metrics . --top 10 --min-coupling 0.6
Koru-aware planning
lane tickets . --koru-aware --sync-planfile
Architecture
Modules
- lane.project_analyzer — Project analysis (manifests, structure, stack)
- lane.git_reader — Git history analysis
- lane.metrics — Code metrics (complexity, coupling, hotspots)
- lane.koru_context — Koru framework integration
- lane.planner — Orchestrates analysis → LLM → TaskPlan
- lane.providers — Pluggable LLM backends
- lane.ticket_generator — Planfile integration
Development
pip install -e ".[dev]"
PYTHONPATH=src python -m unittest discover -s tests -v
Changelog
0.2.x
- Added
lane autocommand — one-command workflow (analyze + generate + sync) - Added
lane metricscommand (complexity, coupling, hotspots, bus factor) - Added
--koru-awareflag for koru-integrated planning - Added
lane.metricsmodule - Added
lane.koru_contextmodule - Improved Test coverage to 97%
- Improved Refactored CC hotspots
License
Licensed under Apache-2.0.
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 nxdo-0.2.21.tar.gz.
File metadata
- Download URL: nxdo-0.2.21.tar.gz
- Upload date:
- Size: 55.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d11f8e697da9f6efe678dc06f709e8093e84467eb0fc068e698c4e56ba4591d
|
|
| MD5 |
3542d9c7851acee328a827212ff6d720
|
|
| BLAKE2b-256 |
ae169158f965a075296baa838268b653c316ca170355ed1b64fb567491684c65
|
File details
Details for the file nxdo-0.2.21-py3-none-any.whl.
File metadata
- Download URL: nxdo-0.2.21-py3-none-any.whl
- Upload date:
- Size: 42.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6371e9fecf8cd4b1c518e10b425c6150dc998a4d04bcc65c721bbf21ed4fe1e
|
|
| MD5 |
a9683bacda671b655cbce6ef69e71a4a
|
|
| BLAKE2b-256 |
e7377a4dfd0f362deb6cdcbd86f24d91365d05ce3870b7921bf6292e170d82f6
|