Feature Map
Cross-app architecture research CLI. Agents and engineers keep authoritative
feature maps in .features/*.yaml; feature-map lists, searches, validates,
and graphs them.
A wiki stores architecture as prose — agents re-read a whole page to find three
files. Feature Map stores fields (purpose, entry_points, apps) and a
CLI that returns names and sections, so lookup is cheap and check can
prove paths still exist.
Install
pip install feature-map-cli
npm install -g feature-map-cli
brew install markschellhas/tap/feature-map
Requires Python 3.8+ and PyYAML (the npm package installs the PyPI CLI into a
local venv). The CLI is feature-map. Install from PyPI or npm as
feature-map-cli — pip install featuremap is a different (biology) project,
and feature-map is blocked on PyPI as too similar to that name.
Usage
cd my-repo
feature-map init
feature-map init auth # scaffold .features/auth.yaml
feature-map list
feature-map search billing
feature-map validate
feature-map init is idempotent. It:
- Creates
.features/ - Copies the agent skill to
.agents/skills/feature-map/(or.grok/skills/if that tree already exists), and mirrors it into any other known harness directory the repo already uses - Adds extra copies for
--skill-dir DIR/skill_dirs:targets - Writes
.feature-map.yamldefaults when missing - Appends an
AGENTS.mdblock naming the skill's path (skip with--no-agents) - Writes
bin/feature-mapas a repo-local shim (skip with--no-shim) - Offers to launch your agent harness (claude, cursor-agent, opencode, grok,
codex, gemini, pi) to scour the repo and author the first maps. Skip the
prompt with
-yand pick a harness directly with-h <name>(e.g.feature-map init -y -h claude).
Skill directories are harness-neutral. .agents/skills/ stays the primary
target; a known harness is additionally mirrored only when the repo already
uses it (its config directory exists), so init never seeds an agent tree
nobody asked for. Known: .agents/skills, .claude/skills, .grok/skills.
For anything else, name it yourself — --skill-dir .my-agent/skills, or
skill_dirs: in .feature-map.yaml — and it is always written.
Upgrade the CLI, then refresh the skill (every location) after a new package version:
feature-map update
feature-map init --upgrade-skill
Commands
| Command | Purpose |
|---|---|
list |
All feature slugs |
show <name> / <name> |
Print a map (or --section) |
viewer [--no-open] [--timeout SECONDS] |
Local read-only browser view of all maps (does not write HTML into the repo) |
search <query> |
Full-text search |
find <path> |
Reverse lookup by path fragment |
graph [name] |
related_features graph (mermaid, json, dot) |
validate [--strict] |
Structural checks |
check |
Stale entry_points / core_components paths |
impact <file> |
Which maps reference a file |
stats |
Coverage summary |
init [-y] [-h <harness>] [--skill-dir DIR] |
Bootstrap repo; optionally launch a harness to author maps |
init <name> [--force] |
Scaffold a map from the template |
install |
Setup status |
update |
Upgrade this CLI via pip, npm, brew, pipx, or uv |
idea [text] |
Capture a multi-line idea into docs/ideas/ |
--json / --version |
Machine output / version |
Exit codes: 0 ok, 1 user error, 2 validation failure (--strict).
Per-repo config
.feature-map.yaml at the git root:
features_dir: .features
apps:
- api
- web
required_sections:
- purpose
- entry_points
min_cli_version: "1.0.0"
skill_dirs:
- .my-agent/skills
apps prefixes are used by check when resolving paths. skill_dirs adds
skill mirror targets for harnesses the CLI does not know about.
Develop
Published PyPI, npm, and Homebrew installs lag this tree. Work from a
checkout with an editable install so feature-map on PATH is the code
you are editing. Use a virtualenv (required on PEP 668 / Homebrew Python):
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]" # same as `make install`
python -m pytest -q # same as `make test`
feature-map --version
Edits under src/feature_map/ take effect immediately. Dogfood against
another repo by keeping the venv activated and cd-ing there, or from
that repo: pip install -e /path/to/feature-map. python -m feature_map
is the same CLI as the console script.
Do not iterate via npm install -g feature-map-cli or brew install:
those pull the last published PyPI version. feature-map update
refuses a source/editable checkout on purpose.
To test the packaged wheel without uploading:
python -m pip install -U build
rm -rf dist && python -m build
pip install dist/feature_map_cli-*.whl
Uninstall with pip uninstall -y feature-map-cli, then return to
pip install -e ".[dev]". Full notes: GUIDE.md (Local
development).
License
MIT
Metadata
Release files for feature-map-cli 1.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| feature_map_cli-1.2.7.tar.gz | 67.6 kB | With provenance | Details for feature_map_cli-1.2.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| feature_map_cli-1.2.7-py3-none-any.whl | Python 3 | none | any | Details for feature_map_cli-1.2.7-py3-none-any.whl |
Total release size: 138.2 kB
Release files / feature_map_cli-1.2.7.tar.gz
| Download URL | feature_map_cli-1.2.7.tar.gz |
|---|---|
| Size | 67.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bc7edc0206493c6724bf1a8d73dae108ffed51852a058caefb0679ea77690fad
|
|
BLAKE2b-256 checksum How to use checksums |
e59f4beb1fb9c7c21b925828c49f65443acc6f4c2627db6e712c2e3bfd25dc76
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 26, 2026.
Transparency logRelease files / feature_map_cli-1.2.7-py3-none-any.whl
| Download URL | feature_map_cli-1.2.7-py3-none-any.whl |
|---|---|
| Size | 70.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9fece0c21332340cd696121ef8d95170459627f1e40bfe15d38c778dd43064bd
|
|
BLAKE2b-256 checksum How to use checksums |
0628c00f5823cab921f290ea03e6ccdd1aae0963e917f241f4726fbe7b4a8d50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 26, 2026.
Transparency logSecurity for feature-map-cli 1.2.7
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for feature_map_cli-1.2.7.tar.gz
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 Sep 26, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.