Spec-first development plugins for Codex and Claude Code
Project description
Telos
Spec-first plugins for Codex and Claude Code.
Telos adds a lightweight workflow around a project-root SPEC.md:
- define the contract first
- implement against the frozen spec
- evaluate against measurable acceptance criteria
The repository ships:
- a Python CLI package:
telos-kit - a Codex plugin
- a Claude Code plugin marketplace bundle
For Korean documentation, see README_KR.md.
What Telos does
Telos is built around three commands/skills:
spec: clarify requirements and writeSPEC.mdimpl: implement strictly from a frozenSPEC.mdeval: verify the implementation against the spec
It also installs non-blocking hooks that warn when code is edited without a frozen SPEC.md.
Requirements
- Python 3.10+
- Codex CLI for Codex plugin installation
- Claude CLI / Claude Code for Claude plugin installation
If a CLI is missing, Telos still copies the plugin files and prints the manual next step.
Installation
Install the package from PyPI:
python3 -m pip install telos-kit
Install plugins:
telos install codex
telos install claude
telos install all
This repository also keeps shell wrappers for GitHub-based installation:
bash install.sh codex
bash install.sh claude
bash install.sh all
Those wrappers install the local package first when possible, then run the same CLI flow.
Installed plugin locations
Codex
Telos installs the Codex plugin into:
~/plugins/telos/
~/.agents/plugins/marketplace.json
After installation or update, restart Codex completely and review the Telos hook with /hooks.
Codex command surface:
$spec
$impl
$eval
Claude Code
Telos installs the Claude marketplace bundle into:
~/.telos/claude-marketplace/
The user plugin id is:
telos@telos-kit
Claude command surface:
/telos:spec
/telos:impl
/telos:eval
During installation, Telos removes its own legacy global Claude files and hook entries, but leaves unrelated user settings in place.
Workflow
1. Create or refine the spec
Start with the spec command for feature work:
$spec
/telos:spec
The spec flow asks focused questions, fills SPEC.md, and only marks the spec as frozen after the ambiguity check passes.
2. Implement from the frozen spec
$impl
/telos:impl
The implementation flow expects:
SPEC.mdto exist in the current project root- the status to be
frozen - acceptance criteria to be concrete enough to implement against
3. Evaluate against the spec
$eval
/telos:eval
The evaluation flow runs:
- mechanical checks first
- semantic review against acceptance criteria
- optional consensus review for high-risk or uncertain cases
Hooks
Telos installs non-blocking hooks for code edits.
Behavior:
- if
SPEC.mdis missing, warn - if
SPEC.mdis stilldraft, warn - if the file edit is not code-like, do nothing
These hooks are advisory. They do not block edits.
Updating
There are two separate layers to update:
- the
telos-kitpackage - the installed plugin files in the user environment
Reapply plugin files from the current package
Use:
telos update codex
telos update claude
telos update all
telos update reuses the install flow. It reapplies the plugin files from the currently installed telos-kit package.
Upgrade the package, then reapply plugins
To move to the latest published package first:
python3 -m pip install --upgrade telos-kit
telos update all
Check update status
Use:
telos update-status codex
telos update-status claude
telos update-status all
telos update-status all --json
Important: update-status compares the installed plugin against the versions recorded in a Telos repository checkout. By default it looks for:
./src/telos_kit/kit_versions.json
That means it is most useful when run from this repository, or when --project-root points to a Telos checkout:
telos update-status all --project-root /path/to/telos
JSON output uses a per-target status object:
[
{
"target": "codex",
"status": "up-to-date",
"installed_version": "0.4.0",
"latest_version": "0.4.0",
"update_available": false
}
]
Possible status values:
up-to-dateupdate-availablenot-installedunknown
Version model
Telos tracks separate versions for:
- the Python package
- the Codex plugin bundle
- the Claude plugin bundle
Installed plugins record their applied version in:
.telos-version.json
The source of truth for packaged plugin versions in this repository is:
src/telos_kit/kit_versions.json
Repository layout
src/telos_kit/
cli.py
installers.py
update_status.py
resources/
codex/telos/
claude-marketplace/plugins/telos/
tests/
install.sh
Development
Run the test suite used by the package:
PYTHONPATH=src python3 -m unittest
Or run a narrower set while iterating:
PYTHONPATH=src python3 -m unittest tests.test_cli tests.test_installers tests.test_update_status tests.test_versions
Run the CLI from the repository without installing it globally:
PYTHONPATH=src python3 -m telos_kit --version
PYTHONPATH=src python3 -m telos_kit install codex
Release notes for maintainers
When publishing a new version, keep these version sources aligned:
src/telos_kit/__init__.pysrc/telos_kit/kit_versions.json- Codex plugin manifest version
- Claude plugin manifest version
The repository also includes release validation helpers under scripts/.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file telos_kit-0.4.1.tar.gz.
File metadata
- Download URL: telos_kit-0.4.1.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09f0e94c47fa3393a348db089d28f25e6ba10ef82e2c6c7e003334391e6d6647
|
|
| MD5 |
be5cc2e3d9b2937fed973db41b06bc50
|
|
| BLAKE2b-256 |
284a23d5f9f1285209f7dea219fac7d7c247cd392172717ccd828c3fede80126
|
Provenance
The following attestation bundles were made for telos_kit-0.4.1.tar.gz:
Publisher:
publish.yml on jaeilssss/TelosEngineering
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
telos_kit-0.4.1.tar.gz -
Subject digest:
09f0e94c47fa3393a348db089d28f25e6ba10ef82e2c6c7e003334391e6d6647 - Sigstore transparency entry: 1988876993
- Sigstore integration time:
-
Permalink:
jaeilssss/TelosEngineering@10d763b9fa0c8e6a30cac8e020ecb37b47b4860b -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/jaeilssss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@10d763b9fa0c8e6a30cac8e020ecb37b47b4860b -
Trigger Event:
release
-
Statement type:
File details
Details for the file telos_kit-0.4.1-py3-none-any.whl.
File metadata
- Download URL: telos_kit-0.4.1-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ebc6a97fe5ab96deceb01472b62d4e3cede8e8469896ee4c12e15a741a51ccb
|
|
| MD5 |
714d25b96bab966ddbfee523877309d8
|
|
| BLAKE2b-256 |
b1b8714df929ac9851c2f7a27853e6e8b9f19936b02afee34f1788d63f1d3b65
|
Provenance
The following attestation bundles were made for telos_kit-0.4.1-py3-none-any.whl:
Publisher:
publish.yml on jaeilssss/TelosEngineering
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
telos_kit-0.4.1-py3-none-any.whl -
Subject digest:
1ebc6a97fe5ab96deceb01472b62d4e3cede8e8469896ee4c12e15a741a51ccb - Sigstore transparency entry: 1988877075
- Sigstore integration time:
-
Permalink:
jaeilssss/TelosEngineering@10d763b9fa0c8e6a30cac8e020ecb37b47b4860b -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/jaeilssss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@10d763b9fa0c8e6a30cac8e020ecb37b47b4860b -
Trigger Event:
release
-
Statement type: