TacT Agent Kit
Good engineering takes tact.
A guide for developers and agents to make sound decisions, deliver working results,
and keep important choices visible.
Get started · Collaboration · Agent entry
The idea
TacT takes its name from tact: a sense of proportion and consideration in how people work together. It gives engineering delivery and the developer's interaction experience equal weight. The agent should advance the work and provide evidence, while the developer can observe, learn, and guide important choices when they still matter.
Install and initialize
Requires Python 3.11 or newer. The CLI has no runtime dependencies. The distribution name is tact-agent-kit; the executable is tact. After the first PyPI release, install with:
uv tool install tact-agent-kit
Before that release, or when developing locally, install from this checkout with uv tool install .. Then preview and initialize a project:
tact --version
# Preview first, then initialize an existing project directory.
tact init /path/to/project --dry-run
tact init /path/to/project
# From inside the target project, the path defaults to the current directory.
tact init
The project can use any language; it does not need a Python environment. TacT installs the bundled Markdown locally without fetching rules during initialization:
your-project/
├── AGENTS.md # Existing text plus a marked TacT reading instruction
├── .tact/
│ ├── AGENTS.md # Shared Kit entry
│ ├── LICENSE # MIT license for the shared Kit
│ ├── core/ # Shared topic guidance
│ ├── project/
│ │ ├── README.md # Guide for project-owned notes and supplements
│ │ └── notes.md # Project-owned notes, with a short introduction
│ └── manifest.json # Package version, source URL, and shared-file hashes
└── .agents/skills/tact/
├── SKILL.md # Discoverable entry pointing to this project's Kit
└── agents/openai.yaml # Codex UI name, description, and starting prompt
Review and commit AGENTS.md, .tact/, and .agents/skills/tact/ with your project. Put local constraints and supplements in .tact/project/; files already there are preserved. Existing root-level core/ or project/ directories and other skills are left intact. The root entry tells the agent to read the Kit and project notes before substantive work, and establishes .tact/ as the base for the Kit's relative paths.
Repeated initialization with the same package leaves matching files untouched and restores missing files. --dry-run lists proposed writes and shows the root entry diff without creating files or directories. Existing shared files, version metadata, or a TacT entry block that differ cause initialization to stop with differences for review. There is no implicit upgrade or force-overwrite option.
TacT checks for conflicts before writing. It also rejects symbolic links at managed paths and a nonempty root AGENTS.override.md, which would hide the normal entry in Codex. Resolve those conditions explicitly before retrying. If a filesystem error interrupts writing, the command reports that partial files may remain; inspect them before retrying. Matching files are safe to reuse.
Initialization preserves existing instructions but does not interpret conflicts between their meaning and the Kit. Check actual agent loading and behavior using the adoption guide. Installing a newer CLI does not change any initialized project.
Select TacT as a skill
Starting with version 0.1.3, initialization also installs one project-local tact skill. It directs the agent to this project's .tact/ entry and notes, including when the working directory is a nested folder. The full guidance stays in .tact/; the skill is an additional entry alongside the root AGENTS.md reading instruction.
In Codex CLI or the IDE extension, use /skills or type $tact to select it. In clients with a skill selector, look for TacT Agent Kit. Codex detects local skills automatically; restart it if the new skill does not appear. The exact selector UI depends on the client; installing a skill does not register a separate built-in /tact command. See the official skill documentation for discovery locations and invocation.
For a project initialized with an older release, upgrade the installed CLI and run tact refresh as shown below to add the skill. Both skill files are tracked by .tact/manifest.json, so local edits and conflicting files are reported before any writes. Keep project-specific guidance in .tact/project/ instead of editing the shared skill. Installing only the skill folder globally is not supported: its links expect the project's .tact/ snapshot.
Refresh an initialized project's documents
tact refresh applies the documents bundled with the installed TacT package to a selected project. It does not download or upgrade the CLI. After installing a newer package, refresh a project's snapshot explicitly:
# Reinstall from your TacT checkout while developing locally.
uv tool install --reinstall /path/to/TacT
tact --version
tact refresh /path/to/project --dry-run
tact refresh /path/to/project
refresh compares each shared file with its recorded installation hash in .tact/manifest.json. Files that still match that baseline can be replaced with the bundled version. A file already matching the new bundle is also accepted, allowing an interrupted refresh to resume. Local changes or an untracked file occupying a new shared path stop the entire plan before any writes; the command shows the differences for review. A missing or invalid manifest also stops the refresh. Files missing from the new package require manual review; this command does not remove them automatically.
Project guidance is preserved. The only existing project file refreshed automatically is notes.md when it exactly matches a known untouched generated template, including the original source-only template. This adds the introduction and refreshes its version line. Once notes have been edited, they remain unchanged; the manifest is the authoritative record of the currently installed package, even if custom notes retain an older source line.
The preview shows all proposed file differences. Replacements are atomic per file, with the manifest written last. The entire refresh is not a filesystem transaction: if a write fails, inspect the reported partial changes before retrying. Repeating a completed refresh makes no changes.
Find your way
| If you want to… | Start with |
|---|---|
| Bring the Kit into a project | Adoption guide |
| Understand how developers and agents work together | Collaboration guide |
| See the agent's boundaries and topic index | AGENTS.md |
The shared Kit is AGENTS.md plus core/. Each adopting project owns its project/ layer inside the Kit root. CLI installations record their package version and shared-file hashes. Manual copies should use files from one Git commit and record that commit in the adopting project's notes.
Develop and build
# Reinstall so tests use the current bundled Markdown as well as current code.
uv run --reinstall-package tact-agent-kit python -m unittest discover -s tests -v
# Build the source distribution, then build its wheel.
uv build
Edit shared guidance at AGENTS.md, core/, and project/README.md, and the skill at skills/tact/. The skill's relative links target its installed location under .agents/skills/tact/. Hatchling includes these sources in the installed tact_resources namespace; no second editable copy is maintained. The source repository's project/notes.md and project/verification.md are not distributed as adopting-project defaults. When editing guidance during development, reinstall the package to refresh the bundled resource snapshot, including for editable installs.
The build produces a source archive and wheel in dist/. You can install a built wheel with uv tool install /absolute/path/to/the.whl. Both distributions include the MIT license. Initialization and refresh also include it in .tact/LICENSE alongside the shared guidance.
Publish a release
GitHub Actions handles publishing through PyPI Trusted Publishing. The publishing workflow builds the source distribution and its wheel, checks metadata and README rendering, and runs the CLI tests against the installed wheel. Pushes to main and pull requests run these checks. Publishing a GitHub Release also uploads the tested distributions to PyPI; ordinary commits do not publish a package.
Before the first release, enable two-factor authentication on your PyPI account and add a pending publisher in account Publishing:
| Field | Value |
|---|---|
| PyPI project name | tact-agent-kit |
| GitHub owner | MerlinSMQWQ |
| Repository | TacT |
| Workflow filename | publish.yml |
| Environment | pypi |
Use the pypi GitHub environment for this publishing job. No PyPI API token or repository secret is needed. A pending publisher creates the PyPI project on its first successful publication; registering it alone does not reserve the name.
For each release, update the version in pyproject.toml and uv.lock, commit the intended files, and publish a GitHub Release with the matching v tag, such as v0.1.3. The tag must point to the commit containing those files and the workflow. The workflow refuses to publish if the tag differs from the package version. Use a new version for later changed distributions. After the workflow succeeds, verify installation from PyPI with uv tool install --reinstall tact-agent-kit.
License
TacT is distributed under the MIT License.
Source and migration
The migration record explains how the Kit was split from the complete authoring source, what was verified, and what remains to be tried. The English baseline is preserved for comparison and fallback.
Metadata
Release files for tact-agent-kit 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tact_agent_kit-0.1.3.tar.gz | 44.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tact_agent_kit-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.6 kB
Release files / tact_agent_kit-0.1.3.tar.gz
| Download URL | tact_agent_kit-0.1.3.tar.gz |
|---|---|
| Size | 44.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
881c4951aedf6e523f05407ca4855adfdc39cc02cd7cd9b054330c67baf7ef9f
|
|
BLAKE2b-256 checksum How to use checksums |
b4ff836e813b46236ca99beafea859c7d321a6d5f990909b3b107cbcc5184eb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / tact_agent_kit-0.1.3-py3-none-any.whl
| Download URL | tact_agent_kit-0.1.3-py3-none-any.whl |
|---|---|
| Size | 52.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
77767daa5f86ce8bbe1a72d34051899545a23e692dbc71761c5e30db13e9a10b
|
|
BLAKE2b-256 checksum How to use checksums |
800a19c8726b524e40a1dbd369f84882506164798148af46a1b9e4f2a4fe597e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for tact-agent-kit 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for tact_agent_kit-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.