# Packaging for the toolkit checker. # # Apache-2.0, decided 2026-09-08, chosen over MIT for the patent grant: if the # attestation registry this package is a step toward ever means anything, it # means it with a patent grant behind it. # # The `Private :: Do Not Upload` classifier that used to sit in the list below # was removed in the same commit that added LICENSE and NOTICE, which is the # condition its own comment set for removing it. # # The name was decided on 2026-09-08 and is no longer a placeholder. README.md is # this package's description on PyPI, so what it says about publication is a # public claim rather than a note to ourselves: rebuild the dist after editing # it, or the index serves the previous version of that claim. # # setuptools>=77 is not cosmetic. `license = "Apache-2.0"` is the PEP 639 SPDX # form, and on setuptools 61 to 76 it is read as the old free-text field and the # build fails. Do not lower this bound without changing that line back. [build-system] requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [project] name = "glitch-toolkit" version = "0.1.4" description = "Install and verify bounded-autonomy practices in a repository worked on by AI agents" readme = "README.md" license = "Apache-2.0" license-files = ["LICENSE", "NOTICE"] # 3.9, not 3.8, and the correction is the point rather than an embarrassment. # 0.1.0 claimed >=3.8 and could not honour it: the build backend above is # setuptools>=77, and no release of setuptools at or above 77 runs on 3.8, so # `pip install .` from the sdist fails there. The published wheel would have # installed, which is exactly why nobody noticed — the claim was never checked # by anything. Now .github/workflows/tests.yml builds on 3.9, so it is. requires-python = ">=3.9" keywords = ["claude", "agents", "guardrails", "governance", "ci"] classifiers = [ "Environment :: Console", "Intended Audience :: Developers", "Programming Language :: Python :: 3", "Topic :: Software Development :: Quality Assurance", ] # No runtime dependencies, and this is a promise rather than a coincidence. # The checker has to run in a stranger's repository on the first day, before # they have installed anything. Adding one is a product decision. dependencies = [] # The MCP server is the one thing here that needs anything, and it is optional # for that reason. `glitch` keeps its promise; `glitch-mcp` asks first and says # so plainly when the SDK is absent rather than dying on an ImportError. [project.optional-dependencies] mcp = ["mcp>=2.0"] # Where the PyPI sidebar sends people. Without this table there is no Homepage, # no Source and no Issues link, which for a package whose success is measured in # issues from strangers is a self-inflicted wound. # # These point at the PUBLIC mirror, not at the private monorepo the package is # developed in. A Source link a stranger cannot open is worse than none. [project.urls] Homepage = "https://github.com/AbstractGlitch/glitch-toolkit" Source = "https://github.com/AbstractGlitch/glitch-toolkit" Issues = "https://github.com/AbstractGlitch/glitch-toolkit/issues" [project.scripts] glitch = "glitch.cli:main" glitch-mcp = "glitch.mcp_server:main" [tool.setuptools] package-dir = {"" = "src"} [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] glitch = [ "_assets/scripts/*.py", "_assets/skills/*/SKILL.md", "_assets/templates/*", ]