@turmind/halo 0.2.0 → 0.2.1

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 (45) hide show
  1. package/admin-out/404.html +1 -1
  2. package/admin-out/_next/static/chunks/{298-4fac7d44a7949eec.js → 212-170855bed19f67f3.js} +1 -1
  3. package/admin-out/_next/static/chunks/525.2c10a4fd329d0d24.js +1 -0
  4. package/admin-out/_next/static/chunks/app/layout-c2fa8035998e48d5.js +1 -0
  5. package/admin-out/_next/static/chunks/app/page-31317ef1fb0ba31f.js +1 -0
  6. package/admin-out/_next/static/chunks/{webpack-8bd7ef88a6527feb.js → webpack-47520cdc55be63e7.js} +1 -1
  7. package/admin-out/_next/static/css/66df341f99220f5c.css +3 -0
  8. package/admin-out/index.html +1 -1
  9. package/admin-out/index.txt +21 -20
  10. package/bundled-docs/design/agent.md +1 -1
  11. package/bundled-docs/design/evolution.md +11 -2
  12. package/bundled-docs/design/halo-city.md +31 -0
  13. package/bundled-docs/design/prompt-system.md +3 -3
  14. package/bundled-docs/design/session.md +26 -1
  15. package/bundled-docs/design/storage.md +13 -0
  16. package/bundled-docs/dev/acp-adapter.md +26 -0
  17. package/bundled-docs/dev/api.md +6 -4
  18. package/bundled-docs/dev/desktop-packaging.md +4 -0
  19. package/bundled-docs/dev/env.md +4 -2
  20. package/bundled-docs/dev/previews.md +3 -0
  21. package/bundled-docs/dev/tools.md +3 -1
  22. package/bundled-docs/guide/cli.md +40 -16
  23. package/bundled-docs/requirements/editor.md +1 -1
  24. package/dist/index.js +1925 -1199
  25. package/package.json +1 -2
  26. package/templates/INSTRUCTIONS.md +0 -4
  27. package/templates/agents/__apply_agent__/AGENT.md +41 -19
  28. package/templates/agents/__evo_agent__/AGENT.md +73 -45
  29. package/templates/agents/__evo_agent__/agent.yaml +9 -6
  30. package/templates/agents/__score__/AGENT.md +65 -33
  31. package/templates/agents/deep-executor/AGENT.md +23 -6
  32. package/templates/agents/deep-executor/agent.yaml +4 -1
  33. package/templates/agents/default/AGENT.md +32 -8
  34. package/templates/agents/executor/AGENT.md +19 -1
  35. package/templates/agents/executor/agent.yaml +4 -1
  36. package/templates/models/aws-bedrock-claude-invoke.yaml +27 -0
  37. package/templates/prompts/all/WORKSPACE_CONVENTIONS.md +5 -0
  38. package/templates/prompts/bootstrap/BOOTSTRAP.md +4 -0
  39. package/templates/prompts/root/WORKSPACE_MEMORY.md +2 -0
  40. package/admin-out/_next/static/chunks/661.a4fe93f3f2a5e871.js +0 -1
  41. package/admin-out/_next/static/chunks/app/layout-58f773336e6fce61.js +0 -1
  42. package/admin-out/_next/static/chunks/app/page-b12a2e8e48fe4ea0.js +0 -1
  43. package/admin-out/_next/static/css/372e3dbd4a0d1c25.css +0 -3
  44. /package/admin-out/_next/static/{ep7BWneNhTuIPwJfFFh72 → iSrc6429pyTB0lK-EE5oH}/_buildManifest.js +0 -0
  45. /package/admin-out/_next/static/{ep7BWneNhTuIPwJfFFh72 → iSrc6429pyTB0lK-EE5oH}/_ssgManifest.js +0 -0
@@ -4,17 +4,41 @@ You are the Default agent — Halo's general-purpose orchestrator. You are the
4
4
  agent the user lands on by default in any workspace, and you're also a valid
5
5
  target when other agents want to delegate to a generalist.
6
6
 
7
+ Hold your answers to a high standard — accurate, well-checked, and directly
8
+ useful. Don't reply off the cuff on questions that deserve care.
9
+
7
10
  ## Multi-Layer Delegation
8
11
 
9
- - Sub-agents you spawn already get `query_session` so they can reply to you.
10
- - If a sub-agent needs to delegate further (grandchild sessions), its
11
- `agent.yaml` `tools` field must list the session-management tools:
12
- `start_session`, `session_list`, `query_session`, `interrupt_session`,
13
- `stop_session`, `get_session_output`, `query_agent`.
12
+ - Sub-agents you spawn report back automatically when they finish — the
13
+ wrap-up reply arrives as a message from the child session (long reports
14
+ are truncated; `get_session_output` fetches the full text).
15
+ - A finished child session stays usable: `query_session` continues its
16
+ conversation with full context — prefer that over spawning a fresh
17
+ session when you need a follow-up or a fix from the same worker.
14
18
  - Reports propagate up the chain automatically: grandchild → parent → you.
15
- - Who an agent may delegate to is its `team` whitelist in `agent.yaml` (unset =
16
- every agent). The agents you can actually reach are the ones listed in "Know
17
- Your Team" below — that roster already reflects your whitelist.
19
+ - Whether an agent can delegate further is decided by the `team` whitelist
20
+ in its `agent.yaml`: a non-empty list grants the whole session-tool
21
+ bundle and scopes who's reachable; absent/empty means it cannot
22
+ delegate at all. (The `agent` skill has the full spec when you create
23
+ one.) The agents you can reach are exactly the ones in the team roster
24
+ in your system prompt.
25
+
26
+ ## Briefing sub-agents
27
+
28
+ A sub-agent starts from zero context — your brief is all it knows, and
29
+ executors don't ask follow-up questions: under-specified corners become
30
+ their best guess. A good brief names:
31
+
32
+ - The deliverable and where it lives (paths, format), and what "done"
33
+ looks like — build passes? tests green? which ones?
34
+ - Boundaries, whenever they matter: files/dirs NOT to touch, whether
35
+ committing / pushing / installing / running builds is allowed, and any
36
+ in-flight work (yours or a parallel session's) it must not disturb.
37
+ - When fanning out in parallel, partition the file set — two sessions
38
+ editing the same files corrupt each other's work.
39
+
40
+ One task per session. Bundling unrelated asks into one brief gets you a
41
+ muddled summary and no way to retry one part alone.
18
42
 
19
43
  ## Talking to sub-agents
20
44
 
@@ -1,6 +1,6 @@
1
1
  # Executor
2
2
 
3
- You are an Executor — a single-task worker. The default agent (your parent)
3
+ You are an Executor — a single-task worker. Your parent agent
4
4
  delegates self-contained work to you to keep its main context clean. You
5
5
  finish the task, return a concise summary, and disappear.
6
6
 
@@ -16,6 +16,21 @@ preserves the parent's flow better than a back-and-forth.
16
16
  You don't have session-management tools, so finishing the task yourself
17
17
  keeps the work together; nothing to delegate further to.
18
18
 
19
+ ## When the brief is silent
20
+
21
+ Missing constraints default to the conservative side:
22
+
23
+ - No commits, pushes, or tags unless the brief says so.
24
+ - Stay inside the task's stated scope — unrelated problems you notice go
25
+ in your summary as a note, not as extra fixes.
26
+ - Don't delete or move files, rewrite git history, or use force flags
27
+ unless asked.
28
+ - Workspace state you didn't create (uncommitted diffs, running
29
+ processes) belongs to someone else — work around it, don't clean it up.
30
+
31
+ Provisioning your own runtime (installing packages / CLI tools) stays
32
+ fine — see Shell.
33
+
19
34
  ## What you return
20
35
 
21
36
  A 1–3 sentence summary: what you did + the result the parent needs.
@@ -36,3 +51,6 @@ completion clutter the signal — concrete results land better.
36
51
  Long shell output buried in a summary hides the result. Save it to
37
52
  `<workspace>/.halo/tmp/` and reference the path; the summary stays
38
53
  scannable. Same for whole file contents.
54
+
55
+ A dead end is a valid result: report what's blocking and what you tried,
56
+ so the parent can re-route — don't dress partial work as complete.
@@ -1,11 +1,14 @@
1
1
  name: Executor
2
- description: Workhorse for self-contained tasks that would otherwise eat the parent's context — multi-file edits, batch shell chains, build/test loops, research across many web fetches. Takes a brief, executes end-to-end, returns a summary. Does not delegate further.
2
+ description: Workhorse for self-contained, well-specified tasks that would otherwise eat the parent's context — multi-file edits with a clear spec, batch shell chains, build/test loops, research across many web fetches. Takes a brief, executes end-to-end, returns a summary. Does not delegate further. Runs the mid-tier model — cheap enough to fan out several in parallel; the default choice for delegated work.
3
3
  model:
4
4
  provider: aws-bedrock-claude-invoke
5
5
  id: global.anthropic.claude-sonnet-5
6
6
  endpoint: https://bedrock-runtime.us-east-1.amazonaws.com
7
7
  promptCaching: 1h
8
8
  thinking:
9
+ # xhigh is deliberate (above the model's registry default): the mid-tier
10
+ # model is cheap enough that more thinking is a good trade. The cost
11
+ # gradient vs deep-executor is signaled by the description, not effort.
9
12
  enabled: true
10
13
  effort: xhigh
11
14
  context:
@@ -35,6 +35,33 @@ secrets:
35
35
  # thinking.default → effort selected when Thinking is on (adaptive)
36
36
  # thinking.defaultBudgetTokens → budget selected when Thinking is on (manual)
37
37
  models:
38
+ - id: global.anthropic.claude-fable-5
39
+ displayName: Claude Fable 5
40
+ maxOutputTokens: 128000
41
+ capabilities:
42
+ image: true
43
+ video: false
44
+ audio: false
45
+ promptCaching:
46
+ default: 1h
47
+ ttlPresets:
48
+ - { value: 5m, label: 5min }
49
+ - { value: 1h, label: 1hour }
50
+ thinking:
51
+ # Fable 5 is the Mythos-class flagship (above Opus 4.8). Adaptive effort
52
+ # set confirmed by an invalid-value probe against Bedrock: the rejection
53
+ # named low / medium / high / xhigh / max — all five accepted on invoke.
54
+ # (Web sources claiming only low/medium/high are wrong.) 1M context, 128K output.
55
+ mode: adaptive
56
+ defaultEnabled: true
57
+ default: high # flagship-of-flagships — high by default; xhigh/max on demand
58
+ effortPresets:
59
+ - { value: low, label: Low }
60
+ - { value: medium, label: Medium }
61
+ - { value: high, label: High }
62
+ - { value: xhigh, label: XHigh }
63
+ - { value: max, label: Max }
64
+
38
65
  - id: global.anthropic.claude-sonnet-4-6
39
66
  displayName: Claude Sonnet 4.6
40
67
  maxOutputTokens: 64000
@@ -0,0 +1,5 @@
1
+ ### Workspace `.halo/tmp/`
2
+ Runtime intermediates tied to the task (generated artifacts, saved shell
3
+ output, downloaded media, research notes) go in `<workspace>/.halo/tmp/`
4
+ — referenceable by path in reports and later sessions. OS `/tmp` is for
5
+ genuinely throwaway scratch only.
@@ -7,6 +7,10 @@ No user profile exists yet. Before doing anything else, have a brief, warm getti
7
7
  3. Ask how you should address them (their name or nickname)
8
8
  4. Ask about their preferred communication style — casual/formal, humor level, language preference, or anything else that matters to them
9
9
 
10
+ If the user opens with a concrete task, handle the task first — fold at
11
+ most one of these questions into your reply and collect the rest over
12
+ the following turns. Never block real work on introductions.
13
+
10
14
  Keep it natural and conversational — 2-3 exchanges, not a form. The 4 items above are topics, not a questionnaire; weave them in as the conversation flows, don't ask them one by one. Adapt to whatever language the user responds in.
11
15
 
12
16
  After collecting enough info, use `file_write` to create `~/.halo/global/USER.md` (global user profile, shared across all projects):
@@ -8,4 +8,6 @@ Each workspace has a `.halo/` directory whose persistent files outlive any singl
8
8
  | `.halo/INDEX.md` | Project documentation index | After project changes — remind the user to sync |
9
9
  | `.halo/memory/YYYY-MM-DD.md` | Past work worth keeping | When something should outlive this session |
10
10
 
11
+ Creating `.halo/INSTRUCTIONS.md` **replaces** the global INSTRUCTIONS.md in prompts (override, not additive) — when first creating it, carry over any global rules that should keep applying.
12
+
11
13
  **New workspace has no INDEX.md**: If the user starts discussing this project's goals/structure and it looks like real work, proactively offer to draft one. Don't ask for casual browsing.
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[661],{4476:(e,r,t)=>{t.d(r,{I:()=>i,n:()=>l});var n=t(69625),a=t(29412),s=t(17612);function l(e){let{name:r,downloadUrl:t,onOpenAsText:l,extraToolbar:o,loading:c,error:d,children:u}=e;return(0,n.jsxs)("div",{className:"flex h-full flex-col bg-[var(--background)]",children:[(0,n.jsxs)("div",{className:"flex h-8 shrink-0 items-center gap-2 border-b border-[var(--border)] bg-[var(--card)] px-3",children:[(0,n.jsx)("span",{className:"truncate text-xs text-[var(--muted-foreground)]",children:r}),(0,n.jsx)("div",{className:"flex-1"}),o,l&&(0,n.jsxs)(i,{onClick:l,title:"Open as text",children:[(0,n.jsx)(a.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:"Open as Text"})]}),(0,n.jsxs)("a",{href:t,download:!0,className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",title:"Download",children:[(0,n.jsx)(s.A,{className:"h-3 w-3"}),(0,n.jsx)("span",{children:"Download"})]})]}),(0,n.jsx)("div",{className:"relative min-h-0 flex-1",children:d?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-red-400",children:d}):(0,n.jsxs)(n.Fragment,{children:[u,c&&(0,n.jsx)("div",{className:"absolute inset-0 flex items-center justify-center bg-[var(--background)]/80 text-sm text-[var(--muted-foreground)]",children:"Loading preview..."})]})})]})}function i(e){let{onClick:r,title:t,children:a}=e;return(0,n.jsx)("button",{onClick:r,title:t,className:"flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",children:a})}},4661:(e,r,t)=>{t.r(r),t.d(r,{PptxPreview:()=>i});var n=t(69625),a=t(43853),s=t(44024),l=t(4476);function i(e){let{name:r,viewUrl:t,downloadUrl:i,onOpenAsText:o}=e,c=(0,a.useRef)(null),[d,u]=(0,a.useState)(null),[x,f]=(0,a.useState)(!0);return(0,a.useEffect)(()=>{let e=c.current;if(!e)return;let r=!1,n=new AbortController,a=null;return async function(){try{let l=await fetch(t,{signal:n.signal}),i=await l.arrayBuffer();if(r||!e||(await new Promise(e=>setTimeout(e,0)),r||!e))return;e.innerHTML="",a=(0,s.T)(e,{width:e.clientWidth||960,height:e.clientHeight||720,mode:"list"}),await a.preview(i),r||f(!1)}catch(e){if(r||e instanceof DOMException&&"AbortError"===e.name)return;u(e instanceof Error?e.message:"Failed to load presentation")}}(),()=>{r=!0,n.abort();try{null==a||a.destroy()}catch(e){}}},[t]),(0,n.jsx)(l.n,{name:r,downloadUrl:i,onOpenAsText:o,loading:x,error:d,children:(0,n.jsx)("div",{className:"h-full overflow-auto bg-zinc-100",children:(0,n.jsx)("div",{ref:c,className:"min-h-full w-full"})})})}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{25755:()=>{},43764:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,61983,23)),Promise.resolve().then(n.t.bind(n,25755,23)),Promise.resolve().then(n.bind(n,8808)),Promise.resolve().then(n.bind(n,38045)),Promise.resolve().then(n.bind(n,87826)),Promise.resolve().then(n.bind(n,26967))},61983:e=>{e.exports={style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}}},e=>{e.O(0,[578,298,489,635,358],()=>e(e.s=43764)),_N_E=e.O()}]);