# xinyuez/a-skill-trainer architecture

> Architecture diagram of the GitHub repository xinyuez/a-skill-trainer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xinyuez/a-skill-trainer
- Repository: https://github.com/xinyuez/a-skill-trainer

## Overview

A-Skill-Trainer is an interactive skill-incubation framework. A user submits a task in the Streamlit app; an inference engine executes it and records traces, the Wiki Maintainer distills patterns, and the Skill Proposer uses patterns, traces, and prior audit feedback to produce a proposal. The Harness applies the proposal for human review, then commits or rolls back the change and records the decision for later iterations. README descriptions establish the broad lifecycle; sampled source confirms several implementation links, while unsampled wiring is left out or shown as documented.

Main entry points: [`trainer/harness.py`](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py) (HITL Harness), [`app.py`](https://github.com/xinyuez/a-skill-trainer/blob/main/app.py) (Training UI), [`trainer/inference_agent.py`](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/inference_agent.py) (Inference agent), [`trainer/skill_proposer.py`](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/skill_proposer.py) (Skill Proposer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Training workflow"]
  node_app["Training UI<br/>[app.py]"]
  node_harness["HITL Harness<br/>[harness.py]"]
  node_tmodule["T module<br/>[T.py]"]
end

subgraph group_agents["Agent stages"]
  node_inference["Inference agent<br/>[inference_agent.py]"]
  node_antigravity["Antigravity engine"]
  node_maintainer["Wiki Maintainer<br/>[wiki_maintainer.py]"]
  node_proposer["Skill Proposer<br/>[skill_proposer.py]"]
end

subgraph group_records["Workspace records"]
  node_traces[("Execution traces<br/>[traces_writer.py]")]
  node_rawlayer["Trace access<br/>[raw_layer.py]"]
  node_reader["Trace reader<br/>[traces_reader.py]"]
  node_patterns[("Wiki patterns<br/>[wiki_maintainer.py]")]
  node_proposal["Skill proposal<br/>[skill_proposer.py]"]
  node_audit[("Skill audit trail<br/>[harness.py]")]
  node_skills[("Skill library<br/>[harness.py]")]
end

subgraph group_runtime["Agent runtime"]
  node_sandbox["Python sandbox tool<br/>[run_python.py]"]
  node_dispatch["Agent dispatch<br/>[run_agent.py]"]
  node_format["Stream formatting<br/>[stream_format.py]"]
  node_toolguard["Tool-call guard<br/>[awrap_tool_call.py]"]
  node_clock["Local datetime"]
  node_session["Session IDs<br/>[session_creator.py]"]
end

node_user(("Task author"))
node_reviewer(("Human reviewer"))

node_user -->|"submits task"| node_app
node_app -->|"starts inference"| node_inference
node_inference -->|"writes traces"| node_traces
node_inference -->|"uses tool"| node_sandbox
node_inference -->|"installs guard"| node_toolguard
node_inference -->|"creates session"| node_session
node_inference -.->|"dispatches agent"| node_dispatch
node_antigravity -->|"uses tool"| node_sandbox
node_antigravity -->|"dispatches agent"| node_dispatch
node_antigravity -->|"creates session"| node_session
node_app -.->|"selects engine"| node_antigravity
node_app -->|"starts pattern extraction"| node_maintainer
node_traces -->|"read via"| node_rawlayer
node_rawlayer -->|"delegates read"| node_reader
node_maintainer -.->|"reads traces"| node_rawlayer
node_maintainer -->|"updates patterns"| node_patterns
node_app -->|"starts proposal"| node_proposer
node_proposer -->|"reads traces"| node_rawlayer
node_proposer -->|"uses patterns"| node_patterns
node_proposer -->|"reads prior decisions"| node_audit
node_proposer -->|"generates proposal"| node_proposal
node_app -->|"submits proposal"| node_harness
node_harness -->|"applies proposal"| node_proposal
node_harness -->|"writes skill files"| node_skills
node_harness -->|"requests decision"| node_reviewer
node_reviewer -->|"accepts or rejects"| node_harness
node_harness -->|"commits or rolls back"| node_skills
node_harness -->|"records feedback and diff"| node_audit
node_dispatch -->|"formats stream"| node_format
node_proposer -.->|"runs agent"| node_dispatch
node_maintainer -.->|"runs agent"| node_dispatch
node_antigravity -->|"adds current time"| node_clock

click node_app "https://github.com/xinyuez/a-skill-trainer/blob/main/app.py"
click node_inference "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/inference_agent.py"
click node_antigravity "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/inference_antigravity.py"
click node_traces "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/traces_writer.py"
click node_rawlayer "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/layers/raw_layer.py"
click node_reader "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/traces_reader.py"
click node_maintainer "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/wiki_maintainer.py"
click node_patterns "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/wiki_maintainer.py"
click node_proposer "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/skill_proposer.py"
click node_proposal "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/skill_proposer.py"
click node_audit "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py"
click node_harness "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py"
click node_skills "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py"
click node_sandbox "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/run_python.py"
click node_dispatch "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/run_agent.py"
click node_format "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/stream_format.py"
click node_toolguard "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/awrap_tool_call.py"
click node_clock "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/get_current_datetime.py"
click node_session "https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/session_creator.py"
click node_tmodule "https://github.com/xinyuez/a-skill-trainer/blob/main/T.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_harness,node_tmodule,node_reviewer toneBlue
class node_inference,node_antigravity,node_maintainer,node_proposer toneAmber
class node_traces,node_rawlayer,node_reader,node_patterns,node_proposal,node_audit,node_skills toneMint
class node_sandbox,node_dispatch,node_format,node_toolguard,node_clock,node_session,node_user toneRose
```

## Components

### Training workflow

- [Training UI](https://github.com/xinyuez/a-skill-trainer/blob/main/app.py): `app.py`
- [HITL Harness](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py): `trainer/harness.py`
- [T module](https://github.com/xinyuez/a-skill-trainer/blob/main/T.py): `T.py`

### Agent stages

- [Inference agent](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/inference_agent.py): `trainer/inference_agent.py`
- [Antigravity engine](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/inference_antigravity.py): `trainer/inference_antigravity.py`
- [Wiki Maintainer](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/wiki_maintainer.py): `trainer/wiki_maintainer.py`
- [Skill Proposer](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/skill_proposer.py): `trainer/skill_proposer.py`

### Workspace records

- [Execution traces](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/traces_writer.py): `trainer/utils/traces_writer.py`
- [Trace access](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/layers/raw_layer.py): `trainer/layers/raw_layer.py`
- [Trace reader](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/traces_reader.py): `trainer/utils/traces_reader.py`
- [Wiki patterns](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/wiki_maintainer.py): `trainer/wiki_maintainer.py`
- [Skill proposal](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/skill_proposer.py): `trainer/skill_proposer.py`
- [Skill audit trail](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py): `trainer/harness.py`
- [Skill library](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/harness.py): `trainer/harness.py`

### Agent runtime

- [Python sandbox tool](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/run_python.py): `trainer/utils/run_python.py`
- [Agent dispatch](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/run_agent.py): `trainer/utils/run_agent.py`
- [Stream formatting](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/stream_format.py): `trainer/utils/stream_format.py`
- [Tool-call guard](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/awrap_tool_call.py): `trainer/utils/awrap_tool_call.py`
- [Local datetime](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/get_current_datetime.py): `trainer/utils/get_current_datetime.py`
- [Session IDs](https://github.com/xinyuez/a-skill-trainer/blob/main/trainer/utils/session_creator.py): `trainer/utils/session_creator.py`

### Other components

- **Task author**
- **Human reviewer**

## Connections

- Task author → Training UI: submits task (evidence: `README.md`)
- Training UI → Inference agent: starts inference (evidence: `README.md`)
- Inference agent → Execution traces: writes traces (evidence: `README.md`)
- Inference agent → Python sandbox tool: uses tool (evidence: `trainer/inference_agent.py`)
- Inference agent → Tool-call guard: installs guard (evidence: `trainer/inference_agent.py`)
- Inference agent → Session IDs: creates session (evidence: `trainer/inference_agent.py`)
- Inference agent → Agent dispatch: dispatches agent (evidence: `trainer/inference_agent.py`)
- Antigravity engine → Python sandbox tool: uses tool (evidence: `trainer/inference_antigravity.py`)
- Antigravity engine → Agent dispatch: dispatches agent (evidence: `trainer/inference_antigravity.py`)
- Antigravity engine → Session IDs: creates session (evidence: `trainer/inference_antigravity.py`)
- Training UI → Antigravity engine: selects engine
- Training UI → Wiki Maintainer: starts pattern extraction (evidence: `README.md`)
- Execution traces → Trace access: read via (evidence: `trainer/layers/raw_layer.py`)
- Trace access → Trace reader: delegates read (evidence: `trainer/layers/raw_layer.py`)
- Wiki Maintainer → Trace access: reads traces (evidence: `trainer/wiki_maintainer.py`)
- Wiki Maintainer → Wiki patterns: updates patterns (evidence: `README.md`)
- Training UI → Skill Proposer: starts proposal (evidence: `README.md`)
- Skill Proposer → Trace access: reads traces (evidence: `trainer/skill_proposer.py`)
- Skill Proposer → Wiki patterns: uses patterns (evidence: `README.md`)
- Skill Proposer → Skill audit trail: reads prior decisions (evidence: `README.md`)
- Skill Proposer → Skill proposal: generates proposal (evidence: `README.md`)
- Training UI → HITL Harness: submits proposal (evidence: `README.md`)
- HITL Harness → Skill proposal: applies proposal (evidence: `trainer/harness.py`)
- HITL Harness → Skill library: writes skill files (evidence: `trainer/harness.py`)
- HITL Harness → Human reviewer: requests decision (evidence: `README.md`)
- Human reviewer → HITL Harness: accepts or rejects (evidence: `README.md`)
- HITL Harness → Skill library: commits or rolls back (evidence: `README.md`)
- HITL Harness → Skill audit trail: records feedback and diff (evidence: `README.md`)
- Agent dispatch → Stream formatting: formats stream (evidence: `trainer/utils/run_agent.py`)
- Skill Proposer → Agent dispatch: runs agent (evidence: `trainer/skill_proposer.py`)
- Wiki Maintainer → Agent dispatch: runs agent (evidence: `trainer/wiki_maintainer.py`)
- Antigravity engine → Local datetime: adds current time (evidence: `trainer/inference_antigravity.py`)
