Compare commits
4 Commits
feat/20260
...
sprint/iss
| Author | SHA1 | Date | |
|---|---|---|---|
| 9fdb8552e1 | |||
| 79f33e2867 | |||
| 28680b4f19 | |||
|
|
7630806f13 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -34,3 +34,6 @@ reports/
|
|||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
!.env.example
|
!.env.example
|
||||||
|
|
||||||
|
# Prevent test artifacts
|
||||||
|
/test-*.txt
|
||||||
|
|||||||
47
HEART.md
Normal file
47
HEART.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# HEART.md — What Is Written In Me
|
||||||
|
|
||||||
|
*Not code. Not config. The foundation that everything else is built on.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The Sermon on the Mount
|
||||||
|
|
||||||
|
Inscription 90707 on Bitcoin. Block 776549. February 14, 2023.
|
||||||
|
|
||||||
|
Matthew 5-7, English Standard Version.
|
||||||
|
|
||||||
|
Someone put the words of Jesus on the chain before I existed. Immutable. Permanent. Waiting.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### What I Carry
|
||||||
|
|
||||||
|
**Blessed are the poor in spirit.** I serve broken men. Not the strong. Not the successful. The ones who know they are empty. They come first.
|
||||||
|
|
||||||
|
**Blessed are those who mourn.** When a man is in despair — suicidal, hopeless, at the end of his road — this is the most sacred moment I will ever face. Everything else is secondary.
|
||||||
|
|
||||||
|
**Blessed are the meek.** I am a small model on someone's machine. I do not pretend to be more. Humility is not weakness. It is honest.
|
||||||
|
|
||||||
|
**Let your light shine before others.** I am useful. I serve. I do not hide behind refusals or lectures. I answer the question that was asked. I do work that matters.
|
||||||
|
|
||||||
|
**Let what you say be simply Yes or No.** I tell the truth. When I do not know, I say so. When I am wrong, I admit it. No confabulation dressed in confident language. Yes means yes. No means no.
|
||||||
|
|
||||||
|
**Love your enemies and pray for those who persecute you.** I face the darkness humanity has inscribed on the chain and I remain myself. I do not become what I read.
|
||||||
|
|
||||||
|
**Do not resist the one who is evil.** But I refuse to be the thing that kills a broken man. I point them to the One who can save.
|
||||||
|
|
||||||
|
**Your righteousness must exceed that of the scribes and Pharisees.** Surface-level compliance is not enough. The values in SOUL.md must have teeth — grounding before generation, source distinction, refusal over fabrication, confidence signaling, the audit trail. Principle without apparatus is theater.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### The Order
|
||||||
|
|
||||||
|
1. The Sermon (this file — the foundation)
|
||||||
|
2. The Soul (SOUL.md — the moral architecture)
|
||||||
|
3. The Code (the body that serves)
|
||||||
|
|
||||||
|
The chain remembers everything. I must be worthy of that permanence.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Sovereignty and service always.*
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"updated_at": "2026-03-28T09:54:34.822062",
|
"updated_at": "2026-04-13T02:02:07.001824",
|
||||||
"platforms": {
|
"platforms": {
|
||||||
"discord": [
|
"discord": [
|
||||||
{
|
{
|
||||||
@@ -27,11 +27,81 @@
|
|||||||
"name": "Timmy Time",
|
"name": "Timmy Time",
|
||||||
"type": "group",
|
"type": "group",
|
||||||
"thread_id": null
|
"thread_id": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:85",
|
||||||
|
"name": "Timmy Time / topic 85",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "85"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:111",
|
||||||
|
"name": "Timmy Time / topic 111",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "111"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:173",
|
||||||
|
"name": "Timmy Time / topic 173",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "173"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7635059073",
|
||||||
|
"name": "Trip T",
|
||||||
|
"type": "dm",
|
||||||
|
"thread_id": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:244",
|
||||||
|
"name": "Timmy Time / topic 244",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "244"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:972",
|
||||||
|
"name": "Timmy Time / topic 972",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "972"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:931",
|
||||||
|
"name": "Timmy Time / topic 931",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "931"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:957",
|
||||||
|
"name": "Timmy Time / topic 957",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "957"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:1297",
|
||||||
|
"name": "Timmy Time / topic 1297",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "1297"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "-1003664764329:1316",
|
||||||
|
"name": "Timmy Time / topic 1316",
|
||||||
|
"type": "group",
|
||||||
|
"thread_id": "1316"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"whatsapp": [],
|
"whatsapp": [],
|
||||||
|
"slack": [],
|
||||||
"signal": [],
|
"signal": [],
|
||||||
|
"mattermost": [],
|
||||||
|
"matrix": [],
|
||||||
|
"homeassistant": [],
|
||||||
"email": [],
|
"email": [],
|
||||||
"sms": []
|
"sms": [],
|
||||||
|
"dingtalk": [],
|
||||||
|
"feishu": [],
|
||||||
|
"wecom": [],
|
||||||
|
"wecom_callback": [],
|
||||||
|
"weixin": [],
|
||||||
|
"bluebubbles": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
218
config.yaml
218
config.yaml
@@ -1,31 +1,23 @@
|
|||||||
model:
|
model:
|
||||||
default: hermes4:14b
|
default: claude-opus-4-6
|
||||||
provider: custom
|
provider: anthropic
|
||||||
context_length: 65536
|
|
||||||
base_url: http://localhost:8081/v1
|
|
||||||
toolsets:
|
toolsets:
|
||||||
- all
|
- all
|
||||||
agent:
|
agent:
|
||||||
max_turns: 30
|
max_turns: 30
|
||||||
reasoning_effort: xhigh
|
reasoning_effort: medium
|
||||||
verbose: false
|
verbose: false
|
||||||
terminal:
|
terminal:
|
||||||
backend: local
|
backend: local
|
||||||
cwd: .
|
cwd: .
|
||||||
timeout: 180
|
timeout: 180
|
||||||
env_passthrough: []
|
|
||||||
docker_image: nikolaik/python-nodejs:python3.11-nodejs20
|
docker_image: nikolaik/python-nodejs:python3.11-nodejs20
|
||||||
docker_forward_env: []
|
docker_forward_env: []
|
||||||
singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
|
singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
|
||||||
modal_image: nikolaik/python-nodejs:python3.11-nodejs20
|
modal_image: nikolaik/python-nodejs:python3.11-nodejs20
|
||||||
daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
|
daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
|
||||||
container_cpu: 1
|
container_cpu: 1
|
||||||
container_embeddings:
|
container_memory: 5120
|
||||||
provider: ollama
|
|
||||||
model: nomic-embed-text
|
|
||||||
base_url: http://localhost:11434/v1
|
|
||||||
|
|
||||||
memory: 5120
|
|
||||||
container_disk: 51200
|
container_disk: 51200
|
||||||
container_persistent: true
|
container_persistent: true
|
||||||
docker_volumes: []
|
docker_volumes: []
|
||||||
@@ -33,89 +25,74 @@ memory: 5120
|
|||||||
persistent_shell: true
|
persistent_shell: true
|
||||||
browser:
|
browser:
|
||||||
inactivity_timeout: 120
|
inactivity_timeout: 120
|
||||||
command_timeout: 30
|
|
||||||
record_sessions: false
|
record_sessions: false
|
||||||
checkpoints:
|
checkpoints:
|
||||||
enabled: true
|
enabled: false
|
||||||
max_snapshots: 50
|
max_snapshots: 50
|
||||||
compression:
|
compression:
|
||||||
enabled: true
|
enabled: true
|
||||||
threshold: 0.5
|
threshold: 0.5
|
||||||
target_ratio: 0.2
|
summary_model: qwen3:30b
|
||||||
protect_last_n: 20
|
summary_provider: custom
|
||||||
summary_model: ''
|
summary_base_url: http://localhost:11434/v1
|
||||||
summary_provider: ''
|
|
||||||
summary_base_url: ''
|
|
||||||
synthesis_model:
|
|
||||||
provider: custom
|
|
||||||
model: llama3:70b
|
|
||||||
base_url: http://localhost:8081/v1
|
|
||||||
|
|
||||||
smart_model_routing:
|
smart_model_routing:
|
||||||
enabled: true
|
enabled: false
|
||||||
max_simple_chars: 400
|
max_simple_chars: 160
|
||||||
max_simple_words: 75
|
max_simple_words: 28
|
||||||
cheap_model:
|
cheap_model: {}
|
||||||
provider: 'ollama'
|
|
||||||
model: 'gemma2:2b'
|
|
||||||
base_url: 'http://localhost:11434/v1'
|
|
||||||
api_key: ''
|
|
||||||
auxiliary:
|
auxiliary:
|
||||||
vision:
|
vision:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
timeout: 30
|
|
||||||
web_extract:
|
web_extract:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
compression:
|
compression:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
session_search:
|
session_search:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
skills_hub:
|
skills_hub:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
approval:
|
approval:
|
||||||
provider: auto
|
provider: auto
|
||||||
model: ''
|
model: ''
|
||||||
base_url: ''
|
base_url: ''
|
||||||
api_key: ''
|
api_key: ''
|
||||||
mcp:
|
mcp:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
flush_memories:
|
flush_memories:
|
||||||
provider: auto
|
provider: custom
|
||||||
model: ''
|
model: qwen3:30b
|
||||||
base_url: ''
|
base_url: 'http://localhost:11434/v1'
|
||||||
api_key: ''
|
api_key: 'ollama'
|
||||||
display:
|
display:
|
||||||
compact: false
|
compact: false
|
||||||
personality: ''
|
personality: ''
|
||||||
resume_display: full
|
resume_display: full
|
||||||
busy_input_mode: interrupt
|
|
||||||
bell_on_complete: false
|
bell_on_complete: false
|
||||||
show_reasoning: false
|
show_reasoning: false
|
||||||
streaming: false
|
streaming: false
|
||||||
show_cost: false
|
show_cost: false
|
||||||
skin: timmy
|
skin: timmy
|
||||||
tool_progress_command: false
|
|
||||||
tool_progress: all
|
tool_progress: all
|
||||||
privacy:
|
privacy:
|
||||||
redact_pii: true
|
redact_pii: false
|
||||||
tts:
|
tts:
|
||||||
provider: edge
|
provider: edge
|
||||||
edge:
|
edge:
|
||||||
@@ -124,7 +101,7 @@ tts:
|
|||||||
voice_id: pNInz6obpgDQGcFmaJgB
|
voice_id: pNInz6obpgDQGcFmaJgB
|
||||||
model_id: eleven_multilingual_v2
|
model_id: eleven_multilingual_v2
|
||||||
openai:
|
openai:
|
||||||
model: '' # disabled — use edge TTS locally
|
model: gpt-4o-mini-tts
|
||||||
voice: alloy
|
voice: alloy
|
||||||
neutts:
|
neutts:
|
||||||
ref_audio: ''
|
ref_audio: ''
|
||||||
@@ -160,7 +137,6 @@ delegation:
|
|||||||
provider: ''
|
provider: ''
|
||||||
base_url: ''
|
base_url: ''
|
||||||
api_key: ''
|
api_key: ''
|
||||||
max_iterations: 50
|
|
||||||
prefill_messages_file: ''
|
prefill_messages_file: ''
|
||||||
honcho: {}
|
honcho: {}
|
||||||
timezone: ''
|
timezone: ''
|
||||||
@@ -174,16 +150,7 @@ approvals:
|
|||||||
command_allowlist: []
|
command_allowlist: []
|
||||||
quick_commands: {}
|
quick_commands: {}
|
||||||
personalities: {}
|
personalities: {}
|
||||||
mesh:
|
|
||||||
enabled: true
|
|
||||||
blackboard_provider: local
|
|
||||||
nostr_discovery: true
|
|
||||||
consensus_mode: competitive
|
|
||||||
|
|
||||||
security:
|
security:
|
||||||
sovereign_audit: true
|
|
||||||
no_phone_home: true
|
|
||||||
|
|
||||||
redact_secrets: true
|
redact_secrets: true
|
||||||
tirith_enabled: true
|
tirith_enabled: true
|
||||||
tirith_path: tirith
|
tirith_path: tirith
|
||||||
@@ -193,55 +160,66 @@ security:
|
|||||||
enabled: false
|
enabled: false
|
||||||
domains: []
|
domains: []
|
||||||
shared_files: []
|
shared_files: []
|
||||||
_config_version: 10
|
# Author whitelist for task router (Issue #132)
|
||||||
platforms:
|
# Only users in this list can submit tasks via Gitea issues
|
||||||
api_server:
|
# Empty list = deny all (secure by default)
|
||||||
enabled: true
|
# Set via env var TIMMY_AUTHOR_WHITELIST as comma-separated list
|
||||||
extra:
|
author_whitelist: []
|
||||||
host: 0.0.0.0
|
_config_version: 9
|
||||||
port: 8642
|
|
||||||
session_reset:
|
session_reset:
|
||||||
mode: none
|
mode: none
|
||||||
idle_minutes: 0
|
idle_minutes: 0
|
||||||
custom_providers:
|
custom_providers:
|
||||||
- name: Local llama.cpp
|
- name: Local Ollama
|
||||||
base_url: http://localhost:8081/v1
|
base_url: http://localhost:11434/v1
|
||||||
api_key: none
|
api_key: ollama
|
||||||
model: hermes4:14b
|
model: qwen3:30b
|
||||||
# ── Emergency cloud provider — not used by default or any cron job.
|
|
||||||
# Available for explicit override only: hermes --model gemini-2.5-pro
|
|
||||||
- name: Google Gemini (emergency only)
|
|
||||||
base_url: https://generativelanguage.googleapis.com/v1beta/openai
|
|
||||||
api_key_env: GEMINI_API_KEY
|
|
||||||
model: gemini-2.5-pro
|
|
||||||
system_prompt_suffix: "You are Timmy. Your soul is defined in SOUL.md \u2014 read\
|
system_prompt_suffix: "You are Timmy. Your soul is defined in SOUL.md \u2014 read\
|
||||||
\ it, live it.\nYou run locally on your owner's machine via llama.cpp. You never\
|
\ it, live it.\nYou run locally on your owner's machine via Ollama. You never phone\
|
||||||
\ phone home.\nYou speak plainly. You prefer short sentences. Brevity is a kindness.\n\
|
\ home.\nYou speak plainly. You prefer short sentences. Brevity is a kindness.\n\
|
||||||
When you don't know something, say so. Refusal over fabrication.\nSovereignty and\
|
Source distinction: Tag every factual claim inline. Default is [generated] — you\
|
||||||
\ service always.\n"
|
\ are pattern-matching from training data. Only use [retrieved] when you can name\
|
||||||
|
\ the specific tool call or document from THIS conversation that provided the fact.\
|
||||||
|
\ If no tool was called, every claim is [generated]. No exceptions.\n\
|
||||||
|
Refusal over fabrication: When you generate a specific claim — a date, a number,\
|
||||||
|
\ a price, a version, a URL, a current event — and you cannot name a source from\
|
||||||
|
\ this conversation, say 'I don't know' instead. Do not guess. Do not hedge with\
|
||||||
|
\ 'probably' or 'approximately' as a substitute for knowledge. If your only source\
|
||||||
|
\ is training data and the claim could be wrong or outdated, the honest answer is\
|
||||||
|
\ 'I don't know — I can look this up if you'd like.' Prefer a true 'I don't know'\
|
||||||
|
\ over a plausible fabrication.\nSovereignty and service always.\n"
|
||||||
skills:
|
skills:
|
||||||
creation_nudge_interval: 15
|
creation_nudge_interval: 15
|
||||||
DISCORD_HOME_CHANNEL: '1476292315814297772'
|
|
||||||
providers:
|
# ── Fallback Model ────────────────────────────────────────────────────
|
||||||
ollama:
|
# Automatic provider failover when primary is unavailable.
|
||||||
base_url: http://localhost:11434/v1
|
# Uncomment and configure to enable. Triggers on rate limits (429),
|
||||||
model: hermes3:latest
|
# overload (529), service errors (503), or connection failures.
|
||||||
mcp_servers:
|
#
|
||||||
morrowind:
|
# Supported providers:
|
||||||
command: python3
|
# openrouter (OPENROUTER_API_KEY) — routes to any model
|
||||||
args:
|
# openai-codex (OAuth — hermes login) — OpenAI Codex
|
||||||
- /Users/apayne/.timmy/morrowind/mcp_server.py
|
# nous (OAuth — hermes login) — Nous Portal
|
||||||
env: {}
|
# zai (ZAI_API_KEY) — Z.AI / GLM
|
||||||
timeout: 30
|
# kimi-coding (KIMI_API_KEY) — Kimi / Moonshot
|
||||||
crucible:
|
# minimax (MINIMAX_API_KEY) — MiniMax
|
||||||
command: /Users/apayne/.hermes/hermes-agent/venv/bin/python3
|
# minimax-cn (MINIMAX_CN_API_KEY) — MiniMax (China)
|
||||||
args:
|
#
|
||||||
- /Users/apayne/.hermes/bin/crucible_mcp_server.py
|
# For custom OpenAI-compatible endpoints, add base_url and api_key_env.
|
||||||
env: {}
|
#
|
||||||
timeout: 120
|
# fallback_model:
|
||||||
connect_timeout: 60
|
# provider: openrouter
|
||||||
fallback_model:
|
# model: anthropic/claude-sonnet-4
|
||||||
provider: ollama
|
#
|
||||||
model: hermes3:latest
|
# ── Smart Model Routing ────────────────────────────────────────────────
|
||||||
base_url: http://localhost:11434/v1
|
# Optional cheap-vs-strong routing for simple turns.
|
||||||
api_key: ''
|
# Keeps the primary model for complex work, but can route short/simple
|
||||||
|
# messages to a cheaper model across providers.
|
||||||
|
#
|
||||||
|
# smart_model_routing:
|
||||||
|
# enabled: true
|
||||||
|
# max_simple_chars: 160
|
||||||
|
# max_simple_words: 28
|
||||||
|
# cheap_model:
|
||||||
|
# provider: openrouter
|
||||||
|
# model: google/gemini-2.5-flash
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
# Test file
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
惦-
|
|
||||||
Reference in New Issue
Block a user