Skip to main content

Create isolated feature worktrees with allocated runtime environments.

Project description

new-feature

new-feature aims to eliminate friction for creating new features. In a single command, it creates isolated git worktrees, allocates conflict-free runtime values, runs project-defined setup and teardown commands (such as creating and deleting a feature database), and launches the configured coding agent in the new worktree.

Install

uv tool install new-feature
new-feature setup

new-feature setup launches the configured coding agent (Codex by default) in the current repository. The agent inspects the project, proposes a repository-specific configuration, asks about unresolved choices such as the optional Codex hook, and waits for approval before editing. Run it again to review and improve an existing integration.

Documentation

The documentation site uses this README as its homepage and generates its API reference from package docstrings. Build it before committing documentation changes:

uv run mkdocs build --strict

To preview the site locally with live reload, run uv run mkdocs serve. Pushing to main builds and deploys the site through GitHub Pages.

Usage

# Ask an agent to configure or improve new-feature for this repository.
new-feature setup
# Create a feature worktree and launch the configured agent.
new-feature my-feature
# Create a feature worktree without launching another agent.
new-feature my-feature --no-agent
# Merges the worktree into the main branch
new-feature merge my-feature
# Run configured teardown and remove the feature worktree.
new-feature teardown my-feature
# Teardown a worktree even if it has uncommitted work.
new-feature teardown my-feature --force
# Inspect managed features and diagnose stale state.
new-feature list
new-feature doctor
new-feature doctor --repair

Project Config

Add config to the target repo's .new-feature.toml:

target_branch = "main"
default_agent = "codex"
agents = { codex = ["codex"], claude = ["claude"] }
push = false
setup = ["uv sync"]
pre_merge = ["uv run pytest"]
post_merge = ["uv run pytest"]
teardown = []

[env]
WEB_PORT = { allocate = "port", min = 3000, max = 3999 }
API_PORT = { allocate = "port", min = 4000, max = 4999 }
DATABASE_NAME = { allocate = "name", prefix = "myapp", max_length = 63 }
CACHE_DIR = { allocate = "path", base = ".new-feature/cache" }

All settings remain optional. If both .new-feature.toml and pyproject.toml exist, .new-feature.toml takes precedence. For projects that prefer to keep tool configuration in pyproject.toml, place the same settings under [tool.new-feature] and use [tool.new-feature.env] instead of [env].

default_agent is the configured agent name used when --agent is omitted. Codex and Claude are built in; agents adds or overrides named commands and fixed arguments. new-feature appends its generated feature prompt as the final argument, so agents that require a prompt flag can be configured directly:

default_agent = "custom"
agents = { custom = ["custom-agent", "--prompt"] }

Use a configured agent for one invocation, or pass an executable command directly:

new-feature my-feature --agent claude
new-feature my-feature --agent "fooagent --baz-flag"
new-feature setup --agent claude

When the value exactly matches a key in agents, that configured command is used. Otherwise, new-feature parses the value as an executable command without invoking a shell.

The built-in create and setup prompts can be overridden with create_prompt and setup_prompt in TOML, or for one invocation with --prompt.

setup runs after worktree creation; teardown runs before worktree removal.

Supported env entries:

  • { value = "literal" }
  • { allocate = "port", min = 3000, max = 3999 }
  • { allocate = "integer", min = 1, max = 15 }
  • { allocate = "name", prefix = "myapp", max_length = 63 }
  • { allocate = "slug", prefix = "myapp" }
  • { allocate = "path", base = ".new-feature/cache" }

Lifecycle

new-feature my-feature creates branch my-feature and worktree .worktrees/my-feature, reserves env values in .new-feature/manifest.toml, runs setup, and launches the configured agent in the worktree. It automatically adds .new-feature/ and .worktrees/ to .gitignore. If setup fails, it runs a forced teardown so the partial worktree, branch, and manifest entry do not linger.

new-feature list shows each managed feature and its current Git/worktree state. new-feature doctor reports stale manifest entries, dirty worktrees, unmerged branches, and configuration drift. doctor --repair removes only manifest entries whose worktree and branch are both already gone.

new-feature merge my-feature runs pre-merge checks in the feature worktree, starts a no-commit merge into the target branch, runs post-merge checks on the merged target checkout, commits the merge only if those checks pass, and pushes only when push = true.

new-feature teardown my-feature runs the configured teardown commands before removing the worktree, deleting the branch, and removing the manifest entry. If the worktree has uncommitted changes or the branch has commits that are not in the target branch, pass --force to abandon them deliberately.

Codex hook

Install the Codex hook in the current repository:

new-feature install-codex-hook

This writes .codex/hooks.json; Codex loads the guard only for this trusted repository. The guard protects the configured target branch from direct agent edits and requires Git worktree creation and removal to go through the managed new-feature lifecycle.

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

new_feature-1.1.2.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

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

new_feature-1.1.2-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file new_feature-1.1.2.tar.gz.

File metadata

  • Download URL: new_feature-1.1.2.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for new_feature-1.1.2.tar.gz
Algorithm Hash digest
SHA256 671a1c8ccce45e0fff2767cefb9ebc2a3a2f271f9511b6348a7e3a08c428c250
MD5 f1230ced9e747f10e55ae4327988a9c8
BLAKE2b-256 5c3fe122b86a985f3b474139e51660ab960d4b5cbfb6ce3ee7f5d12faf77ef87

See more details on using hashes here.

Provenance

The following attestation bundles were made for new_feature-1.1.2.tar.gz:

Publisher: publish.yml on crypdick/new-feature

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

File details

Details for the file new_feature-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: new_feature-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for new_feature-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4e5677bf2e63ba2abcf11ccb194ad3f7493c492a43ba12ae55d7adb5f41b4fc4
MD5 940d37c0faa48a146ec36c75cd31ac6d
BLAKE2b-256 26592bc3bd3d22b3b952a0f9bc7e980f23c1c83c27e1636ec38b8c49d94f85ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for new_feature-1.1.2-py3-none-any.whl:

Publisher: publish.yml on crypdick/new-feature

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