Metadata-Version: 2.4
Name: dekk
Version: 1.6.5
Summary: Reusable environment detection, activation, and wrapper tooling for developer CLIs.
Project-URL: Homepage, https://github.com/randreshg/dekk
Project-URL: Documentation, https://github.com/randreshg/dekk/tree/main/docs
Project-URL: Repository, https://github.com/randreshg/dekk
Project-URL: Issues, https://github.com/randreshg/dekk/issues
Project-URL: Changelog, https://github.com/randreshg/dekk/blob/main/CHANGELOG.md
Author-email: Randres Herrera <randres2011@gmail.com>
Maintainer-email: Randres Herrera <randres2011@gmail.com>
License: MIT
License-File: LICENSE
Keywords: cli,conda,detection,developer-tools,environment,toolchain,workspace
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: platformdirs>=4.9.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: questionary>=2.0.0
Requires-Dist: rich>=13.0.0
Requires-Dist: tomli-w>=1.0.0
Requires-Dist: tomli>=2.0.0; python_version < '3.11'
Requires-Dist: typer>=0.9.0
Provides-Extra: all
Requires-Dist: tully>=0.1.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: build>=1.2.1; extra == 'dev'
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pytest-cov>=4.1; extra == 'dev'
Requires-Dist: pytest-mock>=3.12; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.2; extra == 'dev'
Requires-Dist: twine>=5.0.0; extra == 'dev'
Requires-Dist: types-psutil>=7.0.0.20260302; extra == 'dev'
Requires-Dist: types-pyyaml>=6.0.12.20250915; extra == 'dev'
Provides-Extra: tracking
Requires-Dist: tully>=0.1.0; extra == 'tracking'
Description-Content-Type: text/markdown

# dekk

Make project CLIs runnable with one config and zero manual activation.

## Install

```bash
pipx install dekk
```

Fallback:

```bash
python -m pip install --upgrade dekk
```

## Minimal Setup

```bash
dekk install ./tools/cli.py
```

If `.dekk.toml` is missing, `dekk install` and `dekk wrap` create a starter
file from the repo context first.

Explicit template-driven setup is still available:

```bash
dekk init --example conda
eval "$(dekk activate --shell bash)"
```

Optional (no activation after this):

```bash
dekk wrap myapp ./tools/cli.py
```

Worktree-safe default:

```bash
dekk install ./tools/cli.py        # no shell rc PATH edits by default
dekk install ./tools/cli.py --update-shell
```

## Project Command Routing

All project commands go through `dekk <appname>`, which finds the nearest
`.dekk.toml` and runs with `cwd` set to that project root:

```bash
dekk myapp                   # project-aware help
dekk myapp --help
dekk myapp server --port 8080
dekk myapp build
dekk myapp test
```

This is worktree-friendly by default:

- `dekk` walks up from your current directory to find the nearest `.dekk.toml`
- the app name must match `[project].name`
- the command runs with `cwd` set to that project root, not whatever nested
  directory you happened to be in
- activation is scoped to that project config before the command runs

That means `dekk myapp server` works correctly from a repo root, a nested
subpackage, or a separate Git worktree for the same project, without relying
on global shell state.

## Built-in Project Tools

Built-in tools (`setup`, `agents`, `worktree`) are project-scoped — they require
the app name so dekk knows which project context to use:

```bash
dekk myapp setup
dekk myapp agents init
dekk myapp agents generate --target all
dekk myapp worktree create feature-x --base main
dekk myapp worktree list
```

Why the app name? Because `dekk` resolves paths from your current directory.
The app name selects the project (validates against `[project].name` in
`.dekk.toml`), and all paths resolve relative to that project root. This
makes every command worktree-safe — it works correctly from any checkout.

### Agents

Source of truth: `.agents/`

```bash
dekk myapp agents init
dekk myapp agents generate --target all
dekk myapp agents clean --target codex
dekk myapp agents install        # optional (installs Codex skills to ~/.codex/skills)
```

Generated files: `AGENTS.md`, `CLAUDE.md`, `.cursorrules`, `.github/copilot-instructions.md`, `.agents.json`

### Worktrees

```bash
dekk myapp worktree create feature-x --base main
dekk myapp worktree list
dekk myapp worktree remove feature-x
dekk myapp worktree prune
```

Worktrees with `.dekk.toml` get automatic environment setup on creation.
Auto-scaffolded as an agent skill via `dekk myapp agents init` for git repos.

## Inheriting Tools in Downstream CLIs

CLIs built with `dekk.Typer` can also inherit these tools directly,
useful when worktree isolation is not a concern:

```python
from dekk import Typer

app = Typer(
    name="myapp",
    auto_activate=True,
    add_doctor_command=True,
    add_version_command=True,
    add_worktree_command=True,
    add_agents_command=True,
)
```

## Docs

- [Getting Started](docs/getting-started.md)
- [.dekk.toml Specification](docs/spec.md)
- [Agent Workflows](docs/agents.md)
- [Worktree Management](docs/worktree.md)
