-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
87 lines (77 loc) · 4.87 KB
/
Copy path.env.example
File metadata and controls
87 lines (77 loc) · 4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# .env.example – local configuration for task-loop.
#
# Copy to .env and fill in your values:
# cp .env.example .env
#
# .env is ONLY loaded outside production (see taskloop/config.py, the
# TASKLOOP_ENV switch). In a deployed container set TASKLOOP_ENV=production
# and feed these same variables as real environment variables instead:
# docker run -e TASKLOOP_ENV=production -e TASKLOOP_LLM_API_KEY=... ...
#
# Every variable is optional; the defaults below match the shipped defaults.
# ── Environment ────────────────────────────────────────────────────────
# development (default) loads .env. Set to "production"/"prod" in a real
# deployment so .env is never read (and excluded via .dockerignore).
TASKLOOP_ENV=development
# ── LLM (OpenAI-compatible endpoint) ───────────────────────────────────
# Point at Ollama / vLLM / llama.cpp. Everything is local by default.
TASKLOOP_LLM_BASE_URL=http://localhost:11434/v1
TASKLOOP_LLM_API_KEY=ollama
TASKLOOP_LLM_MODEL=llama3.2
# ── Concurrency ────────────────────────────────────────────────────────
# How many LLM calls may be on the wire at once (1 is typical for local).
TASKLOOP_LLM_MAX_CONCURRENCY=1
# ── Storage ────────────────────────────────────────────────────────────
TASKLOOP_DB_PATH=taskloop.db
TASKLOOP_REGISTRY_PATH=tools.yaml
# Generated snapshot of server-discovered tools (default: known-tools.yaml
# next to TASKLOOP_REGISTRY_PATH). Written at boot, never hand-maintained.
# TASKLOOP_KNOWN_TOOLS_PATH=known-tools.yaml
# ── Tool servers ───────────────────────────────────────────────────────
# These feed the ${VAR:-default} placeholders in tools.yaml. Leave the API
# keys empty for local servers without auth.
TASKLOOP_MCP_URL=http://localhost:8627
TASKLOOP_MCP_API_KEY=
TASKLOOP_VITAL_URL=http://localhost:9000
TASKLOOP_VITAL_API_KEY=
# ── Safety / context window / web / scheduler ───────────────────────────
TASKLOOP_MAX_STEPS=50
# ── LLM grounding (issue #17) ─────────────────────────────────────────
# Optional context injected into the system prompt at run start so the model
# can interpret raw tool results (e.g. "day of year 37" -> a real date).
# Location is free text; units must be `metric` or `imperial` (default metric).
TASKLOOP_LOCATION=
TASKLOOP_UNITS=metric
# Grounding is GLOBAL: identical for every task, computed once per run.
# Set to false/0/no/off to disable the grounding block entirely (the task
# rules remain; only the clock/location/units facts are omitted).
TASKLOOP_GROUNDING_ENABLED=true
# Optional IANA timezone the reported clock is converted to. Empty = the
# machine's local timezone. Unknown names fail at startup.
TASKLOOP_GROUNDING_TIMEZONE=
# ── System prompt ─────────────────────────────────────────────────────
# Optional path to a plain-text/Markdown file whose contents replace the
# default system prompt (taskloop/prompts/system_prompt.md). File-based,
# not an env var, because even a small prompt is multi-line prose. The
# dynamic grounding block (clock/units/location above) is always appended
# on top at run start, so you never lose it by customizing.
# TASKLOOP_SYSTEM_PROMPT_PATH=my-system-prompt.md
# Estimated-token hard cap on the trimmed prompt window sent to the model
# each turn. If static pruning can't fit the window under this limit, the
# run FAILS (context exhausted) rather than summarized-to-continue.
TASKLOOP_CONTEXT_LIMIT=4000
# Max size of a single tool result as a % of context_limit (e.g. 10 => a
# single tool result is capped at 10% of context_limit; 0 => drop tool
# results entirely).
TASKLOOP_MAX_TOOL_OUTPUT_PERCENTAGE=10
# How many recent exchanges the trimmed window keeps ("exchange" = a tool-
# call turn + its results). 1 (default) = minimal window: a multi-step task
# forgets a tool call as soon as the next one runs, which is great for tight
# budgets but small models often re-call a result they can't see ("looping").
# 2-3 keeps recent steps so the model remembers where it's been. Context
# limit stays the hard cap, so a too-large tail fails closed (context
# exhausted) instead of blowing the budget.
TASKLOOP_WINDOW_TAIL_EXCHANGES=1
TASKLOOP_WEB_HOST=0.0.0.0
TASKLOOP_WEB_PORT=8000
TASKLOOP_TICK_SECONDS=5.0