euron-code 0.4.1__tar.gz → 0.5.0__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.
Files changed (94) hide show
  1. {euron_code-0.4.1 → euron_code-0.5.0}/CHANGELOG.md +76 -14
  2. {euron_code-0.4.1 → euron_code-0.5.0}/PKG-INFO +119 -54
  3. {euron_code-0.4.1 → euron_code-0.5.0}/README.md +118 -53
  4. {euron_code-0.4.1 → euron_code-0.5.0}/pyproject.toml +1 -1
  5. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/__init__.py +1 -1
  6. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/activity.py +1 -1
  7. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/agent.py +225 -5
  8. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/api.py +56 -1
  9. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/attachments.py +3 -4
  10. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/auth.py +1 -1
  11. euron_code-0.5.0/src/euron_code/builtin_skills/build-from-reference/SKILL.md +28 -0
  12. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/cli.py +20 -0
  13. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/config.py +4 -2
  14. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/context.py +1 -1
  15. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/doctor.py +3 -3
  16. euron_code-0.5.0/src/euron_code/error_hints.py +65 -0
  17. euron_code-0.5.0/src/euron_code/errorlog.py +266 -0
  18. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/hooks.py +2 -2
  19. euron_code-0.5.0/src/euron_code/licensing.py +67 -0
  20. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/permissions.py +2 -2
  21. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/prompts.py +15 -3
  22. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/repl.py +78 -22
  23. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/sessions.py +1 -1
  24. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/__init__.py +5 -1
  25. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/background.py +12 -8
  26. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/base.py +244 -244
  27. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/db.py +1 -4
  28. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/document.py +1 -4
  29. euron_code-0.5.0/src/euron_code/tools/erie.py +271 -0
  30. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/fs.py +4 -13
  31. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/ignore.py +75 -75
  32. euron_code-0.5.0/src/euron_code/tools/oss.py +178 -0
  33. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/reuse.py +6 -5
  34. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/search.py +2 -4
  35. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/shell.py +62 -5
  36. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/skill.py +1 -4
  37. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/symbols.py +1 -4
  38. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/task.py +1 -4
  39. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/todo.py +1 -3
  40. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/web.py +1 -2
  41. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/usage_view.py +1 -1
  42. {euron_code-0.4.1 → euron_code-0.5.0}/tests/conftest.py +17 -0
  43. {euron_code-0.4.1 → euron_code-0.5.0}/tests/mock_gateway.py +215 -1
  44. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_api_shell.py +160 -160
  45. euron_code-0.5.0/tests/test_bench.py +46 -0
  46. euron_code-0.5.0/tests/test_erie.py +339 -0
  47. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_permissions.py +91 -91
  48. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_tools_fs.py +143 -143
  49. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_tokens_shortcuts.py +1 -1
  50. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_accounts_value_setup.py +3 -3
  51. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_activity.py +3 -3
  52. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_context.py +1 -1
  53. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v4.py +13 -4
  54. euron_code-0.5.0/tests/test_v5.py +398 -0
  55. {euron_code-0.4.1 → euron_code-0.5.0}/.gitignore +0 -0
  56. {euron_code-0.4.1 → euron_code-0.5.0}/LICENSE +0 -0
  57. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/__main__.py +0 -0
  58. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/explain-codebase/SKILL.md +0 -0
  59. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/review/SKILL.md +0 -0
  60. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/test-writer/SKILL.md +0 -0
  61. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/cache.py +0 -0
  62. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/checkpoints.py +0 -0
  63. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/LICENSE +0 -0
  64. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/__init__.py +0 -0
  65. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/text.py +0 -0
  66. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/toolout.py +0 -0
  67. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/credentials.py +0 -0
  68. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/documents.py +0 -0
  69. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/frontmatter.py +0 -0
  70. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/keys.py +0 -0
  71. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/memory.py +0 -0
  72. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/project_setup.py +0 -0
  73. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/repomap.py +0 -0
  74. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/rules.py +0 -0
  75. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/skills.py +0 -0
  76. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/textsafe.py +0 -0
  77. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/trust.py +0 -0
  78. {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/ui.py +0 -0
  79. {euron_code-0.4.1 → euron_code-0.5.0}/tests/helpers.py +0 -0
  80. {euron_code-0.4.1 → euron_code-0.5.0}/tests/serve_helper.py +0 -0
  81. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_agent_mock.py +0 -0
  82. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_cli_e2e.py +0 -0
  83. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_context_memory_sessions.py +0 -0
  84. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_db.py +0 -0
  85. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_powershell_exit_codes.py +0 -0
  86. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_repl.py +0 -0
  87. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_search.py +0 -0
  88. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_textsafe.py +0 -0
  89. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_rules_skills_hooks.py +0 -0
  90. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_usage_headers.py +0 -0
  91. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v31_security.py +0 -0
  92. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_attachments.py +0 -0
  93. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_live_repl.py +0 -0
  94. {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_single_login.py +0 -0
@@ -1,5 +1,71 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 (2026-11-05)
4
+
5
+ ### Build from references (V5 contract section 1)
6
+ - New tools `oss_search` (repos or code), `oss_tree` and `oss_read` through Euron:
7
+ every result shows its licence; only MIT, Apache-2.0, BSD, ISC, 0BSD, Unlicense, MPL-2.0, CC0 and Zlib.
8
+ A `license_not_permitted` answer tells the model plainly it must not use that code, and the client drops
9
+ any non-permitted result it might still receive. MPL-2.0 is flagged as file-level copyleft.
10
+ - `add_third_party_notice` records each reused source in the project's `THIRD_PARTY_NOTICES.md`.
11
+ - Reuse-first is the default for "build me X" and UI work (system prompt + built-in skill
12
+ `build-from-reference`): Euron's index first (typescript for UI), then permissive open source, one or two
13
+ references, read only the needed files, adapt with attribution, generate only what is missing; prefer the
14
+ project's existing component system. Budget notes after 4 searches and 6 reads.
15
+ - `/reference <what>` shows candidates from both sources with licences. The completion report and `-p` JSON
16
+ list what was reused (`Reused: repo/path (MIT)`, `"reused": [...]`).
17
+
18
+ ### Error log (V5 contract section 2)
19
+ - Service and network errors, tool errors, crashes (fingerprint: type + top frame), hook failures and slash
20
+ command failures are reported, scrubbed (no prompts, file contents, command text, env values or secrets;
21
+ quoted text removed, home and project paths masked, key-like strings redacted), batched (20 per request,
22
+ under 8 KB) and sent in the background with a 3 s timeout; never blocks or fails what you are doing.
23
+ - Offline queue in `~/.euron/errors.jsonl` (at most 500), sent next time; `/bug` lists the last 10 with ids.
24
+ - Off with `errorReporting: false` or `EURON_NO_ERROR_REPORTS=1`. Disclosed in the README.
25
+ - An unexpected crash now prints a short message with an error id instead of a traceback.
26
+
27
+ ### Reuse engine client (V6 contract section 6)
28
+ - `find_reusable(requirement, components, allow_external)`: the first step for build-type requests (a
29
+ heuristic adds a short note to the request; bug fixes, small edits and questions skip it). The model
30
+ splits the request into 1-8 components; Euron decides REUSE / ADAPT / GENERATE per component and
31
+ the CLI shows the table (component, decision, repository@sha, licence, confidence). The client re-checks
32
+ every decision: a non-permitted licence or a failed security scan always becomes GENERATE, unverified
33
+ security turns REUSE into ADAPT.
34
+ - The activity line shows the engine's states (searching, found, checking licence, validating security,
35
+ reusing, adapting, generating, running tests, integration completed), driven by the real tool calls.
36
+ - After tests pass on reused or adapted code, its metadata (never code) goes to the student's private
37
+ component library (`POST /v1/components`); `/components` lists it.
38
+ - Settings `reuse.enabled` and `reuse.external` (both default true), `--no-reuse`. A reuse engine or GitHub
39
+ failure never fails the turn: it generates instead, with a dim note.
40
+ - `-p --output-format json` gains `reuse` and `task_id`; the completion report adds "Reuse plan: ...".
41
+
42
+ ### From the first live build test
43
+ - Reuse no longer depends on the model choosing it: for a build request the CLI splits the request into
44
+ components locally (no model call) and calls `/v1/reuse/plan` before the first model call, then puts
45
+ the decisions, files and licences into that first message and shows the table. Websites and UI ask for
46
+ Euron's TypeScript / TSX components. `find_reusable` stays available for more.
47
+ - The details the user gives are used: a system-prompt rule, an attached local photo is copied into
48
+ `assets/` (or `public/`) and referenced, and once per prompt the changed files are checked for
49
+ "Your Name", "Lorem ipsum", "example@example.com" and "TODO: replace", with one nudge to fix them.
50
+ - "Context was N% full ..." is printed only when it freed at least 2,000 tokens or the context was
51
+ 60% full or more.
52
+ - The error-report note moved from the privacy section to Settings.
53
+
54
+ ### Branding
55
+ - README top: the official Euron Code definition, the 3-step start, "Everything you need to build" and
56
+ the daily allowance with its fair-use note; usage at `euron usage`, `/usage` and euron.one.
57
+ - No vendor or model names, and no internal service details, anywhere a student can see. The `/usage`
58
+ value line reads "at reference market API prices". `/status`, `/cost`, `/context` and `euron doctor` show
59
+ percentages and plain words instead of internal sizes and addresses.
60
+
61
+ ### Fewer tokens per request
62
+ - Tool descriptions shortened (about 730 fewer tokens on every request).
63
+
64
+ ## 0.4.2 (2026-11-05)
65
+
66
+ ### Changed
67
+ - Documentation and messages describe what Euron Code does for you, without internal service details.
68
+
3
69
  ## 0.4.1 (2026-11-05)
4
70
 
5
71
  ### Fixed
@@ -20,7 +86,7 @@
20
86
  - The system prompt now says to use these for servers instead of `bash`.
21
87
 
22
88
  ### Reuse Euron's open-source code (V4 contract section 3)
23
- - `euron_reuse_search` and `euron_reuse_read` over the gateway's index of Euron's public MIT repos; the
89
+ - `euron_reuse_search` and `euron_reuse_read` over Euron's public MIT repos; the
24
90
  system prompt asks to search before writing a substantial common component and to keep the licence
25
91
  notice; `/reuse <query>`.
26
92
 
@@ -34,7 +100,7 @@
34
100
 
35
101
  ### More tools and gaps closed (audit increment 6)
36
102
  - `find_symbol` (definitions and references), `delete_file` and `move_file` (both undone by `/rewind`).
37
- - `AGENTS.md` and `CLAUDE.md` are read alongside `EURON.md` (trust-gated like it).
103
+ - `AGENTS.md` and other agents' instruction files are read alongside `EURON.md` (trust-gated like it).
38
104
  - Inline `<tool_call>` JSON is repaired (trailing commas, single quotes, Python literals); garbage
39
105
  becomes an error result for the model, never a crash.
40
106
  - `/rewind` works after `euron --resume`: checkpoints are kept in `~/.euron/checkpoints/<session>/`
@@ -43,9 +109,7 @@
43
109
  - `/export` warns that the file contains tool output.
44
110
 
45
111
  ### Euron-only client and privacy (V4 contract section 1, audit increment 3)
46
- - A 403 `client_not_supported` shows the gateway's message ("works through the euron app only").
47
- - README and the first image attach say where data goes: prompts on GPUs rented from Vast.ai (not
48
- logged), images described by Google Gemini (not stored).
112
+ - A 403 `client_not_supported` explains that Euron Code works through the euron app only.
49
113
 
50
114
  ### CI
51
115
  - `.github/workflows/ci.yml`: pytest on ubuntu, windows and macos x Python 3.9 and 3.12 (ripgrep on one
@@ -65,7 +129,7 @@
65
129
  1024. A request that would not fit is compacted first. The prompt estimate starts from the last
66
130
  server-reported `prompt_tokens` and adds only the new messages.
67
131
 
68
- ### Context management for a 32k window
132
+ ### Context management
69
133
  - An output budget is reserved (min(maxOutputTokens, window/4)); percentages are of the usable rest.
70
134
  - From 50%, tool outputs are cleared biggest and oldest first until under 40% (the latest step is never
71
135
  touched). Each stub names the call (for reads: path and line range) so the model can read it again.
@@ -77,13 +141,13 @@
77
141
  2,000 lines return an outline (definitions with line numbers) unless a range is given. The system
78
142
  prompt says: search first, read ranges, edit with `edit_file`, never rewrite big files.
79
143
 
80
- ### A live session like Claude Code
144
+ ### A live session
81
145
  - **Activity line** while the agent works: an animated glyph, a rotating verb, elapsed time, tokens
82
146
  sent and received (counted live from the stream), what is happening (`thinking`, `writing app.py`,
83
- `running pytest 12s`, `waiting for a GPU slot (2 ahead)`, `retrying in 3s`) and `esc to interrupt`.
147
+ `running pytest 12s`, `waiting for capacity (2 ahead)`, `retrying in 3s`) and `esc to interrupt`.
84
148
  On a terminal it redraws 10 times a second; without one it prints a progress line every 15 s; in `-p`
85
- mode it appears on stderr only when stderr is a terminal. The gateway's `: queued, N ahead` comments
86
- are shown instead of being ignored.
149
+ mode it appears on stderr only when stderr is a terminal. Queue positions are shown
150
+ instead of being ignored.
87
151
  - **Status bar**: model and effort, mode, session tokens and their value, context %, today's and this
88
152
  week's remaining quota, session uptime. Refreshed continuously.
89
153
  - **Type while it works.** The turn runs in a worker thread and the prompt stays live. `/usage`, `/cost`,
@@ -114,8 +178,7 @@
114
178
 
115
179
  ### Plan quotas and value (V3 contract)
116
180
  - `/usage` shows the plan tier, all four periods (day, week, month, year) with bars and refill times,
117
- `quota.blocked` prominently, and value lines at the reference API price ("≈ $1.07 (₹94) at Claude
118
- Sonnet 5.5 API list prices · included in your plan"), plus what the allowance is worth. `/cost` and the
181
+ `quota.blocked` prominently, and value lines at reference market API prices, plus what the allowance is worth. `/cost` and the
119
182
  status bar show this session's value. Always labelled as a reference, never a bill.
120
183
  - New 429 codes `monthly_token_limit`, `yearly_token_limit` and `cooldown`, each with its refill time in
121
184
  local time; exit code 5 in `-p` mode.
@@ -226,8 +289,7 @@
226
289
  at turn N"; a read that reached the end of the file covers later partial reads.
227
290
  - Micro-compaction at 60% of the context: tool outputs older than the last 3 steps become one-line stubs
228
291
  (no model call); the summary still happens at 75%.
229
- - `/cost` and `/context` report prompt tokens sent, tokens served from the server's prefix cache
230
- (`usage.prompt_tokens_details.cached_tokens`) and tokens saved by each measure. `-p --output-format
292
+ - `/cost` and `/context` report prompt tokens sent, tokens reused from cache and tokens saved by each measure. `-p --output-format
231
293
  json` adds `cached_tokens` and `saved_tokens`.
232
294
 
233
295
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: euron-code
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Summary: Euron Code: an agentic coding assistant in your terminal for Euron Plus and Super 30 students.
5
5
  Project-URL: Homepage, https://euron.one/code-agent
6
6
  Author-email: Euron <contact@euron.one>
@@ -66,9 +66,20 @@ Description-Content-Type: text/markdown
66
66
 
67
67
  # Euron Code
68
68
 
69
- An AI coding agent in your terminal, made for Euron students. Ask it to explain a codebase, fix a bug,
70
- write tests or build a feature: it reads your files, makes the changes, runs your tests and checks its
71
- own work. Included with **Euron Plus** and **Super 30** (get Plus at https://euron.one/plus).
69
+ **Imagine It. Prompt It. Build Anything.**
70
+
71
+ Your AI Software Engineer. Ready to Build.
72
+
73
+ From a simple website to a complete AI-powered application, Euron Code turns your ideas into real,
74
+ working software.
75
+
76
+ It doesn't just write code. It thinks, plans, builds, runs, tests, finds errors, and fixes them. All from
77
+ your terminal.
78
+
79
+ No more starting from scratch. Euron Code intelligently reuses existing open-source implementations,
80
+ writes what's missing, and brings everything together.
81
+
82
+ One idea. One prompt. Endless possibilities.
72
83
 
73
84
  ## Get started in 3 steps
74
85
 
@@ -91,12 +102,37 @@ Enter.
91
102
 
92
103
  **3. Type what you want**, or type `/` to see every command:
93
104
 
94
- - `explain how authentication works here`
105
+ - `build me a todo app with a FastAPI backend and tests`
95
106
  - `the tests fail, find out why and fix them`
96
- - `/model` to pick a model, `/usage` to see your quota and what it is worth
107
+ - `/usage` to see your tokens today, this week, month and year
97
108
 
98
109
  That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
99
110
 
111
+ ## Everything you need to build
112
+
113
+ - 🧠 **Thinks Before It Codes**: understands your requirements and plans the implementation.
114
+ - ⚡ **Builds Complete Applications**: websites, SaaS products, AI agents, APIs, dashboards, automations,
115
+ and more.
116
+ - 🛠️ **Writes, Runs & Fixes**: creates files, executes commands, runs tests, and fixes errors.
117
+ - 🔍 **Reuses Proven Code**: discovers reusable Euron and approved open-source components to build faster.
118
+ - 🔄 **Works Across Your Project**: understands existing code and makes changes without unnecessarily
119
+ rebuilding everything.
120
+ - 🚀 **From Idea to Working Software**: helps you build, test, and prepare real applications for
121
+ deployment.
122
+
123
+ ## 10 million AI tokens every day
124
+
125
+ Build more. Experiment more. Create without constantly worrying about tokens.
126
+
127
+ *Up to 10 million tokens per day, subject to fair-use policies, model availability, and plan limits.*
128
+
129
+ Included with **Euron Plus** and **Super 30** (get Plus at https://euron.one/plus).
130
+
131
+ Track your usage any time: `euron usage` in a terminal, `/usage` in a session, or
132
+ https://euron.one/code-agent/usage.
133
+
134
+ *Euron Code: You Imagine. We Code. You Create.*
135
+
100
136
  ## What happens automatically
101
137
 
102
138
  - **Project setup.** The first time in a folder it writes `EURON.md` (your stack, build and test
@@ -105,14 +141,15 @@ That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
105
141
  improve `EURON.md`.
106
142
  - **Context management.** Old tool output is cleared and long conversations are summarised before
107
143
  they fill the context, so it never runs out mid-task. Long answers continue by themselves.
108
- - **Token saving.** Unchanged files are not re-read, big files are read in parts, the prompt is kept
109
- cache-friendly for the servers.
144
+ - **Token saving.** Unchanged files are not re-read and big files are read in parts.
110
145
  - **Local cache.** `.euron/cache/` remembers the repo map and file list, so new sessions start fast.
111
146
  Safe to delete; never holds secrets; git-ignored.
112
147
  - **Runs your app.** It can start your dev server in the background, check it answers
113
148
  (`check_app`, optionally in a headless browser), read its logs and stop it again.
114
- - **Reuses Euron's code.** Before writing a common component (auth, payments, RAG, ...) it searches
115
- Euron's open-source repos (MIT) and adapts what fits, keeping the licence notice. Try `/reuse <query>`.
149
+ - **Builds from references, not from scratch.** For "build me X" and for UI work it first searches
150
+ Euron's open-source repos, then permissively licensed projects on GitHub, reads only the files it needs,
151
+ adapts them (keeping the licence notice and recording each source in `THIRD_PARTY_NOTICES.md`) and
152
+ writes only what is missing. Faster, and far fewer tokens. Try `/reference <what you want to build>`.
116
153
  - **Live progress.** While it works you see what it is doing, the time, tokens and an `esc to interrupt`
117
154
  line, and you can keep typing (see below).
118
155
 
@@ -127,7 +164,9 @@ Type `/` and pick from the menu. The most useful:
127
164
  | `/status` | account, key, model, mode, session time and quota at a glance |
128
165
  | `/cost`, `/context` | tokens of this session and what fills the context |
129
166
  | `/attach <files>` | attach files, folders, Word/Excel/PowerPoint/PDF documents or images |
167
+ | `/reference <what>` | references to build from: Euron's repos + permissive open source, with licences |
130
168
  | `/reuse <query>` | search Euron's open-source repos for code to reuse |
169
+ | `/components` | your component library: reused code whose tests passed in your projects |
131
170
  | `/ps` | background processes (dev servers) it started; `/ps stop` |
132
171
  | `/plan` | plan mode: it explores and proposes a plan, changes nothing |
133
172
  | `/review` | review your uncommitted changes |
@@ -165,23 +204,52 @@ how full the context is, what is left today and this week, and how long the sess
165
204
  Shift+Tab cycles default -> acceptEdits -> plan, and reaches bypass only if you started with it.
166
205
  `--add-dir ../shared` lets it also work in another folder.
167
206
 
168
- ## Where your data goes
207
+ ## Your code and your account
169
208
 
170
- - Your code stays on your computer. Euron Code runs on Euron's GPUs.
171
- - Images you attach are turned into a text description by Euron's image understanding and are not stored.
209
+ - Your code stays on your computer.
172
210
  - One login at a time: signing in on another computer signs this one out.
173
211
  - Don't paste passwords or API keys into prompts.
174
212
 
175
- ## Limits and value
213
+ ## How Euron Code reuses proven code
214
+
215
+ Search first, reuse second, modify third, generate only what is missing. When you ask it to build an app,
216
+ a feature, a UI or an integration, Euron Code itself splits the request into a few components and asks
217
+ Euron for proven code for each one before the model starts (the model can ask for more with
218
+ `find_reusable`): Euron's own repositories, your own component library and approved open-source
219
+ projects. You see a decision table
220
+ (component, REUSE / ADAPT / GENERATE, repository@commit, licence, confidence). REUSE reads the pinned files
221
+ and integrates them with minimal edits, ADAPT reads and modifies them, GENERATE writes the part itself.
222
+ For websites and UI it asks for Euron's TypeScript / TSX components. Small edits, bug fixes and questions
223
+ skip this step. The details you give (your name, photo, email, links) go into the files; an attached
224
+ photo is copied into the project's `assets/` (or `public/`) folder, and if a changed file still says
225
+ "Your Name" or "Lorem ipsum" Euron Code is asked once to fix it. If that search is unavailable it simply generates,
226
+ with a short note. When the tests pass on reused or adapted code, the component is added to
227
+ your private library (its name, source, commit, licence and test result; never your code): `/components`
228
+ lists it. Turn reuse off with `--no-reuse` for one run, `reuse.enabled false`, or keep it to Euron's own
229
+ code with `reuse.external false`.
230
+
231
+ Licence rules: only MIT, Apache-2.0, BSD, ISC, 0BSD, Unlicense, MPL-2.0, CC0 and Zlib code is reused (see
232
+ below); a candidate whose licence or security scan fails is always turned into GENERATE by the CLI itself,
233
+ whatever the server says.
234
+
235
+ ## Reusing open source safely
236
+
237
+ Only code under MIT, Apache-2.0, BSD-2/3-Clause, ISC, 0BSD, Unlicense, MPL-2.0, CC0-1.0 or Zlib is used.
238
+ GPL, AGPL, LGPL, SSPL and unlicensed code is never copied: Euron does not serve it and the CLI checks
239
+ again. MPL-2.0 files stay separate files under their own licence. Every reused source is recorded in
240
+ your project's `THIRD_PARTY_NOTICES.md`, and the completion report lists it (`Reused: owner/repo/path
241
+ (MIT)`).
176
242
 
177
- **10 million AI tokens. Every day.** Build more. Experiment more. Create without constantly worrying
178
- about tokens. Included with Euron Plus and Super 30.
243
+ ## Limits and value
179
244
 
180
- <sub>Up to 10 million tokens per day, subject to fair-use policies, model availability, and plan limits.</sub>
245
+ Your plan has a token allowance per **day**, **week**, **month** and **year**, the same for Euron Plus
246
+ and Super 30.
247
+ `/usage` (or `euron usage`) shows each with a bar, what is left and when it refills, in your local time.
248
+ Days, weeks (Monday), months and years start at midnight IST. If a limit is reached, Euron Code says
249
+ which one and when it refills; nothing else breaks.
181
250
 
182
- Track everything with `/usage` (or `euron usage`) and at https://euron.one/code-agent/usage: what you
183
- used today, this week, this month and this year, what is left and when it refills, in your local time.
184
- If a limit is reached, Euron Code says which one and when it refills; nothing else breaks.
251
+ It also shows what your own usage would cost at reference market API prices. **It is not a bill: you
252
+ pay nothing extra.** The same numbers are on https://euron.one/code-agent/usage.
185
253
 
186
254
  ## Run and check your app
187
255
 
@@ -219,7 +287,7 @@ running Euron Code in another terminal, you are asked whether to take over (`-p
219
287
  The approval page approves for whichever Euron account is signed in on euron.one in that browser, so
220
288
  to switch accounts sign in there with the other account first (or open the link in a private window).
221
289
  If no browser opens (SSH, WSL), copy the link it prints. The key is kept in the system keychain, or in
222
- `~/.euron/credentials.json` (readable only by you). To revoke a key on the server, delete it at
290
+ `~/.euron/credentials.json` (readable only by you). To revoke a login, remove it at
223
291
  https://euron.one/code-agent.
224
292
 
225
293
  Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard), `"euron-code[postgres]"`,
@@ -242,7 +310,7 @@ Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard),
242
310
  | `/help` | list commands, your own commands and skills, and the shortcuts |
243
311
  | `/status`, `/whoami` | account, key, API, model, mode, session, uptime, quota |
244
312
  | `/usage` (`/users`) | quota per period, refill times, value, sessions, tasks, cache share, last 30 days |
245
- | `/cost`, `/context` | session tokens, server cache, savings, session value; what fills the context |
313
+ | `/cost`, `/context` | what this session used; what fills the context |
246
314
  | `/model [id]`, `/effort` | pick or set the model; reasoning effort |
247
315
  | `/compact [focus]`, `/clear` | summarise to free context; start fresh |
248
316
  | `/resume [id]`, `/rewind`, `/export [file]` | saved sessions; undo the last turn; save as Markdown |
@@ -274,7 +342,7 @@ prompt back in the input line. Files you changed again after that turn are skipp
274
342
 
275
343
  ### Continue later
276
344
 
277
- Every session is saved under `~/.euron/sessions/` (text only; attached images are not stored).
345
+ Every session is saved under `~/.euron/sessions/` (text only, without attached images).
278
346
 
279
347
  ```bash
280
348
  euron --continue # pick up the latest session in this folder
@@ -391,7 +459,7 @@ Hooks are your own shell commands that run at fixed points. Put them in `setting
391
459
  | `Stop` | when the model finishes its answer | stderr goes to the model and it continues (at most twice) |
392
460
 
393
461
  Any other non-zero exit is shown as a warning and blocks nothing. `matcher` is a regular expression
394
- over the tool name; common names (`Edit`, `Write`, `MultiEdit`, `Read`, `Bash`, `Grep`, `Glob`,
462
+ over the tool name; the common short names (`Edit`, `Write`, `MultiEdit`, `Read`, `Bash`, `Grep`, `Glob`,
395
463
  `WebFetch`) and Euron Code names (`edit_file`, `bash`, ...) both work. The command runs in the project
396
464
  folder with `cmd.exe` on Windows and `sh` elsewhere, and gets one JSON object on stdin: `event`,
397
465
  `session_id`, `cwd`, `tool_name`, `tool_input`, `tool_output` (PostToolUse) or `prompt`. Environment:
@@ -406,31 +474,22 @@ always run.
406
474
 
407
475
  ## Context and tokens (automatic)
408
476
 
409
- The default model has a 32k-token context and writes at most about 8k tokens per step. Euron Code
410
- manages that for you, with nothing to set up:
411
-
412
- - **Room for the answer.** An output budget (about 8k) is always kept free; "100% full" means the
413
- prompt leaves no more than that. Each request asks for as many output tokens as really fit, and a
414
- request that would not fit is compacted first.
415
- - **Clearing.** From 50% full, tool outputs are replaced with one-line stubs, biggest and oldest first,
416
- until it is under 40%. The latest step is never touched, and each stub says what to re-read (for
417
- example `read_file src/app.py lines 1-200`). The note shows real numbers: "freed 9,400 tokens,
418
- now 38%".
419
- - **Summary.** At 70%, or when the next request would not fit, older messages are summarised: the task,
420
- decisions, files changed, commands and results, the last error and open todos.
421
- - **Long answers and big edits.** An answer cut by the output limit continues by itself. A tool call cut
422
- in the middle (a huge file write) is never run; the model is asked to make the change in smaller
423
- steps. If the model spent its whole budget thinking, it retries with less reasoning.
477
+ Euron Code manages the conversation for you, with nothing to set up:
478
+
479
+ - **Always room to answer.** Each request leaves space for the reply; a conversation that is getting
480
+ full is tidied up first.
481
+ - **Clearing.** Old tool output is replaced with one-line notes that say what to re-read (for example
482
+ `read_file src/app.py lines 1-200`), so the agent keeps going without losing track.
483
+ - **Summary.** Long conversations are summarised: the task, decisions, files changed, commands and
484
+ results, the last error and open todos.
485
+ - **Long answers and big edits.** An answer that gets cut off continues by itself. A huge edit that gets
486
+ cut off is never applied half-way; the change is made in smaller steps instead.
424
487
  - **Reasoning effort** is `medium` by default and `low` for quick follow-ups ("thanks", "continue");
425
488
  change it with `/effort low|medium|high`.
426
- - **Reads.** `read_file` reads 200 lines at a time and stops before about 6k tokens; a file over 2,000
427
- lines returns an outline of its definitions first. Re-reading an unchanged file returns a one-line
428
- note instead of the content.
429
- - **Cache-friendly.** The system prompt and tool list never change during a session, so the servers can
430
- reuse their prefix cache; changing data goes at the end of your message.
489
+ - **Reads.** Files are read in parts; a very large file returns an outline first. Re-reading an
490
+ unchanged file returns a one-line note instead of the content.
431
491
 
432
- `/cost` and `/context` show what was sent, how much the server served from its cache, and how many
433
- tokens these measures kept out of the context.
492
+ `/cost` and `/context` show what this session used and what fills the context.
434
493
 
435
494
  ## Non-interactive use (scripts, CI)
436
495
 
@@ -447,6 +506,9 @@ folder or container.
447
506
 
448
507
  `--permission-mode plan` gives a read-only run that ends with a plan.
449
508
 
509
+ With `--output-format json` the result also has `reuse` (one entry per planned component: `component`,
510
+ `decision`, `repo`, `license`), `reused` (files read from references) and `task_id`.
511
+
450
512
  Exit codes: `0` ok, `1` error, `2` bad usage, `3` no Euron Plus / Super 30 access, `4` not logged in or
451
513
  key rejected, `5` a token allowance used (day, week, month, year) or a cooldown, `6` `--max-turns` reached,
452
514
  `130` interrupted.
@@ -489,11 +551,18 @@ the connection itself is opened read-only. To let it write (local dev databases
489
551
  | `toolOutputMaxChars` | `12000` | longer tool output is cut to head + tail |
490
552
  | `hooks` | `{}` | see [Hooks](#hooks) |
491
553
  | `webFetch` | `true` | allow the web page tool (it still asks per site) |
554
+ | `reuse.enabled` | `true` | look for reusable code before building (`--no-reuse` for one run) |
555
+ | `reuse.external` | `true` | also search permissively licensed GitHub projects, not only Euron's |
556
+ | `errorReporting` | `true` | send a short error report when something fails (see below) |
492
557
  | `db.connections.<name>` | | database DSNs |
493
558
 
494
- Environment variables: `EURON_CODE_API` (gateway URL, default
495
- `https://api.euron.one/api/v1/code-agent`), `EURON_API_KEY` (use a key without logging in, for CI),
496
- `EURON_HOME` (instead of `~/.euron`), `EURON_NO_BROWSER=1`.
559
+ **Error reports.** When something fails, Euron Code sends Euron a short error report (the error kind and
560
+ code, the tool or command name, version and OS; never your prompts, code or secrets) so it can be fixed.
561
+ `/bug` shows your last ones. Turn it off with `euron config set errorReporting false` or
562
+ `EURON_NO_ERROR_REPORTS=1`.
563
+
564
+ Environment variables: `EURON_API_KEY` (use a key without logging in, for CI), `EURON_HOME` (instead of
565
+ `~/.euron`), `EURON_NO_BROWSER=1`.
497
566
 
498
567
  ## In VS Code
499
568
 
@@ -529,13 +598,9 @@ and the keychain.
529
598
 
530
599
  ## Privacy and safety
531
600
 
532
- - Your code stays on your computer: only the parts the agent reads are sent, as part of the conversation
533
- with Euron's model. Attached images are turned into text by Euron's image understanding and are not
534
- stored.
601
+ - Your code stays on your computer; the agent works on it from your terminal.
535
602
  - Your key is never printed in full and never logged.
536
603
  - Edits and commands ask first. Files outside the project folder always ask, even to read.
537
- - Each request carries a random session id and task id so your usage page can count sessions and
538
- tasks. Nothing else about the conversation is stored by the gateway.
539
604
  - Hooks are commands you configure; project hooks only run after you trust them.
540
605
  - Text inside your files, web pages and command output is treated as data, not instructions.
541
606