feat: per-conversation project binding + action-tool consent gate

- Conversations bind to a project on creation; RAG scopes to the
  conversation's project, not the global setting.
- Action tools (web_search/fetch_url/remember) are withheld unless
  allow_action_tools is enabled (off by default). Settings toggle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jon
2026-07-23 14:29:40 -05:00
co-authored by Claude Opus 4.8
parent ba6a4ac4e4
commit 492020b547
6 changed files with 91 additions and 10 deletions
+17
View File
@@ -8,6 +8,7 @@ const DEFAULTS = {
num_ctx: 0, // context window in tokens; 0 = model default
rag_top_k: 3, // document chunks injected into chat
rag_min_score: 0.6, // min cosine similarity for a chunk to count
allow_action_tools: false, // consent gate for web/fetch/memory-write tools
system_prompt: "",
timeout: 120,
gpu_offload: -1, // -1 = Auto; 0100 = percent of layers forced onto the GPU
@@ -241,6 +242,22 @@ export function Settings() {
similarity each must clear. Higher relevance = fewer, tighter matches.
</div>
<div style={{ marginTop: "1.25rem" }}>
<label style={{ display: "flex", alignItems: "center", gap: "0.6rem", cursor: "pointer" }}>
<input
type="checkbox"
checked={form.allow_action_tools}
onChange={e => update("allow_action_tools", e.target.checked)}
/>
<span style={labelStyle}>Allow action tools</span>
</label>
<div style={{ fontSize: "0.72rem", color: form.allow_action_tools ? "#c9a227" : "#555", marginTop: "0.2rem" }}>
Lets playbooks run tools that act: web search, fetching a URL, and writing
to memory. Off by default — a playbook can list them, but they only fire
when this is on.
</div>
</div>
<div style={{ marginTop: "1.25rem" }}>
<label style={labelStyle}>
GPU Offload