Skip to content

Improvements over Invoke

Invoke Toolkit retains Invoke's Python task functions, contexts, pre/post tasks, aliases, command execution and task chaining. These are not new Toolkit features. Toolkit adds the following library and terminal improvements.

Feature map

Improvement What changes Guide
Terminal ergonomics Rich output, status/live command panels, process titles Rich output
Completion and selection Typed choices/paths, config-aware callbacks, cache/timeouts, Bash/Zsh/Fish, fzf Completion, selection
Portable automation PEP 723 dependency declarations and direct task-script execution with uv PEP 723
Agent discovery JSON listings, scoped lists, changed task definitions, authoring skill AI agents
Typed task inputs Enum/Literal/path conversion and validation, Annotated help/callbacks Typed arguments
Shared automation Local collections, package discovery, entry-point plugins, uv plugin lifecycle Collections, plugins
Configuration Dot-path tools and attrs/cattrs schemas Configuration
Dynamic values Context-aware factories, batched URI text resolvers, managed temporary path files Fields
Reused results Optional persistent task-result caching, TTL and argument-key controls Caching
I/O concurrency Coroutine task bodies and explicit async subprocess/gather APIs Async
Execution utilities Limited synchronous output redaction and temporary process titles Execution
Packaging Copier templates, short names, configuration overrides and provider packages Packages

Complete merged-PR coverage

This index covers all 66 merged pull requests through #152, at source baseline 69f099a. Each row links the originating PR and its current guide. Related fixes are sections within the same guide rather than duplicate manuals. Guide examples follow current source, not stale historical PR snippets.

CI, dependency and release-maintenance changes are retained as maintenance, not claimed as new library APIs. #22 is an autoprint regression test; #44 adds a dependency, not an HTTP client abstraction. The generated package's Python requirement is separate from the library's Python >=3.10 requirement. Invoke 3 compatibility (#114) exposes upstream functionality; it does not mean Toolkit invented wrapper tasks.

Merged PR Current improvement or maintenance scope Documentation
#152: ci: separate test dependencies from developer tooling Maintenance: isolated Nox runner and locked test environments Maintainer notes
#149: fix: update certifi past compromised CA range Maintenance: certifi security update Maintainer notes
#148: fix: include cache authentication backend in fresh checkouts Authenticated cache backend distributed in fresh checkouts Guide
#147: security: authenticate cache values with HMAC-SHA256 before unpickling Cache authentication, safe dependency quoting and security dependency floors Guide
#146: feat: list and highlight Git-changed task definitions [release patch] Git-changed task listing and Rich highlights Guide
#144: perf: speed up shell completion Faster completion; skip installed plugins during completion only Guide
#142: fix: preserve Enter in PTY subprocesses PTY Enter forwarding and terminal restoration fixes Guide
#140: feat: suggest similar task and collection names Similar task, alias and collection-name suggestions Guide
#139: feat: improve fish completion support Fish descriptions, nested and quoted-path completion Guide
#138: feat: manage uv tool plugin lifecycle Persistent uv tool plugin lifecycle Guide
#137: fix: handle macOS PTY stdin buffer overflow macOS PTY stdin buffer handling fix Guide
#135: fix: validate release tags before publishing Maintenance: validated release tags before publication Maintainer notes
#133: fix: prefer main local task namespace Primary local namespace wins over local_tasks.py Guide
#131: chore(deps): bump uv from 0.9.7 to 0.11.15 Maintenance: uv dependency update Maintainer notes
#130: ci: harden GitHub Actions supply chain Maintenance: pinned Actions and release-workflow supply chain Maintainer notes
#128: feat: add dynamic task fields and URI providers Dynamic Fields, URI text resolvers and provider packages Guide
#127: fix: address async task regressions Async hide behavior, mixed sync graphs and grouped tasks Guide
#123: fix: avoid local task module collisions Path-isolated local task module discovery Guide
#121: feat: add async task support Coroutine tasks, native async commands and gather Guide
#120: feat: add --list-tasks and --list-plugins filter flags Separate primary-task and plugin listings Guide
#118: fix: prevent CI hangs from -s flag and unguarded subprocess in proctitle test Maintenance: prevent CI test subprocess hangs Maintainer notes
#116: fix: warn and strip self-referential aliases to prevent RecursionError Self-referential aliases warned and removed Guide
#114: feat!: compatibility with invoke 3.0.3 Invoke >=3.0.3 compatibility; inherited remainder forwarding Guide
#112: feat: updated pyproject.toml PyPI metadata and add release skill Packaging metadata, typed marker and release-authoring skill Guide
#110: feat: add skills/ folder with invoke-toolkit-tasks skill Task-authoring skill for AI agents Guide
#108: ci: fix missing workflow permissions for CodeQL Maintenance: explicit CodeQL workflow permissions Maintainer notes
#107: chore(deps): update black and urllib3 to fix high severity vulnerabilities Maintenance: security dependency updates Maintainer notes
#105: feat: show command output below status spinner Recent command output below Rich status spinners Guide
#104: fix(#39): script() now loads project config when using PEP723 mode Project configuration loaded for script() Guide
#101: feat: thread loaded config into completion callbacks (closes #95) Loaded project configuration in completion callbacks Guide
#100: feat(create): fix collection name and Python version in package template Generated collection names, Python requirement and versioning Guide
#94: feat: add ctx.get_config_value() method and fix completion config Context dot-path config lookup and callback context Guide
#93: feat: Add config.unset command Configuration unset command Guide
#90: feat: Add attrs-based config schemas with validation attrs-based config schemas and validation Guide
#83: feat: use ctx.print_err for fzf fallback messages fzf fallback diagnostics on stderr Guide
#82: refactor: simplify config access in fzf module Maintenance: simpler fzf config access Guide
#81: fix: properly quote fzf arguments containing spaces fzf option values with spaces quoted Guide
#80: feat: add fzf integration for interactive selection with rich fallback fzf selection with reduced Rich fallback Guide
#76: Add timeout and persistent caching for completion callbacks Completion callback timeout and persistent cache Guide
#71: fix: restore config.set positional arguments without --path and --value flags Historical positional config.set repair; current syntax in guide Guide
#65: feat: Fix completion issues and improve config.set Completion without task files; config set handling Guide
#64: feat: Fix completion with -r flag and add shell completion installer Search-root completion and shell completion installer Guide
#62: Fix basedpyright partially unknown type warnings for ctx.print and ctx.cd Maintenance: context print/cd typing improvements Guide
#53: feat: suppress task name completion when completing positional args Suppress unrelated task suggestions for positional values Guide
#52: feat: add config.get and config.set tasks with completion and type validation Config get/set, formats, locations and validation Guide
#51: feat: add cache parameter to @task decorator Optional task-result cache with TTL and cache controls Guide
#50: feat: add proctitle support for setting process title Task and context process titles Guide
#48: feat: add git configurable template endpoint for create.package Git-configurable Copier template source Guide
#44: Add httpx Maintenance: httpx dependency only, no new HTTP API Maintainer notes
#41: extend invoke completion Typed choices, callbacks and path-aware completion Guide
#38: feat: add enum arguments support to tasks (#37) Enum, Literal and optional/union CLI conversion Guide
#36: fix: handle Path objects in autoprint without line breaks Path result autoprint without unwanted line breaks Guide
#34: fix: add ext-name parameter and git repo check to package creation Short extension names and Git-repository creation guard Guide
#33: feat: extensions short names Plugin short collection names and duplicate warnings Guide
#31: Plugin Support with Flat Task Discovery Entry-point plugins and flat package task discovery Guide
#30: fix: implement redaction for subprocess output in ctx.run() Synchronous subprocess output redaction Guide
#29: Enable autocompletion for -x flag with internal collections Built-in -x task completion Guide
#27: rich minimal version 13 Maintenance: Rich minimum version Maintainer notes
#25: Add flag to respect $SHELL, add short-hand for disable-status and tests SHELL initialization and status suppression shorthand Guide
#22: Closes #9 Regression coverage: long-string autoprint remains one line Guide
#21: local_tasks.py support local_tasks.py discovery in local namespace Guide
#19: Disable status Rich status suppression Guide
#17: Exit script() when load_collection is detected [bump patch] Prevent duplicate script() task execution on collection load Guide
#13: Make global context available for scripts Global Context/run/sudo for scripts and REPLs Guide
#11: feat: Add get_config_value helper and config_prefix support for script() Config dot-path lookup and custom script config prefix Guide
#8: Initial support for packages Copier task-package generation Guide

Maintainer notes

Workflow permissions and immutable Action pins (#108, #130), release tag validation (#135), CI subprocess cleanup (#118), dependency updates (#27, #44, #107, #131), and packaging/type metadata (#62, #112) improve maintainability and distribution. They are not additional task execution modes. See the contribution and release workflow and changelog.

The Pages workflow builds documentation on pull requests and deploys successful main builds with narrowly scoped permissions. A repository administrator must first enable GitHub Pages with Actions as its source. Documentation is built with Zensical; its landing and navigation follow the progressive-disclosure pattern of marimo's documentation, without borrowing marimo's product claims.