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]"

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 version (commit only)
poe version -b minor --tag     # Bump minor, create release tag v0.X.0, push
poe version -b major --dev     # Bump major, create dev tag v1.0.0-dev, 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.2.tar.gz (95.2 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.2-py3-none-any.whl (32.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: qen-0.1.2.tar.gz
  • Upload date:
  • Size: 95.2 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.2.tar.gz
Algorithm Hash digest
SHA256 682617712435f9c0844f589759d0e44e170b6f5b180baa99f8ee8727531b406c
MD5 cba1e0041f57341f1b50514a6ecb2376
BLAKE2b-256 dc2bfa61d9f9fce0901eda4300255a07e18a5cb3bf02d4d697bbcc223b74e6d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for qen-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: qen-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 32.9 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d3cf76052a3643607cf30bf56732c8bce3c5a59ab21ec84c2622b104c9c779c1
MD5 eeb80c3acb2caecc1868a6d8abeb1551
BLAKE2b-256 007d4ab7402aa2244a2fccba2edf0471c7e93ac57059c46674e534533c8d1c4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for qen-0.1.2-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