Team First Development (TFD) is a selective Codex team-development method. It improves a bounded development result through alignment, model-role fit, focused context, and independent review.
This source tree is version 3.4.1. The v3.4.1 tag and GitHub Release are
the publication evidence; a local checkout alone does not prove installation,
deployment, or publication.
Call the single Skill explicitly:
Use tfd:using-tfd to complete this development task.
TFD first decides whether collaboration is worth its coordination cost.
Simple work stays with one Agent and does not read or write .tfd/. Work with
separable professional responsibilities, or enough risk to require an
independent reviewer, may use a project-configured team.
For TEAM, the Coordinator decomposes the bounded outcome into the minimum
useful workstreams before activation. The exact confirmation proposal shows
each workstream's accountable member, acceptance conditions, write scope,
dependencies, handoff, and parallel or serial order.
Only the Coordinator activates members. Members do not re-delegate or create unconfirmed helper Agents. Dependency-free workstreams may run in parallel only when their write scopes do not overlap; a blocker stops its dependents, and the Coordinator integrates accepted outputs into one immutable review candidate.
For every source-code or architecture change, TFD reads
references/engineering-constraints.md
completely before finalizing PLAN. This applies to both SOLO and team
execution. The rules remain fixed; evidence depth scales with risk.
The reference is the single normative copy. Planning identifies the relevant change shape, execution carries only the applicable constraints, and review checks the complete candidate without adding a second Skill or policy engine.
Project setup may define reusable team and member profiles:
.tfd/
├── manifest.yaml
├── product-team/
│ ├── team.yaml
│ ├── members/
│ │ ├── alice.yaml
│ │ └── bob.yaml
│ ├── receipts/ # legacy, before Wiki initialization
│ └── wiki/
│ ├── schema.md
│ ├── raw/
│ ├── pages/
│ ├── queries/
│ ├── activity/
│ ├── index.md
│ └── log.md
└── platform-team/
├── team.yaml
└── members/
└── tingting.yaml
manifest.yaml indexes team directories. Each team.yaml contains the team
name, purpose, member IDs, and an optional trace: delivery_receipt policy.
Each named member has a members/<name>.yaml profile:
display_name: Alice
responsibility: Implement the agreed product scope
expected_output: A runnable and verified result
agency_role: backend-architect
runtime: codex_thread
model: gpt-5.3-codex-spark
reasoning_effort: high
skills: []agency_role is optional frozen method provenance, independent from Runtime
and model. TFD does not install or run agency-agents, synchronize personas, or
bulk-import roles. skills may be empty; every listed Skill must be installed
locally under its exact name.
| Runtime | Execution surface | User-visible behavior |
|---|---|---|
codex_spawn |
spawn_agent |
Child Agent in the current task |
codex_thread |
Codex thread/App Server | Independent sidebar task |
codex_exec |
codex exec |
One-off CLI run |
New or edited profiles require runtime. A v3.1 profile without runtime
resolves to codex_spawn; TFD displays that resolution before activation and
does not rewrite the profile.
Project setup drafts profiles, not Agents. For each requirement, TFD selects at most one configured team and its minimum useful member subset. A recurring cross-functional composition should be configured as its own team.
Before writing profiles or creating any Agent, TFD presents the exact team
proposal: outcome and scope, team identity and purpose, every member's
ID, display name, optional agency_role, responsibility and expected output,
exact Runtime, model, reasoning effort (or its default), Skills, eligibility
evidence and source, and user-visible Runtime behavior; the proposal also names
the minimum active subset and independent reviewer, and whether the action
writes profiles, activates members, or both.
A generic request to form a team, silence, urgency, or permission for TFD to choose does not confirm an unseen roster. TFD waits for explicit confirmation. One confirmation may cover profile writes and immediate activation when both are named in the same proposal. Any material change to any proposal field requires renewed confirmation, including a changed outcome, acceptance condition, scope, exclusion, action mode, team identity or purpose, member identity, responsibility, output, model, Skill, active subset, or reviewer. Runtime and reasoning-effort changes also require renewed confirmation.
Profile-only setup writes the confirmed profiles and stops without creating Agents.
~/.codex/models_cache.json discovers account model candidates. It does not
prove that codex_spawn, codex_thread, or codex_exec can currently start
that model. TFD checks eligibility on the selected execution surface, and every
configured Skill must be installed locally under its exact name.
After confirmation, TFD starts the exact
runtime + model + reasoning_effort binding once and checks trusted Runtime
metadata. Missing model or explicit reasoning-effort proof remains
UNVERIFIED; startup failure or mismatch is not successful delivery. TFD does
not automatically retry, switch Runtime, substitute a model, reduce reasoning
effort, or otherwise fall back.
See plugins/tfd/examples/project-tfd for
the complete minimal example.
Each configured team may own one Git-native Markdown Wiki under its team directory. It follows the team when that directory is moved or archived. The LLM Wiki model has three layers:
raw/preserves immutable, digest-addressed source snapshots.pages/andindex.mdcontain maintained, interlinked knowledge with source citations.log.md,queries/, andactivity/hold an append-only audit history of knowledge changes, explicit questions, and bounded work milestones.
This is not generic RAG and does not restore a task control plane. V1 has no embeddings, vector database, daemon, remote store, progress state, or recovery authority. Obsidian may be used as an optional Markdown viewer, but it has no runtime or write authority.
Initialization, ingest, repair, conflict resolution, and schema changes use
PROPOSE -> CONFIRM -> APPLY. Before confirmation, no file under wiki/
changes. TFD displays the team, sources and digests, page differences,
conflicts, index/log effects, current Wiki baseline, complete SHA-256, and
12-character fingerprint. Natural-language confirmation may cite the short
fingerprint; only the complete matching digest authorizes the Guard. Any
material proposal or baseline change requires renewed confirmation.
Sources are add-only. A revision creates a new digest-addressed snapshot and
never overwrites an earlier version. Conflicting sourced claims remain on a
disputed page until a separately confirmed resolution.
An explicit user question, or an explicit member Wiki query inside authorized
work, authorizes recording only that exact question, final answer, references,
actor, and Wiki baseline without a second confirmation. Confirmed execution
similarly authorizes only work_started, key handoff, evidence-bound
review, final delivery, and explicit backfill records. Neither exception
authorizes promotion into maintained knowledge.
The Guard validates actor and selected-member IDs against team.yaml, but V1
has no persistent execution token or hostile shared-host isolation. The
conforming Skill invocation remains the confirmation boundary; an external
directory-replacement race is outside V1 and remains UNVERIFIED.
The default long-record threshold is 1,000 Unicode code points. An answer of
1,000 remains complete in log.md; an answer of 1,001 goes under queries/
and leaves only summaries, references, digest, and link in the log. Long work
events use activity/ in the same way, based on the complete allowed activity
record; its concise summary may not exceed the threshold. Prompt text, hidden
reasoning, complete Agent conversations, and raw tool output are never audit
content.
If answering or real work succeeds but its audit append fails, TFD reports the result and audit failure separately. It does not roll back successful work or claim the record succeeded.
Read-only lint checks structure, links, provenance, immutable-source history, the log hash chain and committed prefix, detail records, cross-team references, disputes, and obvious credentials. It never repairs findings automatically.
V1 is planned for roughly 100 source snapshots and hundreds of pages. A separate search design is warranted only after observed query misses, material index-maintenance cost, or a corpus that makes bounded page selection impractical—not from file count alone.
Run from plugins/tfd with Python 3.10 or newer. Proposal and record commands
accept JSON on standard input when - is used:
python3 -m scripts.tfd_wiki.cli init --project-root PROJECT --team-id TEAM --actor-type user --actor-id user --at UTC
python3 -m scripts.tfd_wiki.cli validate --project-root PROJECT --team-id TEAM --proposal -
python3 -m scripts.tfd_wiki.cli apply --project-root PROJECT --team-id TEAM --proposal - --approval-digest SHA256
python3 -m scripts.tfd_wiki.cli record-query --project-root PROJECT --team-id TEAM --record -
python3 -m scripts.tfd_wiki.cli record-activity --project-root PROJECT --team-id TEAM --record -
python3 -m scripts.tfd_wiki.cli lint --project-root PROJECT --team-id TEAMBefore a team initializes its Wiki, trace: delivery_receipt retains the
legacy one-receipt behavior. Once the Wiki exists, final delivery is one
delivery activity event and TFD does not create a duplicate receipt.
A receipt is a human-readable trace, not runtime authority or resumable state. Neither receipts nor Wiki activity restore a task database, progress state, recovery system, or management control plane.
Team confirmation authorizes only the named local profile writes and/or member activation. It does not authorize installation, merge, push, tag, release, deployment, publication, external messages, destructive cleanup, privileged commands, paid actions, or scope expansion. Each keeps its normal approval boundary.
A version in a local checkout does not by itself prove installation or
deployment. Use the v3.4.1 tag and GitHub Release as publication evidence.
plugins/tfd/.codex-plugin/plugin.json Plugin manifest
plugins/tfd/skills/using-tfd/SKILL.md Single user-facing Skill
plugins/tfd/skills/using-tfd/references/engineering-constraints.md
On-demand engineering contract
plugins/tfd/skills/using-tfd/references/team-wiki.md
On-demand Team Wiki protocol
plugins/tfd/scripts/tfd_wiki/ Standard-library Wiki Guard
plugins/tfd/examples/project-tfd/ Minimal YAML team example
scripts/test_plugin_contract.py Package contract
Python 3.10 or newer and PyYAML are required for tests.
python3 -m pip install -r requirements.txt
python3 -m unittest discover -s scripts -p 'test_*.py' -v
cd plugins/tfd
python3 -m unittest discover -s scripts -p 'test_*.py' -v