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.
Telos treats the command entrypoint as a thin orchestrator. It keeps work in the current session by default and uses subagents only when they help isolate high-noise exploration or provide an independent evaluation pass. If a surface cannot support subagents, Telos falls back to the current session without skipping the spec or evaluation gates.
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
Architecture
Telos is designed around:
- a thin orchestrator at the command entrypoint
- optional workers for spec ambiguity checks or narrow repo exploration
- an implementation worker for broad or noisy implementation search
- an evaluator worker that stays independent from the implementation worker when needed
The orchestrator should manage state transitions and handoffs, not re-implement or re-evaluate the work itself.
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. The questioning loop stays in the main session by default. Telos uses a subagent only for narrow, high-noise exploration or the final ambiguity check.
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
The implementation flow reads SPEC.md first, then inspects the codebase to confirm or correct the first-pass scope and risk read. Telos keeps small, local changes in the main session and uses an implementation worker only when search scope or impact radius would otherwise leave a large trail of low-value exploration in the main context.
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
The semantic review should stay independent from the implementation worker and should receive evidence, not implementation intent. For small, low-risk changes with compact evidence, the current session can perform the semantic pass directly.
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.5.3.tar.gz.
File metadata
- Download URL: telos_kit-0.5.3.tar.gz
- Upload date:
- Size: 35.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e4e659b49de5e648f7531c7d3b137eb7e29bbbe1f79086f2fdddaa2a4122aac
|
|
| MD5 |
ffb4b86eeabad5405fe461f849455110
|
|
| BLAKE2b-256 |
a27e5e512c2b76f749f818c4e3285ac41ac601874a9ee35a5200cf7e31557790
|
Provenance
The following attestation bundles were made for telos_kit-0.5.3.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.5.3.tar.gz -
Subject digest:
0e4e659b49de5e648f7531c7d3b137eb7e29bbbe1f79086f2fdddaa2a4122aac - Sigstore transparency entry: 2084785818
- Sigstore integration time:
-
Permalink:
jaeilssss/TelosEngineering@8df8c5b8fc5b50480e3f9f7131e30a0c316bbd09 -
Branch / Tag:
refs/tags/v0.5.3 - Owner: https://github.com/jaeilssss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8df8c5b8fc5b50480e3f9f7131e30a0c316bbd09 -
Trigger Event:
release
-
Statement type:
File details
Details for the file telos_kit-0.5.3-py3-none-any.whl.
File metadata
- Download URL: telos_kit-0.5.3-py3-none-any.whl
- Upload date:
- Size: 37.8 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 |
c00cce6cb09d7c9b11e717d4f0f77ebb82d099df063b17d483967e4449952920
|
|
| MD5 |
bdcada30eb77fd1af60947f063523147
|
|
| BLAKE2b-256 |
f3720a013a5b121946855bc6df783aec8c35aa7bbde88df78d452c3f34829715
|
Provenance
The following attestation bundles were made for telos_kit-0.5.3-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.5.3-py3-none-any.whl -
Subject digest:
c00cce6cb09d7c9b11e717d4f0f77ebb82d099df063b17d483967e4449952920 - Sigstore transparency entry: 2084785836
- Sigstore integration time:
-
Permalink:
jaeilssss/TelosEngineering@8df8c5b8fc5b50480e3f9f7131e30a0c316bbd09 -
Branch / Tag:
refs/tags/v0.5.3 - Owner: https://github.com/jaeilssss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8df8c5b8fc5b50480e3f9f7131e30a0c316bbd09 -
Trigger Event:
release
-
Statement type: