Skip to main content

A tiny, extensible tool for organizing multi-repository development work

Project description

QEN: A Developer Nest for Multi-Repo Innovation

QEN ("קֵן", nest in Biblical Hebrew) is a tiny, extensible tool for organizing multi-repository development work. A "qen" is a lightweight context—a safe, structured "nest"—where complex feature development can incubate across multiple repos.

QEN gathers all context for a project (code, specs, artifacts, etc.) into a single managed folder inside a central meta repository.

Quick Start

1. Initialize qen

From within or near your meta repository:

qen init

This finds the meta repo, extracts your organization from git remotes, and stores configuration in $XDG_CONFIG_HOME/qen/config.toml.

2. Create a project

qen init my-project

This creates:

  • Git branch: YYYY-MM-DD-my-project
  • Project directory: proj/YYYY-MM-DD-my-project/
  • Configuration files:
    • README.md - Project documentation stub
    • pyproject.toml - Repository configuration with [tool.qen] section
    • repos/ - Gitignored directory for sub-repositories
  • User config: $XDG_CONFIG_HOME/qen/projects/my-project.toml

The project is automatically set as your current project.

3. Add repositories

cd meta/proj/YYYY-MM-DD-my-project/

# Add a repository using different formats
qen add https://github.com/myorg/myrepo    # Full URL
qen add myorg/myrepo                       # org/repo format
qen add myrepo                             # Uses org from config

# Add with specific branch
qen add myorg/myrepo --branch develop

# Add with custom path
qen add myorg/myrepo --path repos/custom-name

The repository will be:

  • Cloned to repos/myrepo/
  • Added to pyproject.toml in the [[tool.qen.repos]] section
  • Tracked with its URL, branch, and local path

4. Next steps

# Check status across all repos (planned)
qen status

# Sync changes across repos (planned)
qen sync

Current Status

Implemented:

  • qen init - Initialize qen configuration
  • qen init <project> - Create new project with branch, directory structure, and configuration
  • qen add - Add sub-repositories to current project with flexible URL formats

Planned:

  • qen status - Show git status across all sub-repos
  • qen sync - Push and pull sub-repos

Philosophy

QEN is intentionally small. It creates structure without dictating workflow.

Design principles:

  • Context over configuration - Minimal manifests, maximum clarity
  • Always latest - Work with current branches (checkpoints optional)
  • Zero global state - XDG-compliant configuration per project
  • Human-readable - Simple directory structures and TOML configs

Development

Setup

# Install with dev dependencies
uv pip install -e ".[dev]"

# Git hooks are automatically installed when you run tests
./poe test

Git Hooks

The project uses pre-commit to maintain code quality:

  • pre-commit: Runs linting (ruff) and type checking (mypy) before each commit
  • pre-push: Runs the full test suite before pushing

Hooks are automatically installed when you run ./poe test for the first time.

To manually manage hooks:

# Install hooks explicitly
./poe setup-hooks

# Run pre-commit checks manually
uv run pre-commit run --all-files

# Run pre-push checks manually (including tests)
uv run pre-commit run --hook-stage pre-push --all-files

Testing

# Run tests
./poe test

# Run tests with coverage
./poe test-cov

# Type checking
./poe typecheck

# Lint and format
./poe lint

# Version management
./poe version                    # Show current version
./poe version -b patch           # Bump patch, commit (no push)
./poe version --tag              # Create release tag v0.1.2, push everything
./poe version --dev              # Create timestamped dev tag v0.1.2-dev.YYYYMMDD.HHMMSS, push

Project Structure

src/
├── qen/          # Main CLI and project management
│   ├── cli.py              # Command-line interface
│   ├── config.py           # QEN configuration management
│   ├── project.py          # Project creation and structure
│   ├── git_utils.py        # Git operations
│   ├── repo_utils.py       # Repository URL parsing and cloning
│   ├── pyproject_utils.py  # pyproject.toml management
│   └── commands/
│       ├── init.py         # Init command implementation
│       └── add.py          # Add command implementation
└── qenvy/        # Reusable XDG-compliant config library
    ├── storage.py          # Profile-based config storage
    ├── base.py             # Core config management
    ├── formats.py          # TOML/JSON handlers
    └── types.py            # Type definitions

License

MIT License

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

qen-0.1.4.tar.gz (147.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qen-0.1.4-py3-none-any.whl (57.3 kB view details)

Uploaded Python 3

File details

Details for the file qen-0.1.4.tar.gz.

File metadata

  • Download URL: qen-0.1.4.tar.gz
  • Upload date:
  • Size: 147.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qen-0.1.4.tar.gz
Algorithm Hash digest
SHA256 0a25241c8ef2cea53aaa719731957ffa6716c550959be50d54651b5fee89640d
MD5 f1a2839cc37c60d7d8d59b6acd62d81c
BLAKE2b-256 1daf7ce16ebbdac54157dc1eae5a5959f5faccf2fd43799336ad340b45bda021

See more details on using hashes here.

Provenance

The following attestation bundles were made for qen-0.1.4.tar.gz:

Publisher: publish.yml on data-yaml/qen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qen-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: qen-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 57.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qen-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 597a896e75251af9bda26bd4c7bebe962bca9c47f6b61e7cd42567c363dc0cd5
MD5 04388fd5b5d96314916fde37a88a71a1
BLAKE2b-256 de828254fc36dea1166025941c443ae9d1f0e1e835ed829444171e9f3f26c1da

See more details on using hashes here.

Provenance

The following attestation bundles were made for qen-0.1.4-py3-none-any.whl:

Publisher: publish.yml on data-yaml/qen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page