<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://python-cli-toolcraft.com/</loc><lastmod>2026-09-18T12:46:41.712Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/about</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/advanced-argument-validation-strategies/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/advanced-argument-validation-strategies/parsing-nested-json-arguments-in-python-clis/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/advanced-argument-validation-strategies/validating-dependent-and-conflicting-options/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/advanced-argument-validation-strategies/validating-file-and-directory-paths-in-clis/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/advanced-argument-validation-strategies/writing-custom-click-parameter-types/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/building-terminal-uis-with-textual/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/building-terminal-uis-with-textual/building-your-first-textual-app/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/building-terminal-uis-with-textual/choosing-between-a-cli-a-prompt-flow-and-a-tui/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/building-terminal-uis-with-textual/testing-textual-apps-with-pilot/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cli-help-output-and-documentation/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cli-help-output-and-documentation/adding-examples-and-epilogs-to-help-output/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cli-help-output-and-documentation/generating-man-pages-and-docs-from-a-cli/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cli-help-output-and-documentation/versioning-and-deprecating-cli-flags/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cli-help-output-and-documentation/writing-help-text-users-actually-read/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cross-platform-terminal-compatibility/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cross-platform-terminal-compatibility/adapting-output-to-terminal-width/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cross-platform-terminal-compatibility/detecting-ci-environments-and-non-interactive-shells/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cross-platform-terminal-compatibility/fixing-unicode-and-encoding-errors-on-windows/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/cross-platform-terminal-compatibility/respecting-no-color-and-force-color/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/choosing-exit-codes-for-cli-tools/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/designing-an-exception-hierarchy-for-a-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/friendly-error-messages-and-tracebacks/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/handling-keyboard-interrupt-cleanly/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/error-handling-and-exit-codes/reporting-machine-readable-errors-in-json-mode/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/config-precedence-flags-env-files-defaults/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/discovering-project-config-files-by-walking-up-directories/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/loading-yaml-configs-safely-in-cli-apps/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/reading-toml-config-with-tomllib/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/handling-configuration-files-env-vars/typed-settings-with-pydantic-settings/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/adding-progress-bars-and-spinners-to-python-clis/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/building-interactive-prompts-and-menus/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/live-dashboards-with-rich-live/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/rendering-tables-and-json-with-rich/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/interactive-terminal-ui-with-rich/theming-rich-output-consistently/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/shell-completion-for-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/shell-completion-for-python-clis/dynamic-completion-values-from-apis-and-files/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/shell-completion-for-python-clis/enabling-tab-completion-in-click-and-typer/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/shell-completion-for-python-clis/installing-shell-completion-for-bash-zsh-fish/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/shell-completion-for-python-clis/testing-shell-completion-in-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/structured-logging-for-cli-apps/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/structured-logging-for-cli-apps/adding-trace-ids-and-context-to-cli-logs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/structured-logging-for-cli-apps/adding-verbose-and-quiet-logging-flags/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/structured-logging-for-cli-apps/structured-json-logging-in-python-clis/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/structured-logging-for-cli-apps/writing-rotating-log-files-from-a-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/detecting-tty-and-adapting-output/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/emitting-json-output-for-scripting/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/handling-broken-pipe-and-sigpipe/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/processing-large-files-and-ndjson-streams/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/advanced-input-parsing-user-experience/working-with-stdin-stdout-and-pipes/reading-piped-input-in-python-clis/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/building-an-api-client-cli-with-httpx/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/downloading-files-with-progress-in-python/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/oauth-device-flow-login-for-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/paginating-api-results-in-a-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/calling-http-apis-from-python-clis/retries-and-backoff-for-cli-http-calls/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/cancelling-async-tasks-on-ctrl-c/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/multiprocessing-for-cpu-bound-cli-tasks/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/parallelising-cli-work-with-thread-pools/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/rate-limiting-concurrent-requests-in-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/concurrency-and-async-in-python-clis/running-async-code-in-typer-and-click/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/cross-platform-paths-with-pathlib/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/file-locking-for-concurrent-cli-runs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/safe-temporary-files-and-directories/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/storing-app-data-with-platformdirs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/filesystem-paths-and-atomic-writes/writing-files-atomically-in-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/long-running-and-watch-mode-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/long-running-and-watch-mode-clis/building-a-watch-mode-with-watchfiles/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/long-running-and-watch-mode-clis/handling-sigterm-and-graceful-shutdown/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/long-running-and-watch-mode-clis/health-checks-and-heartbeats-for-long-running-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/long-running-and-watch-mode-clis/running-a-cli-on-a-schedule-with-cron-and-systemd/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/avoiding-shell-injection-in-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/calling-external-commands-safely-with-subprocess/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/handling-subprocess-timeouts-and-exit-codes/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/streaming-subprocess-output-in-real-time/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/running-subprocesses-from-python-clis/wrapping-git-and-other-tools-from-a-python-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/prompting-for-passwords-securely/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/reading-secrets-from-env-and-files/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/redacting-secrets-from-cli-output-and-logs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/storing-tokens-with-keyring/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/cli-runtime-systems-integration/secrets-and-credentials-in-python-clis/supporting-multiple-profiles-and-accounts/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/cli-startup-performance-and-lazy-loading/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/cli-startup-performance-and-lazy-loading/caching-expensive-work-between-cli-runs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/cli-startup-performance-and-lazy-loading/lazy-loading-subcommands-for-faster-startup/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/cli-startup-performance-and-lazy-loading/profiling-python-cli-startup-time/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/cli-startup-performance-and-lazy-loading/reducing-cli-dependency-weight/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/argparse-subparsers-for-subcommands/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/argparse-vs-click-vs-typer-comparison/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/migrating-from-argparse-to-typer/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/mutually-exclusive-options-in-argparse/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/command-line-parsing-with-argparse/writing-custom-argparse-actions/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/designing-cli-interfaces-and-conventions/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/designing-cli-interfaces-and-conventions/adding-dry-run-and-confirmation-to-destructive-commands/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/designing-cli-interfaces-and-conventions/following-posix-and-gnu-argument-conventions/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/designing-cli-interfaces-and-conventions/global-options-vs-per-command-options/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/designing-cli-interfaces-and-conventions/naming-commands-and-flags-consistently/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/plugin-architectures-for-extensible-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/plugin-architectures-for-extensible-clis/discovering-plugins-with-entry-points/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/plugin-architectures-for-extensible-clis/hook-based-plugins-with-pluggy/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/plugin-architectures-for-extensible-clis/versioning-a-plugin-api/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/plugin-architectures-for-extensible-clis/writing-a-plugin-for-an-existing-cli/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/best-practices-for-python-cli-entry-points/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/dependency-injection-patterns-for-cli-commands/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/how-to-structure-a-large-python-cli-project/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/sharing-common-options-across-commands/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/structuring-multi-command-python-clis/sharing-state-with-click-context-objects/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/end-to-end-testing-an-installed-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/measuring-cli-test-coverage/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/mocking-filesystem-and-network-in-cli-tests/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/property-based-testing-cli-arguments-with-hypothesis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/snapshot-testing-cli-output/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/testing-click-commands-with-clirunner/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/testing-python-cli-applications/testing-interactive-prompts-and-stdin/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/building-a-cli-with-subcommands-in-click/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/building-dynamic-commands-in-click/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/converting-a-click-app-to-typer/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/typer-callback-functions-explained/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/modern-python-cli-frameworks-architecture/typer-vs-click-when-to-use-each/using-annotated-options-in-typer/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/automating-releases-from-git-tags/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/caching-uv-dependencies-in-ci/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/publishing-to-pypi-with-trusted-publishing/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/smoke-testing-the-built-wheel-in-ci/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/ci-cd-pipelines-for-python-clis/testing-a-cli-across-python-versions-with-github-actions/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/cli-project-scaffolding-with-cookiecutter/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/cli-project-scaffolding-with-cookiecutter/building-a-cookiecutter-template-for-typer-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/cli-project-scaffolding-with-cookiecutter/copier-vs-cookiecutter-for-cli-templates/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/cli-project-scaffolding-with-cookiecutter/post-generation-hooks-in-cli-templates/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/building-cross-platform-release-binaries-in-ci/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/bundling-a-python-cli-with-pyinstaller/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/homebrew-and-scoop-packaging-for-python-clis/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/nuitka-vs-pyinstaller-for-python-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/distributing-clis-as-standalone-binaries/shipping-a-cli-as-a-zipapp-with-shiv/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/linting-and-type-checking-cli-code/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/linting-and-type-checking-cli-code/configuring-ruff-for-a-cli-project/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/linting-and-type-checking-cli-code/enforcing-import-boundaries-in-a-cli-codebase/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/linting-and-type-checking-cli-code/type-checking-click-and-typer-code-with-mypy/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/managing-cli-versioning-changelogs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/managing-cli-versioning-changelogs/automating-changelogs-with-conventional-commits/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/managing-cli-versioning-changelogs/deriving-versions-from-git-tags-with-hatch-vcs/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/managing-cli-versioning-changelogs/exposing-version-info-and-build-metadata/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/managing-cli-versioning-changelogs/semantic-versioning-policy-for-cli-tools/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/building-wheels-and-sdists-for-python-clis/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/bundling-data-files-with-importlib-resources/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/installing-and-distributing-clis-with-pipx/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/publishing-a-python-cli-to-pypi/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/packaging-python-clis-for-distribution/writing-pyproject-toml-metadata-for-a-cli/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/poetry-workflows-for-cli-development/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/poetry-workflows-for-cli-development/migrating-a-cli-from-poetry-to-uv/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/poetry-workflows-for-cli-development/poetry-dependency-groups-for-cli-tooling/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/poetry-workflows-for-cli-development/poetry-entry-points-and-scripts-for-clis/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/pre-commit-hooks-for-cli-projects/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/pre-commit-hooks-for-cli-projects/setting-up-pre-commit-for-python-cli-repos/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/pre-commit-hooks-for-cli-projects/shipping-your-cli-as-a-pre-commit-hook/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/pre-commit-hooks-for-cli-projects/writing-local-pre-commit-hooks-in-python/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/uv-for-python-cli-dependency-management/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/uv-for-python-cli-dependency-management/running-one-off-cli-scripts-with-uv-run/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/uv-for-python-cli-dependency-management/uv-init-vs-poetry-init-for-cli-tools/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/uv-for-python-cli-dependency-management/uv-tool-install-vs-pipx-for-clis/</loc><lastmod>2026-07-05T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/uv-for-python-cli-dependency-management/uv-workspaces-for-multi-package-clis/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/virtual-environments-isolation-best-practices/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/virtual-environments-isolation-best-practices/managing-virtual-environments-for-cross-platform-clis/</loc><lastmod>2026-06-17T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/virtual-environments-isolation-best-practices/pinning-the-python-version-for-a-cli/</loc><lastmod>2026-08-01T00:00:00.000Z</lastmod></url><url><loc>https://python-cli-toolcraft.com/project-setup-dependency-management/virtual-environments-isolation-best-practices/supporting-multiple-python-versions-with-nox/</loc><lastmod>2026-09-18T00:00:00.000Z</lastmod></url></urlset>