@turmind/halo 0.2.0 → 0.2.1-bc7cf2b
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.
- package/admin-out/404.html +1 -1
- package/admin-out/_next/static/chunks/{298-4fac7d44a7949eec.js → 212-170855bed19f67f3.js} +1 -1
- package/admin-out/_next/static/chunks/525.2c10a4fd329d0d24.js +1 -0
- package/admin-out/_next/static/chunks/app/layout-c2fa8035998e48d5.js +1 -0
- package/admin-out/_next/static/chunks/app/page-31317ef1fb0ba31f.js +1 -0
- package/admin-out/_next/static/chunks/{webpack-8bd7ef88a6527feb.js → webpack-47520cdc55be63e7.js} +1 -1
- package/admin-out/_next/static/css/66df341f99220f5c.css +3 -0
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +21 -20
- package/bundled-docs/design/agent.md +1 -1
- package/bundled-docs/design/evolution.md +11 -2
- package/bundled-docs/design/halo-city.md +31 -0
- package/bundled-docs/design/prompt-system.md +3 -3
- package/bundled-docs/design/session.md +26 -1
- package/bundled-docs/design/storage.md +13 -0
- package/bundled-docs/dev/acp-adapter.md +26 -0
- package/bundled-docs/dev/api.md +6 -4
- package/bundled-docs/dev/desktop-packaging.md +4 -0
- package/bundled-docs/dev/env.md +4 -2
- package/bundled-docs/dev/previews.md +3 -0
- package/bundled-docs/dev/tools.md +3 -1
- package/bundled-docs/guide/cli.md +40 -16
- package/bundled-docs/requirements/editor.md +1 -1
- package/dist/index.js +1632 -906
- package/package.json +1 -2
- package/templates/INSTRUCTIONS.md +0 -4
- package/templates/agents/__apply_agent__/AGENT.md +41 -19
- package/templates/agents/__evo_agent__/AGENT.md +73 -45
- package/templates/agents/__evo_agent__/agent.yaml +9 -6
- package/templates/agents/__score__/AGENT.md +65 -33
- package/templates/agents/deep-executor/AGENT.md +23 -6
- package/templates/agents/deep-executor/agent.yaml +4 -1
- package/templates/agents/default/AGENT.md +32 -8
- package/templates/agents/executor/AGENT.md +19 -1
- package/templates/agents/executor/agent.yaml +4 -1
- package/templates/models/aws-bedrock-claude-invoke.yaml +27 -0
- package/templates/prompts/all/WORKSPACE_CONVENTIONS.md +5 -0
- package/templates/prompts/bootstrap/BOOTSTRAP.md +4 -0
- package/templates/prompts/root/WORKSPACE_MEMORY.md +2 -0
- package/admin-out/_next/static/chunks/661.a4fe93f3f2a5e871.js +0 -1
- package/admin-out/_next/static/chunks/app/layout-58f773336e6fce61.js +0 -1
- package/admin-out/_next/static/chunks/app/page-b12a2e8e48fe4ea0.js +0 -1
- package/admin-out/_next/static/css/372e3dbd4a0d1c25.css +0 -3
- /package/admin-out/_next/static/{ep7BWneNhTuIPwJfFFh72 → iSrc6429pyTB0lK-EE5oH}/_buildManifest.js +0 -0
- /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
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
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.
|
|
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()}]);
|