talos-ai 0.63.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- talos_ai-0.63.1/LICENSE +37 -0
- talos_ai-0.63.1/PKG-INFO +294 -0
- talos_ai-0.63.1/README.md +275 -0
- talos_ai-0.63.1/pyproject.toml +31 -0
- talos_ai-0.63.1/setup.cfg +4 -0
- talos_ai-0.63.1/talos_ai.egg-info/PKG-INFO +294 -0
- talos_ai-0.63.1/talos_ai.egg-info/SOURCES.txt +86 -0
- talos_ai-0.63.1/talos_ai.egg-info/dependency_links.txt +1 -0
- talos_ai-0.63.1/talos_ai.egg-info/entry_points.txt +2 -0
- talos_ai-0.63.1/talos_ai.egg-info/requires.txt +7 -0
- talos_ai-0.63.1/talos_ai.egg-info/top_level.txt +1 -0
- talos_ai-0.63.1/talos_cli/__init__.py +1 -0
- talos_ai-0.63.1/talos_cli/__main__.py +1677 -0
- talos_ai-0.63.1/talos_cli/agent.py +597 -0
- talos_ai-0.63.1/talos_cli/auth.py +79 -0
- talos_ai-0.63.1/talos_cli/backfill.py +117 -0
- talos_ai-0.63.1/talos_cli/bitbucket.py +166 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/data-clean/SKILL.md +16 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/doc-draft/SKILL.md +19 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/email-reply/SKILL.md +17 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/invoice-read/SKILL.md +15 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/meeting-notes/SKILL.md +16 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/pdf-extract/SKILL.md +15 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/pr-ready/SKILL.md +18 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/translate/SKILL.md +16 -0
- talos_ai-0.63.1/talos_cli/bundled_skills/xlsx-summary/SKILL.md +17 -0
- talos_ai-0.63.1/talos_cli/capture_hook.sh +24 -0
- talos_ai-0.63.1/talos_cli/checkpoints.py +72 -0
- talos_ai-0.63.1/talos_cli/config.py +190 -0
- talos_ai-0.63.1/talos_cli/context.py +115 -0
- talos_ai-0.63.1/talos_cli/docreader.py +180 -0
- talos_ai-0.63.1/talos_cli/docwriter.py +83 -0
- talos_ai-0.63.1/talos_cli/dpo_export.py +95 -0
- talos_ai-0.63.1/talos_cli/gateway.py +317 -0
- talos_ai-0.63.1/talos_cli/gitinfo.py +40 -0
- talos_ai-0.63.1/talos_cli/guardrails.py +92 -0
- talos_ai-0.63.1/talos_cli/hooks.py +91 -0
- talos_ai-0.63.1/talos_cli/jobs.py +166 -0
- talos_ai-0.63.1/talos_cli/kb.py +456 -0
- talos_ai-0.63.1/talos_cli/mcp.py +357 -0
- talos_ai-0.63.1/talos_cli/permissions.py +79 -0
- talos_ai-0.63.1/talos_cli/personas.py +184 -0
- talos_ai-0.63.1/talos_cli/practice_loop.py +134 -0
- talos_ai-0.63.1/talos_cli/ratings.py +185 -0
- talos_ai-0.63.1/talos_cli/rules.py +160 -0
- talos_ai-0.63.1/talos_cli/session_state.py +99 -0
- talos_ai-0.63.1/talos_cli/skills.py +106 -0
- talos_ai-0.63.1/talos_cli/submit_dataset.py +118 -0
- talos_ai-0.63.1/talos_cli/sync.py +172 -0
- talos_ai-0.63.1/talos_cli/task_source.py +39 -0
- talos_ai-0.63.1/talos_cli/teacher.py +57 -0
- talos_ai-0.63.1/talos_cli/tools.py +711 -0
- talos_ai-0.63.1/talos_cli/transcript_to_training.py +341 -0
- talos_ai-0.63.1/talos_cli/ui.py +159 -0
- talos_ai-0.63.1/talos_cli/update.py +209 -0
- talos_ai-0.63.1/tests/test_agent.py +152 -0
- talos_ai-0.63.1/tests/test_agent_streaming.py +136 -0
- talos_ai-0.63.1/tests/test_auth.py +101 -0
- talos_ai-0.63.1/tests/test_backfill.py +59 -0
- talos_ai-0.63.1/tests/test_bitbucket.py +77 -0
- talos_ai-0.63.1/tests/test_checkpoints.py +171 -0
- talos_ai-0.63.1/tests/test_config_parse.py +113 -0
- talos_ai-0.63.1/tests/test_context.py +112 -0
- talos_ai-0.63.1/tests/test_docs.py +105 -0
- talos_ai-0.63.1/tests/test_gateway.py +81 -0
- talos_ai-0.63.1/tests/test_gitinfo.py +51 -0
- talos_ai-0.63.1/tests/test_guardrails_budget.py +54 -0
- talos_ai-0.63.1/tests/test_hardening.py +85 -0
- talos_ai-0.63.1/tests/test_hooks.py +138 -0
- talos_ai-0.63.1/tests/test_jobs.py +131 -0
- talos_ai-0.63.1/tests/test_kb.py +137 -0
- talos_ai-0.63.1/tests/test_mcp.py +213 -0
- talos_ai-0.63.1/tests/test_parallel.py +131 -0
- talos_ai-0.63.1/tests/test_personas.py +95 -0
- talos_ai-0.63.1/tests/test_ratings.py +105 -0
- talos_ai-0.63.1/tests/test_redaction.py +46 -0
- talos_ai-0.63.1/tests/test_rules.py +100 -0
- talos_ai-0.63.1/tests/test_safety.py +138 -0
- talos_ai-0.63.1/tests/test_session_state.py +76 -0
- talos_ai-0.63.1/tests/test_skill_personas.py +58 -0
- talos_ai-0.63.1/tests/test_streaming.py +44 -0
- talos_ai-0.63.1/tests/test_sync.py +87 -0
- talos_ai-0.63.1/tests/test_todos.py +141 -0
- talos_ai-0.63.1/tests/test_tools.py +249 -0
- talos_ai-0.63.1/tests/test_training.py +266 -0
- talos_ai-0.63.1/tests/test_ui.py +69 -0
- talos_ai-0.63.1/tests/test_update_dist.py +96 -0
- talos_ai-0.63.1/tests/test_version.py +18 -0
talos_ai-0.63.1/LICENSE
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Copyright (c) 2026 Fixit E.E. (https://www.fixit.gr)
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
PROPRIETARY LICENSE
|
|
5
|
+
|
|
6
|
+
This software and associated documentation files (the "Software") are the
|
|
7
|
+
proprietary property of Fixit E.E. and are protected by copyright law.
|
|
8
|
+
|
|
9
|
+
GRANT OF USE
|
|
10
|
+
|
|
11
|
+
Fixit E.E. grants you a personal, non-exclusive, non-transferable, revocable
|
|
12
|
+
license to download, install, and run the Software solely as a client to access
|
|
13
|
+
the Talos services operated by Fixit E.E. (the "Service"), subject to the terms
|
|
14
|
+
below. This permits the public distribution and installation of the Software for
|
|
15
|
+
that purpose (e.g. via pip/pipx).
|
|
16
|
+
|
|
17
|
+
RESTRICTIONS
|
|
18
|
+
|
|
19
|
+
Except as expressly permitted above, no part of this Software may be reproduced,
|
|
20
|
+
redistributed, sold, sublicensed, modified, reverse engineered, or decompiled
|
|
21
|
+
without the prior written permission of Fixit E.E. You may not use the Software
|
|
22
|
+
to build or operate a competing service, nor remove or alter any proprietary
|
|
23
|
+
notices.
|
|
24
|
+
|
|
25
|
+
NO WARRANTY
|
|
26
|
+
|
|
27
|
+
The Software is provided "AS IS", without warranty of any kind, express or
|
|
28
|
+
implied. Fixit E.E. is not liable for any claim, damages, or other liability
|
|
29
|
+
arising from the use of the Software. Fixit E.E. may modify, suspend, or
|
|
30
|
+
discontinue the Service at any time.
|
|
31
|
+
|
|
32
|
+
For licensing inquiries:
|
|
33
|
+
Fixit E.E.
|
|
34
|
+
G. Gennimata 54A, 55132, Kalamaria, Thessaloniki, Greece
|
|
35
|
+
Email: info@fixit.gr
|
|
36
|
+
Phone: +30 2313 251851
|
|
37
|
+
Web: https://www.fixit.gr
|
talos_ai-0.63.1/PKG-INFO
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: talos-ai
|
|
3
|
+
Version: 0.63.1
|
|
4
|
+
Summary: Talos: Fixit's terminal AI agent for coding and business work, model-routed by the ai.fixit.gr controller
|
|
5
|
+
Author-email: "Fixit E.E." <info@fixit.gr>
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Project-URL: Homepage, https://www.fixit.gr
|
|
8
|
+
Project-URL: Documentation, https://ai.fixit.gr
|
|
9
|
+
Keywords: llm,coding-assistant,fine-tuning
|
|
10
|
+
Requires-Python: >=3.11
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Provides-Extra: teacher
|
|
14
|
+
Requires-Dist: anthropic>=0.40; extra == "teacher"
|
|
15
|
+
Provides-Extra: files
|
|
16
|
+
Requires-Dist: openpyxl>=3.1; extra == "files"
|
|
17
|
+
Requires-Dist: python-docx>=1.1; extra == "files"
|
|
18
|
+
Dynamic: license-file
|
|
19
|
+
|
|
20
|
+
# Talos CLI
|
|
21
|
+
|
|
22
|
+
Fixit's AI agent for your terminal — coding, your stack, and business work. The ai.fixit.gr
|
|
23
|
+
controller routes each request to the right model (chat runs on gpt-oss:120b), so you get a
|
|
24
|
+
strong answer without picking a model. Your reviewed sessions feed the knowledge base and evals.
|
|
25
|
+
|
|
26
|
+
It is a thin, config-driven client. The model, training, and GPU run on the managed Talos
|
|
27
|
+
backend; the CLI only talks to it over HTTPS with your API key. Your data trains your own
|
|
28
|
+
private, tenant-isolated adapter and is never shared with other tenants.
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pipx install talos-cli
|
|
34
|
+
talos login
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`talos login` opens a device-authorization flow: it prints a URL and a code, you approve in
|
|
38
|
+
the browser at your Talos account, and the token is stored for you. (Advanced: `talos init`
|
|
39
|
+
writes the config by hand instead.)
|
|
40
|
+
|
|
41
|
+
`talos init` writes `~/.talos/config.toml`:
|
|
42
|
+
|
|
43
|
+
| Key | Meaning | Default |
|
|
44
|
+
|-----|---------|---------|
|
|
45
|
+
| `gateway_url` | Talos backend endpoint | `https://ai.fixit.gr` |
|
|
46
|
+
| `api_key` | Your tenant API key | — |
|
|
47
|
+
| `model` | Model alias | `chat-primary` |
|
|
48
|
+
| `code_root` | Where your repos live | `~/Code` |
|
|
49
|
+
| `token_budget` | Weekly cap for the practice loop | `100000` |
|
|
50
|
+
| `persona` | `developer` / `business` / `hybrid` | inferred from role |
|
|
51
|
+
| `show_tokens` | force per-step token + tool detail on/off | by persona |
|
|
52
|
+
|
|
53
|
+
Every value can be overridden by an env var (`TALOS_GATEWAY_URL`, `TALOS_API_KEY`, ...).
|
|
54
|
+
|
|
55
|
+
### Personas
|
|
56
|
+
|
|
57
|
+
The same Talos serves two audiences; the persona tailors the system prompt and how much detail it
|
|
58
|
+
shows:
|
|
59
|
+
|
|
60
|
+
- **developer** — the coding agent: writes and reviews code, runs tests/builds, and prints the
|
|
61
|
+
per-step token and tool details.
|
|
62
|
+
- **business** — a plain-language business assistant: reads your documents and spreadsheets, writes
|
|
63
|
+
reports and content, and keeps the output quiet (no code, no token spam).
|
|
64
|
+
- **hybrid** — both.
|
|
65
|
+
|
|
66
|
+
The persona is taken from `persona` in your config, otherwise inferred from your profile role,
|
|
67
|
+
otherwise `developer`. `talos persona` shows the current one and the options; `talos persona
|
|
68
|
+
business` sets it; inside a chat, `/persona business` switches live. `show_tokens = true|false`
|
|
69
|
+
overrides the per-step detail regardless of persona (you can also toggle it for a session with
|
|
70
|
+
`/verbose`).
|
|
71
|
+
|
|
72
|
+
## Commands
|
|
73
|
+
|
|
74
|
+
Just run `talos` with no arguments to drop straight into the interactive session (same as
|
|
75
|
+
`talos chat`) — it opens clean, no command dump. Type `help` (or `/help`) any time to see the
|
|
76
|
+
role-aware list of what you can do: a customer sees chat, knowledge base, profile and sync; an
|
|
77
|
+
admin also sees training, eval, promote and the system commands, built from your key's real
|
|
78
|
+
scopes. If you are not logged in yet it runs `talos login` first. (Piped or non-interactive —
|
|
79
|
+
`talos | head`, CI — it prints the static command list instead.)
|
|
80
|
+
|
|
81
|
+
| Command | What it does |
|
|
82
|
+
|---------|--------------|
|
|
83
|
+
| `talos` | Enter the interactive session directly (type `help` for what your role can do) |
|
|
84
|
+
| `talos login` | Authorize via device code; stores the token |
|
|
85
|
+
| `talos init` | Write or update the config file by hand |
|
|
86
|
+
| `talos status` | Show gateway, model, and your key's client_id and scopes |
|
|
87
|
+
| `talos status --system` | (admin) What is running: training state, GPU, loaded models, services |
|
|
88
|
+
| `talos chat ["prompt"]` | Interactive chat, or one-shot if a prompt is given |
|
|
89
|
+
| `talos backfill` | Convert existing Claude Code transcripts to training rows |
|
|
90
|
+
| `talos submit` | Upload staged training rows to the backend |
|
|
91
|
+
| `talos loop` | Run the bounded practice loop (teacher-reviewed self-training) |
|
|
92
|
+
| `talos dpo-export` | Convert collected DPO rows into prompt/chosen/rejected pairs |
|
|
93
|
+
|
|
94
|
+
## Agent capabilities
|
|
95
|
+
|
|
96
|
+
In a session Talos can read and edit code, run shell/ssh commands, find files (`glob`),
|
|
97
|
+
fetch web pages (`web_fetch`), drive Bitbucket (`bitbucket`), consult the knowledge base
|
|
98
|
+
(`kb_search`), and read structured
|
|
99
|
+
documents with `read_file` — Excel (`.xlsx`/`.xlsm`), Word (`.docx`), `.csv`/`.tsv`, `.json`
|
|
100
|
+
and `.pdf` (pdf needs `pdftotext`). Spreadsheets and Word files are parsed with the standard
|
|
101
|
+
library, no extra packages.
|
|
102
|
+
|
|
103
|
+
It can also **write** real Office and data files with `write_doc`: `.xlsx` (Excel) and
|
|
104
|
+
`.csv`/`.tsv` from tab-separated rows (numbers stored as numbers, so totals work) and `.docx`
|
|
105
|
+
(Word) with one paragraph per line. `.xlsx`/`.docx` need the optional extra — install with
|
|
106
|
+
`pip install talos-cli[files]` (openpyxl + python-docx); `.csv`/`.tsv` work out of the box. So the
|
|
107
|
+
business skills can read your Excel/Word and hand back a finished spreadsheet or document.
|
|
108
|
+
|
|
109
|
+
### Bitbucket
|
|
110
|
+
|
|
111
|
+
The `bitbucket` tool lets Talos run the full branch -> PR -> review -> merge workflow with your
|
|
112
|
+
own Bitbucket credentials, locally — it talks to the Bitbucket API directly (same trust model as
|
|
113
|
+
git/ssh), never through the gateway. It can list repos, list and read pull requests with their
|
|
114
|
+
review comments, create a PR, reply to a review, merge, check pipeline/CI status, and create a
|
|
115
|
+
branch. Configure it once:
|
|
116
|
+
|
|
117
|
+
```toml
|
|
118
|
+
bitbucket_user = "your-bitbucket-username"
|
|
119
|
+
bitbucket_token = "app-password-with-pullrequest-and-repo-scopes"
|
|
120
|
+
bitbucket_workspace = "your-workspace" # optional; lets you pass just the repo slug
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
(or `TALOS_BITBUCKET_USER` / `TALOS_BITBUCKET_TOKEN` / `TALOS_BITBUCKET_WORKSPACE`). The tool
|
|
124
|
+
defaults to `ask`, so each action is confirmed before it runs. A PR's outcome (merged / declined)
|
|
125
|
+
also becomes a training label for the self-improving loop.
|
|
126
|
+
|
|
127
|
+
### MCP tool servers
|
|
128
|
+
|
|
129
|
+
Talos can use tools from any [Model Context Protocol](https://modelcontextprotocol.io) server,
|
|
130
|
+
either remote (HTTP) or local (a subprocess over stdio). Declare one block per server in
|
|
131
|
+
`~/.talos/config.toml`:
|
|
132
|
+
|
|
133
|
+
```toml
|
|
134
|
+
# remote HTTP server
|
|
135
|
+
[mcp.vita4you]
|
|
136
|
+
url = "https://your-host/mcp"
|
|
137
|
+
token = "optional-bearer-token" # sent as Authorization: Bearer ...
|
|
138
|
+
# enabled = false # temporarily turn a server off
|
|
139
|
+
# timeout = 30
|
|
140
|
+
|
|
141
|
+
# local stdio server (a subprocess speaking newline-delimited JSON-RPC)
|
|
142
|
+
[mcp.fixit]
|
|
143
|
+
command = "python3"
|
|
144
|
+
args = ["/home/me/docker/scripts/memory-mcp-server.py"]
|
|
145
|
+
[mcp.fixit.env] # optional environment for the subprocess
|
|
146
|
+
FIXIT_MEMORY_DIR = "/home/me/.claude/projects/.../memory"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
On startup Talos connects to each server (`initialize` → `tools/list`), and its tools are offered
|
|
150
|
+
to the model namespaced as `<server>__<tool>` (e.g. `vita4you__get_order_details`). When the model
|
|
151
|
+
calls one, Talos forwards it as an MCP `tools/call` and feeds the result back. MCP tools default to
|
|
152
|
+
`ask` (each external call is confirmed). Both plain-JSON and `text/event-stream` (Streamable HTTP)
|
|
153
|
+
responses are handled, and a `Mcp-Session-Id` is captured and resent. `talos mcp` lists the
|
|
154
|
+
configured servers and tests connectivity; `/mcp` does the same inside a chat. A server that is
|
|
155
|
+
unreachable at startup is skipped with a warning — it never blocks the CLI. Local stdio servers are
|
|
156
|
+
launched as a subprocess and shut down cleanly when the chat ends.
|
|
157
|
+
|
|
158
|
+
### Streaming
|
|
159
|
+
|
|
160
|
+
In plain chat (`/agent off`) the reply streams in token by token as the model produces it, so you
|
|
161
|
+
see the answer forming instead of waiting for the whole thing; a spinner shows until the first
|
|
162
|
+
token and it falls back to a buffered reply if the gateway is not streaming. The agentic tool-loop
|
|
163
|
+
turn stays buffered because it needs the complete response to detect tool calls.
|
|
164
|
+
|
|
165
|
+
### Sub-agent delegation
|
|
166
|
+
|
|
167
|
+
For a big task the agent can call `delegate` to hand a focused, self-contained piece of work to a
|
|
168
|
+
fresh sub-agent that has the same tools but its own clean context (e.g. "analyse module X and
|
|
169
|
+
summarise its API"). The sub-agent shares your gateway, permissions and weekly token budget, runs
|
|
170
|
+
with a smaller step cap, and returns its answer to the main agent; it cannot delegate further. This
|
|
171
|
+
keeps the main conversation focused instead of filling it with exploration.
|
|
172
|
+
|
|
173
|
+
### Sync across machines
|
|
174
|
+
|
|
175
|
+
Your setup follows you. `talos sync push` uploads your config (model, kb_project, token budget),
|
|
176
|
+
shortcuts, per-tool permissions, your global `~/.talos/TALOS.md` and your skills to your account;
|
|
177
|
+
`talos sync pull` restores them on another machine (`talos sync status` shows what is stored). A
|
|
178
|
+
fresh `talos login` pulls them automatically, so a new machine is ready instantly. Secrets — your
|
|
179
|
+
API key and Bitbucket token — are never uploaded, and machine-local paths stay local.
|
|
180
|
+
|
|
181
|
+
### Profile
|
|
182
|
+
|
|
183
|
+
Tell Talos who you are once and it adapts to you: `talos profile --role developer --about "I run
|
|
184
|
+
a Magento shop" --preferences "answer in Greek, be terse"` (run `talos profile` to view). Your role
|
|
185
|
+
(developer / marketing / founder / ...), a short about, and your preferences are loaded at the start
|
|
186
|
+
of every session and honoured by the agent. It is stored on your account and synced across machines,
|
|
187
|
+
and it is the same data the customer-portal onboarding wizard fills — so even a non-developer gets a
|
|
188
|
+
Talos pointed in the right direction from the first message.
|
|
189
|
+
|
|
190
|
+
### Memory
|
|
191
|
+
|
|
192
|
+
Talos keeps a persistent memory of durable facts and preferences about you — your role, your stack,
|
|
193
|
+
how you like answers, standing instructions. It loads them at the start of every session and works
|
|
194
|
+
with them in mind, and saves a new one (via its `remember` tool) when you tell it something lasting.
|
|
195
|
+
`/remember` shows what is stored and `/remember <fact>` adds one by hand. Memory lives on your
|
|
196
|
+
account (keyed by your client_id), so it follows you to every machine you log in from; it is distinct
|
|
197
|
+
from the knowledge base (documents you ingest) — this is who *you* are.
|
|
198
|
+
|
|
199
|
+
### Learned rules
|
|
200
|
+
|
|
201
|
+
Where memory is about *you*, rules are about *how to write the code*. When Talos learns a durable
|
|
202
|
+
convention during a session — from a correction, a repeated review note, a project standard — it
|
|
203
|
+
proposes it with its `propose_rule` tool instead of quietly drifting. Proposals are not applied
|
|
204
|
+
automatically: `talos rules` lists them, `talos rules accept <id>` adds the rule to your
|
|
205
|
+
`~/.talos/TALOS.md` (which Talos loads as project rules, so it takes effect next session), and
|
|
206
|
+
`talos rules reject <id>` files it in a rejected buffer so it is never proposed again. You are the
|
|
207
|
+
gate; nothing changes how Talos behaves until you accept it.
|
|
208
|
+
|
|
209
|
+
### Knowledge base
|
|
210
|
+
|
|
211
|
+
`kb_search` retrieves relevant facts, conventions and examples from the managed knowledge base
|
|
212
|
+
so the agent is grounded in your stack and project, not just the base model. Set `kb_project`
|
|
213
|
+
in the config to the project whose knowledge you want queried. A shared layer is available to
|
|
214
|
+
every tenant; your own project's knowledge stays isolated to your key.
|
|
215
|
+
|
|
216
|
+
Point it at a git repo: `talos kb index git:<url>[@ref][#subdir]` shallow-clones and ingests it,
|
|
217
|
+
e.g. `talos kb index git:https://github.com/laravel/docs.git@11.x` or `...next.js.git@canary#docs`.
|
|
218
|
+
Re-running re-clones; the ref is part of each document id, so only changed files re-embed and a new
|
|
219
|
+
tag ingests cleanly.
|
|
220
|
+
|
|
221
|
+
You can also feed it from the cloud, privately: `talos kb index rclone:<remote>:<path>` pulls from
|
|
222
|
+
Google Drive, Dropbox, OneDrive, S3 or any of rclone's 70+ backends. It runs on your machine via
|
|
223
|
+
your own `rclone` config — Talos copies the files to a temp dir locally, ingests them through your
|
|
224
|
+
token, and deletes the copy. We never see or store your cloud credentials and never handle your raw
|
|
225
|
+
files; only the embedded chunks land in your isolated tenant. The incremental manifest keeps re-runs
|
|
226
|
+
cheap, so pointing it at a folder repeatedly is a real keep-in-sync flow.
|
|
227
|
+
|
|
228
|
+
Keep it in sync automatically: list your sources in `kb_sync_sources` (local folders or
|
|
229
|
+
`rclone:` cloud stores) and `talos kb sync` ingests them incrementally — pair it with the
|
|
230
|
+
systemd-user timer in `contrib/systemd/` and a file dropped in your Drive/Dropbox shows up in your
|
|
231
|
+
KB a few hours later, no manual step. `talos kb sources` shows what you have configured, whether
|
|
232
|
+
each source is reachable, and how many documents are already tracked — a quick offline view of what
|
|
233
|
+
Talos is learning from, no key required. When you are logged in it also lists the shared knowledge
|
|
234
|
+
Talos ships with (the managed source registry served by the gateway).
|
|
235
|
+
|
|
236
|
+
Feed it with `talos kb add <file|url> ...` or `talos kb index <folder>`: your documents go to
|
|
237
|
+
the gateway in one authenticated call, which chunks and embeds them server-side into your tenant
|
|
238
|
+
— files never leave through anything but the API, and the database is never exposed. Text, code
|
|
239
|
+
and structured files (Excel/Word/CSV/JSON/PDF) and web pages are supported. `--dry-run` previews,
|
|
240
|
+
`--project` targets a project, `--append` keeps existing entries.
|
|
241
|
+
|
|
242
|
+
### Skills
|
|
243
|
+
|
|
244
|
+
Skills are reusable instruction packs. Create `~/.talos/skills/<name>/SKILL.md` (global) or
|
|
245
|
+
`<project>/.talos/skills/<name>/SKILL.md` with frontmatter:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
---
|
|
249
|
+
name: my-skill
|
|
250
|
+
description: One line shown in the catalog
|
|
251
|
+
---
|
|
252
|
+
# Instructions the agent follows when this skill applies
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Talos lists installed skills by name and description in the system prompt and pulls the full
|
|
256
|
+
instructions on demand (so idle skills cost almost no tokens). `/skills` lists them. Example
|
|
257
|
+
packs live in this repo under `skills/` — copy one into `~/.talos/skills/` to try it. Skills
|
|
258
|
+
work alongside your `TALOS.md` project rules.
|
|
259
|
+
|
|
260
|
+
## How learning works
|
|
261
|
+
|
|
262
|
+
1. Your coding sessions are captured locally (a Claude Code hook plus `talos backfill`).
|
|
263
|
+
2. Coding sessions are converted to chat-format training rows and submitted to the backend.
|
|
264
|
+
3. The backend trains a private adapter for your tenant on a schedule.
|
|
265
|
+
4. The improved adapter serves your next sessions.
|
|
266
|
+
|
|
267
|
+
A stronger teacher model reviews the assistant's answers; its corrections become the
|
|
268
|
+
preferred training signal, so the model learns from mistakes rather than its own output.
|
|
269
|
+
|
|
270
|
+
Your own verdict counts too. When you rate an answer in chat with `/good` or `/bad`, that
|
|
271
|
+
verdict shapes the training data: `talos backfill` also reads Talos's own agent sessions
|
|
272
|
+
(`~/.talos/sessions/`), keeps a turn you rated good as a positive example (even a plain answer
|
|
273
|
+
with no code edits), and drops a turn you rated bad. This closes the loop — your feedback is the
|
|
274
|
+
label the next training cycle learns from.
|
|
275
|
+
|
|
276
|
+
Real outcomes are labels too. Talos records what happens at each tool call — whether you accepted
|
|
277
|
+
or rejected a write/edit, a command's exit code, and whether a verification command (tests, linter,
|
|
278
|
+
build) passed. `talos backfill` turns these into free labels: a change you rejected is dropped, a
|
|
279
|
+
turn whose verification passed is kept as a `verified` positive example, a failed verification
|
|
280
|
+
stays unlabeled. So the model is reinforced on work that demonstrably passed and filtered away from
|
|
281
|
+
work that failed or you threw away — no manual thumbs-up needed.
|
|
282
|
+
|
|
283
|
+
### Training-data quality
|
|
284
|
+
|
|
285
|
+
`talos backfill` only keeps a turn when it edited real source under your `code_root`. Edits to
|
|
286
|
+
memory files, logs, lockfiles, images, build artefacts, and paths like `.claude/`, `vendor/`,
|
|
287
|
+
`node_modules/`, or `.git/` are dropped, and infrastructure shell commands (`ssh`, `rsync`,
|
|
288
|
+
`systemctl`, deploy scripts) are stripped from the answer. The run reports how many noise edits
|
|
289
|
+
and non-code turns it skipped.
|
|
290
|
+
|
|
291
|
+
The practice loop's teacher corrections are preference pairs: the corrected answer is *chosen*,
|
|
292
|
+
the model's own attempt is *rejected*. They are staged locally to `~/.talos/staging/coder-dpo.jsonl`
|
|
293
|
+
as they are produced. `talos dpo-export` turns them into `{prompt, chosen, rejected}` rows
|
|
294
|
+
(`~/.talos/staging/coder-dpo-pairs.jsonl`) ready for DPO/preference training.
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Talos CLI
|
|
2
|
+
|
|
3
|
+
Fixit's AI agent for your terminal — coding, your stack, and business work. The ai.fixit.gr
|
|
4
|
+
controller routes each request to the right model (chat runs on gpt-oss:120b), so you get a
|
|
5
|
+
strong answer without picking a model. Your reviewed sessions feed the knowledge base and evals.
|
|
6
|
+
|
|
7
|
+
It is a thin, config-driven client. The model, training, and GPU run on the managed Talos
|
|
8
|
+
backend; the CLI only talks to it over HTTPS with your API key. Your data trains your own
|
|
9
|
+
private, tenant-isolated adapter and is never shared with other tenants.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pipx install talos-cli
|
|
15
|
+
talos login
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`talos login` opens a device-authorization flow: it prints a URL and a code, you approve in
|
|
19
|
+
the browser at your Talos account, and the token is stored for you. (Advanced: `talos init`
|
|
20
|
+
writes the config by hand instead.)
|
|
21
|
+
|
|
22
|
+
`talos init` writes `~/.talos/config.toml`:
|
|
23
|
+
|
|
24
|
+
| Key | Meaning | Default |
|
|
25
|
+
|-----|---------|---------|
|
|
26
|
+
| `gateway_url` | Talos backend endpoint | `https://ai.fixit.gr` |
|
|
27
|
+
| `api_key` | Your tenant API key | — |
|
|
28
|
+
| `model` | Model alias | `chat-primary` |
|
|
29
|
+
| `code_root` | Where your repos live | `~/Code` |
|
|
30
|
+
| `token_budget` | Weekly cap for the practice loop | `100000` |
|
|
31
|
+
| `persona` | `developer` / `business` / `hybrid` | inferred from role |
|
|
32
|
+
| `show_tokens` | force per-step token + tool detail on/off | by persona |
|
|
33
|
+
|
|
34
|
+
Every value can be overridden by an env var (`TALOS_GATEWAY_URL`, `TALOS_API_KEY`, ...).
|
|
35
|
+
|
|
36
|
+
### Personas
|
|
37
|
+
|
|
38
|
+
The same Talos serves two audiences; the persona tailors the system prompt and how much detail it
|
|
39
|
+
shows:
|
|
40
|
+
|
|
41
|
+
- **developer** — the coding agent: writes and reviews code, runs tests/builds, and prints the
|
|
42
|
+
per-step token and tool details.
|
|
43
|
+
- **business** — a plain-language business assistant: reads your documents and spreadsheets, writes
|
|
44
|
+
reports and content, and keeps the output quiet (no code, no token spam).
|
|
45
|
+
- **hybrid** — both.
|
|
46
|
+
|
|
47
|
+
The persona is taken from `persona` in your config, otherwise inferred from your profile role,
|
|
48
|
+
otherwise `developer`. `talos persona` shows the current one and the options; `talos persona
|
|
49
|
+
business` sets it; inside a chat, `/persona business` switches live. `show_tokens = true|false`
|
|
50
|
+
overrides the per-step detail regardless of persona (you can also toggle it for a session with
|
|
51
|
+
`/verbose`).
|
|
52
|
+
|
|
53
|
+
## Commands
|
|
54
|
+
|
|
55
|
+
Just run `talos` with no arguments to drop straight into the interactive session (same as
|
|
56
|
+
`talos chat`) — it opens clean, no command dump. Type `help` (or `/help`) any time to see the
|
|
57
|
+
role-aware list of what you can do: a customer sees chat, knowledge base, profile and sync; an
|
|
58
|
+
admin also sees training, eval, promote and the system commands, built from your key's real
|
|
59
|
+
scopes. If you are not logged in yet it runs `talos login` first. (Piped or non-interactive —
|
|
60
|
+
`talos | head`, CI — it prints the static command list instead.)
|
|
61
|
+
|
|
62
|
+
| Command | What it does |
|
|
63
|
+
|---------|--------------|
|
|
64
|
+
| `talos` | Enter the interactive session directly (type `help` for what your role can do) |
|
|
65
|
+
| `talos login` | Authorize via device code; stores the token |
|
|
66
|
+
| `talos init` | Write or update the config file by hand |
|
|
67
|
+
| `talos status` | Show gateway, model, and your key's client_id and scopes |
|
|
68
|
+
| `talos status --system` | (admin) What is running: training state, GPU, loaded models, services |
|
|
69
|
+
| `talos chat ["prompt"]` | Interactive chat, or one-shot if a prompt is given |
|
|
70
|
+
| `talos backfill` | Convert existing Claude Code transcripts to training rows |
|
|
71
|
+
| `talos submit` | Upload staged training rows to the backend |
|
|
72
|
+
| `talos loop` | Run the bounded practice loop (teacher-reviewed self-training) |
|
|
73
|
+
| `talos dpo-export` | Convert collected DPO rows into prompt/chosen/rejected pairs |
|
|
74
|
+
|
|
75
|
+
## Agent capabilities
|
|
76
|
+
|
|
77
|
+
In a session Talos can read and edit code, run shell/ssh commands, find files (`glob`),
|
|
78
|
+
fetch web pages (`web_fetch`), drive Bitbucket (`bitbucket`), consult the knowledge base
|
|
79
|
+
(`kb_search`), and read structured
|
|
80
|
+
documents with `read_file` — Excel (`.xlsx`/`.xlsm`), Word (`.docx`), `.csv`/`.tsv`, `.json`
|
|
81
|
+
and `.pdf` (pdf needs `pdftotext`). Spreadsheets and Word files are parsed with the standard
|
|
82
|
+
library, no extra packages.
|
|
83
|
+
|
|
84
|
+
It can also **write** real Office and data files with `write_doc`: `.xlsx` (Excel) and
|
|
85
|
+
`.csv`/`.tsv` from tab-separated rows (numbers stored as numbers, so totals work) and `.docx`
|
|
86
|
+
(Word) with one paragraph per line. `.xlsx`/`.docx` need the optional extra — install with
|
|
87
|
+
`pip install talos-cli[files]` (openpyxl + python-docx); `.csv`/`.tsv` work out of the box. So the
|
|
88
|
+
business skills can read your Excel/Word and hand back a finished spreadsheet or document.
|
|
89
|
+
|
|
90
|
+
### Bitbucket
|
|
91
|
+
|
|
92
|
+
The `bitbucket` tool lets Talos run the full branch -> PR -> review -> merge workflow with your
|
|
93
|
+
own Bitbucket credentials, locally — it talks to the Bitbucket API directly (same trust model as
|
|
94
|
+
git/ssh), never through the gateway. It can list repos, list and read pull requests with their
|
|
95
|
+
review comments, create a PR, reply to a review, merge, check pipeline/CI status, and create a
|
|
96
|
+
branch. Configure it once:
|
|
97
|
+
|
|
98
|
+
```toml
|
|
99
|
+
bitbucket_user = "your-bitbucket-username"
|
|
100
|
+
bitbucket_token = "app-password-with-pullrequest-and-repo-scopes"
|
|
101
|
+
bitbucket_workspace = "your-workspace" # optional; lets you pass just the repo slug
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
(or `TALOS_BITBUCKET_USER` / `TALOS_BITBUCKET_TOKEN` / `TALOS_BITBUCKET_WORKSPACE`). The tool
|
|
105
|
+
defaults to `ask`, so each action is confirmed before it runs. A PR's outcome (merged / declined)
|
|
106
|
+
also becomes a training label for the self-improving loop.
|
|
107
|
+
|
|
108
|
+
### MCP tool servers
|
|
109
|
+
|
|
110
|
+
Talos can use tools from any [Model Context Protocol](https://modelcontextprotocol.io) server,
|
|
111
|
+
either remote (HTTP) or local (a subprocess over stdio). Declare one block per server in
|
|
112
|
+
`~/.talos/config.toml`:
|
|
113
|
+
|
|
114
|
+
```toml
|
|
115
|
+
# remote HTTP server
|
|
116
|
+
[mcp.vita4you]
|
|
117
|
+
url = "https://your-host/mcp"
|
|
118
|
+
token = "optional-bearer-token" # sent as Authorization: Bearer ...
|
|
119
|
+
# enabled = false # temporarily turn a server off
|
|
120
|
+
# timeout = 30
|
|
121
|
+
|
|
122
|
+
# local stdio server (a subprocess speaking newline-delimited JSON-RPC)
|
|
123
|
+
[mcp.fixit]
|
|
124
|
+
command = "python3"
|
|
125
|
+
args = ["/home/me/docker/scripts/memory-mcp-server.py"]
|
|
126
|
+
[mcp.fixit.env] # optional environment for the subprocess
|
|
127
|
+
FIXIT_MEMORY_DIR = "/home/me/.claude/projects/.../memory"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
On startup Talos connects to each server (`initialize` → `tools/list`), and its tools are offered
|
|
131
|
+
to the model namespaced as `<server>__<tool>` (e.g. `vita4you__get_order_details`). When the model
|
|
132
|
+
calls one, Talos forwards it as an MCP `tools/call` and feeds the result back. MCP tools default to
|
|
133
|
+
`ask` (each external call is confirmed). Both plain-JSON and `text/event-stream` (Streamable HTTP)
|
|
134
|
+
responses are handled, and a `Mcp-Session-Id` is captured and resent. `talos mcp` lists the
|
|
135
|
+
configured servers and tests connectivity; `/mcp` does the same inside a chat. A server that is
|
|
136
|
+
unreachable at startup is skipped with a warning — it never blocks the CLI. Local stdio servers are
|
|
137
|
+
launched as a subprocess and shut down cleanly when the chat ends.
|
|
138
|
+
|
|
139
|
+
### Streaming
|
|
140
|
+
|
|
141
|
+
In plain chat (`/agent off`) the reply streams in token by token as the model produces it, so you
|
|
142
|
+
see the answer forming instead of waiting for the whole thing; a spinner shows until the first
|
|
143
|
+
token and it falls back to a buffered reply if the gateway is not streaming. The agentic tool-loop
|
|
144
|
+
turn stays buffered because it needs the complete response to detect tool calls.
|
|
145
|
+
|
|
146
|
+
### Sub-agent delegation
|
|
147
|
+
|
|
148
|
+
For a big task the agent can call `delegate` to hand a focused, self-contained piece of work to a
|
|
149
|
+
fresh sub-agent that has the same tools but its own clean context (e.g. "analyse module X and
|
|
150
|
+
summarise its API"). The sub-agent shares your gateway, permissions and weekly token budget, runs
|
|
151
|
+
with a smaller step cap, and returns its answer to the main agent; it cannot delegate further. This
|
|
152
|
+
keeps the main conversation focused instead of filling it with exploration.
|
|
153
|
+
|
|
154
|
+
### Sync across machines
|
|
155
|
+
|
|
156
|
+
Your setup follows you. `talos sync push` uploads your config (model, kb_project, token budget),
|
|
157
|
+
shortcuts, per-tool permissions, your global `~/.talos/TALOS.md` and your skills to your account;
|
|
158
|
+
`talos sync pull` restores them on another machine (`talos sync status` shows what is stored). A
|
|
159
|
+
fresh `talos login` pulls them automatically, so a new machine is ready instantly. Secrets — your
|
|
160
|
+
API key and Bitbucket token — are never uploaded, and machine-local paths stay local.
|
|
161
|
+
|
|
162
|
+
### Profile
|
|
163
|
+
|
|
164
|
+
Tell Talos who you are once and it adapts to you: `talos profile --role developer --about "I run
|
|
165
|
+
a Magento shop" --preferences "answer in Greek, be terse"` (run `talos profile` to view). Your role
|
|
166
|
+
(developer / marketing / founder / ...), a short about, and your preferences are loaded at the start
|
|
167
|
+
of every session and honoured by the agent. It is stored on your account and synced across machines,
|
|
168
|
+
and it is the same data the customer-portal onboarding wizard fills — so even a non-developer gets a
|
|
169
|
+
Talos pointed in the right direction from the first message.
|
|
170
|
+
|
|
171
|
+
### Memory
|
|
172
|
+
|
|
173
|
+
Talos keeps a persistent memory of durable facts and preferences about you — your role, your stack,
|
|
174
|
+
how you like answers, standing instructions. It loads them at the start of every session and works
|
|
175
|
+
with them in mind, and saves a new one (via its `remember` tool) when you tell it something lasting.
|
|
176
|
+
`/remember` shows what is stored and `/remember <fact>` adds one by hand. Memory lives on your
|
|
177
|
+
account (keyed by your client_id), so it follows you to every machine you log in from; it is distinct
|
|
178
|
+
from the knowledge base (documents you ingest) — this is who *you* are.
|
|
179
|
+
|
|
180
|
+
### Learned rules
|
|
181
|
+
|
|
182
|
+
Where memory is about *you*, rules are about *how to write the code*. When Talos learns a durable
|
|
183
|
+
convention during a session — from a correction, a repeated review note, a project standard — it
|
|
184
|
+
proposes it with its `propose_rule` tool instead of quietly drifting. Proposals are not applied
|
|
185
|
+
automatically: `talos rules` lists them, `talos rules accept <id>` adds the rule to your
|
|
186
|
+
`~/.talos/TALOS.md` (which Talos loads as project rules, so it takes effect next session), and
|
|
187
|
+
`talos rules reject <id>` files it in a rejected buffer so it is never proposed again. You are the
|
|
188
|
+
gate; nothing changes how Talos behaves until you accept it.
|
|
189
|
+
|
|
190
|
+
### Knowledge base
|
|
191
|
+
|
|
192
|
+
`kb_search` retrieves relevant facts, conventions and examples from the managed knowledge base
|
|
193
|
+
so the agent is grounded in your stack and project, not just the base model. Set `kb_project`
|
|
194
|
+
in the config to the project whose knowledge you want queried. A shared layer is available to
|
|
195
|
+
every tenant; your own project's knowledge stays isolated to your key.
|
|
196
|
+
|
|
197
|
+
Point it at a git repo: `talos kb index git:<url>[@ref][#subdir]` shallow-clones and ingests it,
|
|
198
|
+
e.g. `talos kb index git:https://github.com/laravel/docs.git@11.x` or `...next.js.git@canary#docs`.
|
|
199
|
+
Re-running re-clones; the ref is part of each document id, so only changed files re-embed and a new
|
|
200
|
+
tag ingests cleanly.
|
|
201
|
+
|
|
202
|
+
You can also feed it from the cloud, privately: `talos kb index rclone:<remote>:<path>` pulls from
|
|
203
|
+
Google Drive, Dropbox, OneDrive, S3 or any of rclone's 70+ backends. It runs on your machine via
|
|
204
|
+
your own `rclone` config — Talos copies the files to a temp dir locally, ingests them through your
|
|
205
|
+
token, and deletes the copy. We never see or store your cloud credentials and never handle your raw
|
|
206
|
+
files; only the embedded chunks land in your isolated tenant. The incremental manifest keeps re-runs
|
|
207
|
+
cheap, so pointing it at a folder repeatedly is a real keep-in-sync flow.
|
|
208
|
+
|
|
209
|
+
Keep it in sync automatically: list your sources in `kb_sync_sources` (local folders or
|
|
210
|
+
`rclone:` cloud stores) and `talos kb sync` ingests them incrementally — pair it with the
|
|
211
|
+
systemd-user timer in `contrib/systemd/` and a file dropped in your Drive/Dropbox shows up in your
|
|
212
|
+
KB a few hours later, no manual step. `talos kb sources` shows what you have configured, whether
|
|
213
|
+
each source is reachable, and how many documents are already tracked — a quick offline view of what
|
|
214
|
+
Talos is learning from, no key required. When you are logged in it also lists the shared knowledge
|
|
215
|
+
Talos ships with (the managed source registry served by the gateway).
|
|
216
|
+
|
|
217
|
+
Feed it with `talos kb add <file|url> ...` or `talos kb index <folder>`: your documents go to
|
|
218
|
+
the gateway in one authenticated call, which chunks and embeds them server-side into your tenant
|
|
219
|
+
— files never leave through anything but the API, and the database is never exposed. Text, code
|
|
220
|
+
and structured files (Excel/Word/CSV/JSON/PDF) and web pages are supported. `--dry-run` previews,
|
|
221
|
+
`--project` targets a project, `--append` keeps existing entries.
|
|
222
|
+
|
|
223
|
+
### Skills
|
|
224
|
+
|
|
225
|
+
Skills are reusable instruction packs. Create `~/.talos/skills/<name>/SKILL.md` (global) or
|
|
226
|
+
`<project>/.talos/skills/<name>/SKILL.md` with frontmatter:
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
---
|
|
230
|
+
name: my-skill
|
|
231
|
+
description: One line shown in the catalog
|
|
232
|
+
---
|
|
233
|
+
# Instructions the agent follows when this skill applies
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Talos lists installed skills by name and description in the system prompt and pulls the full
|
|
237
|
+
instructions on demand (so idle skills cost almost no tokens). `/skills` lists them. Example
|
|
238
|
+
packs live in this repo under `skills/` — copy one into `~/.talos/skills/` to try it. Skills
|
|
239
|
+
work alongside your `TALOS.md` project rules.
|
|
240
|
+
|
|
241
|
+
## How learning works
|
|
242
|
+
|
|
243
|
+
1. Your coding sessions are captured locally (a Claude Code hook plus `talos backfill`).
|
|
244
|
+
2. Coding sessions are converted to chat-format training rows and submitted to the backend.
|
|
245
|
+
3. The backend trains a private adapter for your tenant on a schedule.
|
|
246
|
+
4. The improved adapter serves your next sessions.
|
|
247
|
+
|
|
248
|
+
A stronger teacher model reviews the assistant's answers; its corrections become the
|
|
249
|
+
preferred training signal, so the model learns from mistakes rather than its own output.
|
|
250
|
+
|
|
251
|
+
Your own verdict counts too. When you rate an answer in chat with `/good` or `/bad`, that
|
|
252
|
+
verdict shapes the training data: `talos backfill` also reads Talos's own agent sessions
|
|
253
|
+
(`~/.talos/sessions/`), keeps a turn you rated good as a positive example (even a plain answer
|
|
254
|
+
with no code edits), and drops a turn you rated bad. This closes the loop — your feedback is the
|
|
255
|
+
label the next training cycle learns from.
|
|
256
|
+
|
|
257
|
+
Real outcomes are labels too. Talos records what happens at each tool call — whether you accepted
|
|
258
|
+
or rejected a write/edit, a command's exit code, and whether a verification command (tests, linter,
|
|
259
|
+
build) passed. `talos backfill` turns these into free labels: a change you rejected is dropped, a
|
|
260
|
+
turn whose verification passed is kept as a `verified` positive example, a failed verification
|
|
261
|
+
stays unlabeled. So the model is reinforced on work that demonstrably passed and filtered away from
|
|
262
|
+
work that failed or you threw away — no manual thumbs-up needed.
|
|
263
|
+
|
|
264
|
+
### Training-data quality
|
|
265
|
+
|
|
266
|
+
`talos backfill` only keeps a turn when it edited real source under your `code_root`. Edits to
|
|
267
|
+
memory files, logs, lockfiles, images, build artefacts, and paths like `.claude/`, `vendor/`,
|
|
268
|
+
`node_modules/`, or `.git/` are dropped, and infrastructure shell commands (`ssh`, `rsync`,
|
|
269
|
+
`systemctl`, deploy scripts) are stripped from the answer. The run reports how many noise edits
|
|
270
|
+
and non-code turns it skipped.
|
|
271
|
+
|
|
272
|
+
The practice loop's teacher corrections are preference pairs: the corrected answer is *chosen*,
|
|
273
|
+
the model's own attempt is *rejected*. They are staged locally to `~/.talos/staging/coder-dpo.jsonl`
|
|
274
|
+
as they are produced. `talos dpo-export` turns them into `{prompt, chosen, rejected}` rows
|
|
275
|
+
(`~/.talos/staging/coder-dpo-pairs.jsonl`) ready for DPO/preference training.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "talos-ai"
|
|
7
|
+
version = "0.63.1"
|
|
8
|
+
description = "Talos: Fixit's terminal AI agent for coding and business work, model-routed by the ai.fixit.gr controller"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { text = "Proprietary" }
|
|
12
|
+
authors = [{ name = "Fixit E.E.", email = "info@fixit.gr" }]
|
|
13
|
+
keywords = ["llm", "coding-assistant", "fine-tuning"]
|
|
14
|
+
dependencies = []
|
|
15
|
+
|
|
16
|
+
[project.urls]
|
|
17
|
+
Homepage = "https://www.fixit.gr"
|
|
18
|
+
Documentation = "https://ai.fixit.gr"
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
teacher = ["anthropic>=0.40"]
|
|
22
|
+
files = ["openpyxl>=3.1", "python-docx>=1.1"]
|
|
23
|
+
|
|
24
|
+
[project.scripts]
|
|
25
|
+
talos = "talos_cli.__main__:main"
|
|
26
|
+
|
|
27
|
+
[tool.setuptools]
|
|
28
|
+
packages = ["talos_cli"]
|
|
29
|
+
|
|
30
|
+
[tool.setuptools.package-data]
|
|
31
|
+
talos_cli = ["capture_hook.sh", "bundled_skills/*/SKILL.md"]
|