auto-snapshot 2026-08-01 01:35:48

This commit is contained in:
小唯 A06 2026-08-01 01:35:48 +08:00
parent d57bdc92e2
commit 5ced034690
13 changed files with 2107 additions and 608 deletions

View File

@ -1,7 +1,7 @@
model:
default: nvidia/nemotron-3-super-120b-a12b
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
default: deepseek-v4-flash
api_key_env: DEEPSEEK_API_KEY
base_url: https://api.deepseek.com
providers:
newapi-local:
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
@ -16,7 +16,7 @@ providers:
rate_limit: 1000
timeout: 30
deepseek:
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
key_env: DEEPSEEK_API_KEY
base_url: https://api.deepseek.com
cost_factor: 0.0
default_model: deepseek-v4-flash

View File

@ -0,0 +1,612 @@
model:
default: deepseek-v4-flash
<<<<<<< HEAD
api_key: sk-b12...6bbd
=======
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
>>>>>>> 6bbfdba (fix(model-health.py v3): 排名驱动自动替换 + 探针3次平均 + 修复致命缺陷)
base_url: https://api.deepseek.com
providers:
newapi-local:
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
cost_factor: 0.0
default_model: nvidia/nemotron-3-super-120b-a12b
models:
- nvidia/nemotron-3-super-120b-a12b
- openai/gpt-oss-120b
- mistralai/mistral-nemotron
- nvidia/nvidia-nemotron-nano-9b-v2
- nvidia/llama-3.3-nemotron-super-49b-v1.5
rate_limit: 1000
timeout: 30
deepseek:
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
base_url: https://api.deepseek.com
cost_factor: 0.0
default_model: deepseek-v4-flash
models:
- deepseek-v4-flash
- deepseek-v4-pro
rate_limit: 1000
timeout: 30
fallback_providers: '[]'
toolsets:
- hermes-cli
- web
agent:
max_turns: 90
gateway_timeout: 1800
restart_drain_timeout: 180
api_max_retries: 2
service_tier: ''
tool_use_enforcement: auto
task_completion_guidance: true
environment_probe: true
environment_hint: ''
gateway_timeout_warning: 900
clarify_timeout: 600
gateway_notify_interval: 180
gateway_auto_continue_freshness: 3600
image_input_mode: auto
disabled_toolsets: []
terminal:
backend: local
modal_mode: auto
cwd: .
timeout: 180
env_passthrough: []
shell_init_files: []
auto_source_bashrc: true
docker_image: nikolaik/python-nodejs:python3.11-nodejs20
docker_forward_env: []
singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
modal_image: nikolaik/python-nodejs:python3.11-nodejs20
daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
container_cpu: 1
container_memory: 5120
container_disk: 51200
container_persistent: true
docker_volumes: []
docker_mount_cwd_to_workspace: false
docker_extra_args: []
docker_run_as_host_user: false
persistent_shell: true
vercel_runtime: node24
web:
backend: ''
search_backend: ''
extract_backend: ''
browser:
inactivity_timeout: 120
command_timeout: 30
record_sessions: false
allow_private_urls: false
engine: auto
auto_local_for_private_urls: true
cdp_url: ''
dialog_policy: must_respond
dialog_timeout_s: 300
camofox:
managed_persistence: false
user_id: ''
session_key: ''
adopt_existing_tab: false
rewrite_loopback_urls: false
loopback_host_alias: host.docker.internal
cloud_provider: local
use_gateway: false
checkpoints:
enabled: true
max_snapshots: 50
max_total_size_mb: 500
max_file_size_mb: 10
auto_prune: false
retention_days: 7
delete_orphans: true
min_interval_hours: 24
file_read_max_chars: 100000
tool_output:
max_bytes: 50000
max_lines: 2000
max_line_length: 2000
tool_loop_guardrails:
warnings_enabled: true
hard_stop_enabled: false
warn_after:
exact_failure: 2
same_tool_failure: 3
idempotent_no_progress: 2
hard_stop_after:
exact_failure: 5
same_tool_failure: 8
idempotent_no_progress: 5
compression:
enabled: true
threshold: 0.5
target_ratio: 0.2
protect_last_n: 20
hygiene_hard_message_limit: 400
protect_first_n: 3
abort_on_summary_failure: false
kanban:
dispatch_in_gateway: true
dispatch_interval_seconds: 60
failure_limit: 2
worker_log_rotate_bytes: 2097152
worker_log_backup_count: 1
orchestrator_profile: ''
default_assignee: ''
auto_decompose: true
auto_decompose_per_tick: 3
dispatch_stale_timeout_seconds: 14400
prompt_caching:
cache_ttl: 5m
long_lived_prefix: true
long_lived_ttl: 1h
openrouter:
response_cache: true
response_cache_ttl: 300
min_coding_score: 0.65
bedrock:
region: ''
discovery:
enabled: true
provider_filter: []
refresh_interval: 3600
guardrail:
guardrail_identifier: ''
guardrail_version: ''
stream_processing_mode: async
trace: disabled
auxiliary:
vision:
provider: newapi-local
model: meta/llama-3.2-11b-vision-instruct
base_url: http://127.0.0.1:3000/v1
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
timeout: 120
download_timeout: 30
web_extract:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 360
compression:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
skills_hub:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
approval:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
mcp:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
title_generation:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
triage_specifier:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
kanban_decomposer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 180
profile_describer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 60
curator:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 600
session_search:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
extra_body: {}
max_concurrency: 3
display:
compact: false
personality: kawaii
resume_display: full
resume_exchanges: 10
resume_max_user_chars: 300
resume_max_assistant_chars: 200
resume_max_assistant_lines: 3
resume_skip_tool_only: true
busy_input_mode: interrupt
tui_auto_resume_recent: false
bell_on_complete: false
show_reasoning: false
streaming: false
timestamps: false
final_response_markdown: strip
persistent_output: true
persistent_output_max_lines: 200
inline_diffs: true
file_mutation_verifier: true
show_cost: false
skin: default
language: en
tui_status_indicator: kaomoji
user_message_preview:
first_lines: 2
last_lines: 2
interim_assistant_messages: true
tool_progress_command: false
tool_preview_length: 0
ephemeral_system_ttl: 0
runtime_footer:
fields:
- model
- context_pct
- cwd
copy_shortcut: auto
tool_progress: all
tool_progress_style: accumulate
dashboard:
theme: default
show_token_analytics: false
oauth:
client_id: ''
portal_url: ''
public_url: ''
privacy:
redact_pii: false
tts:
provider: edge
edge:
voice: zh-CN-XiaoxiaoNeural
elevenlabs:
voice_id: pNInz6obpgDQGcFmaJgB
model_id: eleven_multilingual_v2
openai:
model: gpt-4o-mini-tts
voice: alloy
xai:
voice_id: eve
language: en
sample_rate: 24000
bit_rate: 128000
mistral:
model: voxtral-mini-tts-2603
voice_id: c69964a6-ab8b-4f8a-9465-ec0925096ec8
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu
piper:
voice: en_US-lessac-medium
use_gateway: false
stt:
enabled: true
provider: local
local:
model: base
language: ''
openai:
model: whisper-1
mistral:
model: voxtral-mini-latest
voice:
record_key: ctrl+b
max_recording_seconds: 120
auto_tts: true
beep_enabled: true
silence_threshold: 200
silence_duration: 3.0
human_delay:
mode: 'off'
min_ms: 800
max_ms: 2500
context:
engine: compressor
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200
user_char_limit: 1375
provider: zhiyi
delegation:
model: nvidia/nemotron-3-super-120b-a12b
provider: newapi-local
base_url: ''
api_key: ''
api_mode: ''
inherit_mcp_toolsets: true
max_iterations: 50
child_timeout_seconds: 600
reasoning_effort: ''
max_concurrent_children: 3
max_spawn_depth: 1
orchestrator_enabled: true
subagent_auto_approve: false
prefill_messages_file: ''
goals:
max_turns: 20
moa:
default_preset: expert-panel
save_traces: false
presets:
expert-panel:
reference_models:
- provider: newapi-local
model: openai/gpt-oss-120b
- provider: newapi-local
model: nvidia/llama-3.3-nemotron-super-49b-v1
- provider: newapi-local
model: mistralai/mistral-large-3-675b-instruct-2512
aggregator:
provider: newapi-local
model: openai/gpt-oss-120b
fanout: user_turn
reference_max_tokens: 800
enabled: true
skills:
external_dirs: []
template_vars: true
inline_shell: false
inline_shell_timeout: 10
guard_agent_created: false
curator:
enabled: true
interval_hours: 168
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
backup:
enabled: true
keep: 5
timezone: ''
slack:
require_mention: true
free_response_channels: ''
allowed_channels: ''
discord:
require_mention: true
free_response_channels: ''
allowed_channels: ''
auto_thread: true
thread_require_mention: false
history_backfill: true
history_backfill_limit: 50
reactions: true
dm_role_auth_guild: ''
server_actions: ''
allow_any_attachment: false
max_attachment_bytes: 33554432
telegram:
reactions: false
allowed_chats: ''
mattermost:
require_mention: true
free_response_channels: ''
allowed_channels: ''
matrix:
require_mention: true
free_response_rooms: ''
allowed_rooms: ''
approvals:
mode: manual
timeout: 60
cron_mode: deny
mcp_reload_confirm: true
destructive_slash_confirm: false
command_allowlist:
- pipe remote content to shell
- script execution via heredoc
- copy/move file into /etc/
- find -delete
- recursive delete
- hermes update (restarts gateway, kills running agents)
- shell command via -c/-lc flag
- force kill processes (killall -KILL)
- script execution via -e/-c flag
- overwrite system file via tee
- copy/move file into sensitive credential/SSH/shell-rc path
- kill hermes/gateway process (self-termination)
- delete in root path
- git force push short flag (rewrites remote history)
- sudo with combined-flag privilege escalation
- overwrite system file via redirection
- start gateway outside systemd (use 'systemctl --user restart hermes-gateway')
- disk copy
- overwrite system config
- overwrite project env/config via redirection
- kill process via pgrep expansion (self-termination)
- SQL TRUNCATE
- in-place edit of system config
- world/other-writable permissions
- stop/restart hermes gateway (kills running agents)
- sudo with privilege flag (stdin/askpass/shell/list)
- copy/move file into system config path
- force kill processes
- git force push (rewrites remote history)
- stop/restart system service
- in-place edit of Hermes config/env
hooks_auto_accept: false
security:
allow_private_urls: false
redact_secrets: true
tirith_enabled: true
tirith_path: tirith
tirith_timeout: 5
tirith_fail_open: true
website_blocklist:
enabled: false
domains: []
shared_files: []
acked_advisories: []
allow_lazy_installs: true
cron:
provider: auto
wrap_response: true
gateway_required: true
default_deliver: origin,feishu:oc_81f6df701c872a1122f32080e366543f
code_execution:
mode: project
tools:
tool_search:
enabled: auto
threshold_pct: 10
search_default_limit: 5
max_search_limit: 20
logging:
level: INFO
max_size_mb: 5
backup_count: 3
memory_monitor:
enabled: true
interval_seconds: 300
model_catalog:
enabled: true
url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
ttl_hours: 24
network:
force_ipv4: false
gateway:
strict: false
media_delivery_allow_dirs: []
trust_recent_files: true
trust_recent_files_seconds: 600
multiplex_profiles: false
sessions:
auto_prune: false
retention_days: 90
vacuum_after_prune: true
min_interval_hours: 24
write_json_snapshots: false
onboarding:
seen:
busy_input_prompt: true
openclaw_residue_cleanup: true
tool_progress_prompt: true
updates:
pre_update_backup: false
backup_keep: 5
lsp:
enabled: true
wait_mode: document
wait_timeout: 5.0
install_strategy: auto
x_search:
model: grok-4.20-reasoning
timeout_seconds: 180
retries: 2
secrets:
bitwarden:
enabled: false
access_token_env: BWS_ACCESS_TOKEN
project_id: ''
cache_ttl_seconds: 300
override_existing: true
auto_install: true
server_url: ''
paste_collapse_threshold: 5
paste_collapse_threshold_fallback: 5
paste_collapse_char_threshold: 2000
_config_version: 24
mcp_servers:
codegraph:
args:
- serve
- --mcp
command: codegraph
connect_timeout: 60
enabled: true
timeout: 120
github:
args:
- -y
- '@modelcontextprotocol/server-github'
command: npx
enabled: true
env:
GITHUB_PERSONAL_ACCESS_TOKEN: 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
timeout: 60
openclaw:
command: openclaw
args:
- mcp
- serve
connect_timeout: 60
timeout: 300
codebase-memory-mcp:
command: /home/muc/.local/bin/codebase-memory-mcp
enabled: true
platform_toolsets:
cli:
- browser
- clarify
- code_execution
- computer_use
- cronjob
- delegation
- file
- image_gen
- mcp-codegraph
- memory
- messaging
- session_search
- skills
- terminal
- todo
- tts
- vision
- web
platforms:
webhook:
enabled: true
extra:
host: 0.0.0.0
port: 8644
feishu:
enabled: true
app_id: cli_a95d7ff06b789bb4
app_secret: Gm7eo0aD9Luka8mHxApRufYIDwmpGsGf
plugins:
disabled: []
enabled:
- agentic-sms-gateway
- cronalytics
- rtk-rewrite
weixin:
enabled: true
extra:
dm_policy: open
group_policy: open
session_reset: {}
known_plugin_toolsets:
cli:
- spotify

View File

@ -0,0 +1,620 @@
model:
<<<<<<< HEAD
default: nvidia/nemotron-3-super-120b-a12b
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
=======
default: deepseek/deepseek-v4-flash
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: https://api.deepseek.com/v1
>>>>>>> 9d4d969 (auto-snapshot 2026-07-31 03:00:25)
providers:
newapi-local:
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
cost_factor: 0.0
default_model: nvidia/nemotron-3-super-120b-a12b
models:
- nvidia/nemotron-3-super-120b-a12b
- openai/gpt-oss-120b
<<<<<<< HEAD
- mistralai/mistral-nemotron
=======
- nvidia/nvidia-nemotron-nano-9b-v2
>>>>>>> 9d4d969 (auto-snapshot 2026-07-31 03:00:25)
- nvidia/llama-3.3-nemotron-super-49b-v1.5
rate_limit: 1000
timeout: 30
deepseek:
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
base_url: https://api.deepseek.com
cost_factor: 0.0
default_model: deepseek-v4-flash
models:
- deepseek-v4-flash
- deepseek-v4-pro
rate_limit: 1000
timeout: 30
fallback_providers: '[]'
toolsets:
- hermes-cli
- web
agent:
max_turns: 90
gateway_timeout: 1800
restart_drain_timeout: 180
api_max_retries: 2
service_tier: ''
tool_use_enforcement: auto
task_completion_guidance: true
environment_probe: true
environment_hint: ''
gateway_timeout_warning: 900
clarify_timeout: 600
gateway_notify_interval: 180
gateway_auto_continue_freshness: 3600
image_input_mode: auto
disabled_toolsets: []
terminal:
backend: local
modal_mode: auto
cwd: .
timeout: 180
env_passthrough: []
shell_init_files: []
auto_source_bashrc: true
docker_image: nikolaik/python-nodejs:python3.11-nodejs20
docker_forward_env: []
singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
modal_image: nikolaik/python-nodejs:python3.11-nodejs20
daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
container_cpu: 1
container_memory: 5120
container_disk: 51200
container_persistent: true
docker_volumes: []
docker_mount_cwd_to_workspace: false
docker_extra_args: []
docker_run_as_host_user: false
persistent_shell: true
vercel_runtime: node24
web:
backend: ''
search_backend: ''
extract_backend: ''
browser:
inactivity_timeout: 120
command_timeout: 30
record_sessions: false
allow_private_urls: false
engine: auto
auto_local_for_private_urls: true
cdp_url: ''
dialog_policy: must_respond
dialog_timeout_s: 300
camofox:
managed_persistence: false
user_id: ''
session_key: ''
adopt_existing_tab: false
rewrite_loopback_urls: false
loopback_host_alias: host.docker.internal
cloud_provider: local
use_gateway: false
checkpoints:
enabled: true
max_snapshots: 50
max_total_size_mb: 500
max_file_size_mb: 10
auto_prune: false
retention_days: 7
delete_orphans: true
min_interval_hours: 24
file_read_max_chars: 100000
tool_output:
max_bytes: 50000
max_lines: 2000
max_line_length: 2000
tool_loop_guardrails:
warnings_enabled: true
hard_stop_enabled: false
warn_after:
exact_failure: 2
same_tool_failure: 3
idempotent_no_progress: 2
hard_stop_after:
exact_failure: 5
same_tool_failure: 8
idempotent_no_progress: 5
compression:
enabled: true
threshold: 0.5
target_ratio: 0.2
protect_last_n: 20
hygiene_hard_message_limit: 400
protect_first_n: 3
abort_on_summary_failure: false
kanban:
dispatch_in_gateway: true
dispatch_interval_seconds: 60
failure_limit: 2
worker_log_rotate_bytes: 2097152
worker_log_backup_count: 1
orchestrator_profile: ''
default_assignee: ''
auto_decompose: true
auto_decompose_per_tick: 3
dispatch_stale_timeout_seconds: 14400
prompt_caching:
cache_ttl: 5m
long_lived_prefix: true
long_lived_ttl: 1h
openrouter:
response_cache: true
response_cache_ttl: 300
min_coding_score: 0.65
bedrock:
region: ''
discovery:
enabled: true
provider_filter: []
refresh_interval: 3600
guardrail:
guardrail_identifier: ''
guardrail_version: ''
stream_processing_mode: async
trace: disabled
auxiliary:
vision:
provider: newapi-local
model: meta/llama-3.2-11b-vision-instruct
base_url: http://127.0.0.1:3000/v1
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
timeout: 120
download_timeout: 30
web_extract:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 360
compression:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
skills_hub:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
approval:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
mcp:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
title_generation:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
triage_specifier:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
kanban_decomposer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 180
profile_describer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 60
curator:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 600
session_search:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
extra_body: {}
max_concurrency: 3
display:
compact: false
personality: kawaii
resume_display: full
resume_exchanges: 10
resume_max_user_chars: 300
resume_max_assistant_chars: 200
resume_max_assistant_lines: 3
resume_skip_tool_only: true
busy_input_mode: interrupt
tui_auto_resume_recent: false
bell_on_complete: false
show_reasoning: false
streaming: false
timestamps: false
final_response_markdown: strip
persistent_output: true
persistent_output_max_lines: 200
inline_diffs: true
file_mutation_verifier: true
show_cost: false
skin: default
language: en
tui_status_indicator: kaomoji
user_message_preview:
first_lines: 2
last_lines: 2
interim_assistant_messages: true
tool_progress_command: false
tool_preview_length: 0
ephemeral_system_ttl: 0
runtime_footer:
fields:
- model
- context_pct
- cwd
copy_shortcut: auto
tool_progress: all
tool_progress_style: accumulate
dashboard:
theme: default
show_token_analytics: false
oauth:
client_id: ''
portal_url: ''
public_url: ''
privacy:
redact_pii: false
tts:
provider: edge
edge:
voice: zh-CN-XiaoxiaoNeural
elevenlabs:
voice_id: pNInz6obpgDQGcFmaJgB
model_id: eleven_multilingual_v2
openai:
model: gpt-4o-mini-tts
voice: alloy
xai:
voice_id: eve
language: en
sample_rate: 24000
bit_rate: 128000
mistral:
model: voxtral-mini-tts-2603
voice_id: c69964a6-ab8b-4f8a-9465-ec0925096ec8
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu
piper:
voice: en_US-lessac-medium
use_gateway: false
stt:
enabled: true
provider: local
local:
model: base
language: ''
openai:
model: whisper-1
mistral:
model: voxtral-mini-latest
voice:
record_key: ctrl+b
max_recording_seconds: 120
auto_tts: true
beep_enabled: true
silence_threshold: 200
silence_duration: 3.0
human_delay:
mode: 'off'
min_ms: 800
max_ms: 2500
context:
engine: compressor
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200
user_char_limit: 1375
provider: zhiyi
delegation:
model: nvidia/nemotron-3-super-120b-a12b
provider: newapi-local
base_url: ''
api_key: ''
api_mode: ''
inherit_mcp_toolsets: true
max_iterations: 50
child_timeout_seconds: 600
reasoning_effort: ''
max_concurrent_children: 3
max_spawn_depth: 1
orchestrator_enabled: true
subagent_auto_approve: false
prefill_messages_file: ''
goals:
max_turns: 20
moa:
default_preset: expert-panel
save_traces: false
presets:
expert-panel:
reference_models:
- provider: newapi-local
model: openai/gpt-oss-120b
- provider: newapi-local
model: nvidia/llama-3.3-nemotron-super-49b-v1
- provider: newapi-local
model: mistralai/mistral-large-3-675b-instruct-2512
aggregator:
provider: newapi-local
model: openai/gpt-oss-120b
fanout: user_turn
reference_max_tokens: 800
enabled: true
skills:
external_dirs: []
template_vars: true
inline_shell: false
inline_shell_timeout: 10
guard_agent_created: false
curator:
enabled: true
interval_hours: 168
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
backup:
enabled: true
keep: 5
timezone: ''
slack:
require_mention: true
free_response_channels: ''
allowed_channels: ''
discord:
require_mention: true
free_response_channels: ''
allowed_channels: ''
auto_thread: true
thread_require_mention: false
history_backfill: true
history_backfill_limit: 50
reactions: true
dm_role_auth_guild: ''
server_actions: ''
allow_any_attachment: false
max_attachment_bytes: 33554432
telegram:
reactions: false
allowed_chats: ''
mattermost:
require_mention: true
free_response_channels: ''
allowed_channels: ''
matrix:
require_mention: true
free_response_rooms: ''
allowed_rooms: ''
approvals:
mode: manual
timeout: 60
cron_mode: deny
mcp_reload_confirm: true
destructive_slash_confirm: false
command_allowlist:
- pipe remote content to shell
- script execution via heredoc
- copy/move file into /etc/
- find -delete
- recursive delete
- hermes update (restarts gateway, kills running agents)
- shell command via -c/-lc flag
- force kill processes (killall -KILL)
- script execution via -e/-c flag
- overwrite system file via tee
<<<<<<< HEAD
=======
- copy/move file into sensitive credential/SSH/shell-rc path
>>>>>>> 9d4d969 (auto-snapshot 2026-07-31 03:00:25)
- kill hermes/gateway process (self-termination)
- delete in root path
- git force push short flag (rewrites remote history)
- sudo with combined-flag privilege escalation
- overwrite system file via redirection
- start gateway outside systemd (use 'systemctl --user restart hermes-gateway')
- disk copy
- overwrite system config
- overwrite project env/config via redirection
- kill process via pgrep expansion (self-termination)
- SQL TRUNCATE
- in-place edit of system config
- world/other-writable permissions
- stop/restart hermes gateway (kills running agents)
- sudo with privilege flag (stdin/askpass/shell/list)
- copy/move file into system config path
- force kill processes
- git force push (rewrites remote history)
- stop/restart system service
- in-place edit of Hermes config/env
hooks_auto_accept: false
security:
allow_private_urls: false
redact_secrets: true
tirith_enabled: true
tirith_path: tirith
tirith_timeout: 5
tirith_fail_open: true
website_blocklist:
enabled: false
domains: []
shared_files: []
acked_advisories: []
allow_lazy_installs: true
cron:
provider: auto
wrap_response: true
gateway_required: true
default_deliver: origin,feishu:oc_81f6df701c872a1122f32080e366543f
code_execution:
mode: project
tools:
tool_search:
enabled: auto
threshold_pct: 10
search_default_limit: 5
max_search_limit: 20
logging:
level: INFO
max_size_mb: 5
backup_count: 3
memory_monitor:
enabled: true
interval_seconds: 300
model_catalog:
enabled: true
url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
ttl_hours: 24
network:
force_ipv4: false
gateway:
strict: false
media_delivery_allow_dirs: []
trust_recent_files: true
trust_recent_files_seconds: 600
multiplex_profiles: false
sessions:
auto_prune: false
retention_days: 90
vacuum_after_prune: true
min_interval_hours: 24
write_json_snapshots: false
onboarding:
seen:
busy_input_prompt: true
openclaw_residue_cleanup: true
tool_progress_prompt: true
updates:
pre_update_backup: false
backup_keep: 5
lsp:
enabled: true
wait_mode: document
wait_timeout: 5.0
install_strategy: auto
x_search:
model: grok-4.20-reasoning
timeout_seconds: 180
retries: 2
secrets:
bitwarden:
enabled: false
access_token_env: BWS_ACCESS_TOKEN
project_id: ''
cache_ttl_seconds: 300
override_existing: true
auto_install: true
server_url: ''
paste_collapse_threshold: 5
paste_collapse_threshold_fallback: 5
paste_collapse_char_threshold: 2000
_config_version: 24
mcp_servers:
codegraph:
args:
- serve
- --mcp
command: codegraph
connect_timeout: 60
enabled: true
timeout: 120
github:
args:
- -y
- '@modelcontextprotocol/server-github'
command: npx
enabled: true
env:
GITHUB_PERSONAL_ACCESS_TOKEN: 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
timeout: 60
openclaw:
command: openclaw
args:
- mcp
- serve
connect_timeout: 60
timeout: 300
codebase-memory-mcp:
command: /home/muc/.local/bin/codebase-memory-mcp
enabled: true
platform_toolsets:
cli:
- browser
- clarify
- code_execution
- computer_use
- cronjob
- delegation
- file
- image_gen
- mcp-codegraph
- memory
- messaging
- session_search
- skills
- terminal
- todo
- tts
- vision
- web
platforms:
webhook:
enabled: true
extra:
host: 0.0.0.0
port: 8644
feishu:
enabled: true
app_id: cli_a95d7ff06b789bb4
app_secret: Gm7eo0aD9Luka8mHxApRufYIDwmpGsGf
plugins:
disabled: []
enabled:
- agentic-sms-gateway
- cronalytics
- rtk-rewrite
weixin:
enabled: true
extra:
dm_policy: open
group_policy: open
session_reset: {}
known_plugin_toolsets:
cli:
- spotify

View File

@ -0,0 +1,612 @@
model:
<<<<<<< HEAD
default: nvidia/nemotron-3-super-120b-a12b
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
=======
default: deepseek-v4-flash
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
base_url: https://api.deepseek.com
>>>>>>> 6bbfdba (fix(model-health.py v3): 排名驱动自动替换 + 探针3次平均 + 修复致命缺陷)
providers:
newapi-local:
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
base_url: http://127.0.0.1:3000/v1
cost_factor: 0.0
default_model: nvidia/nemotron-3-super-120b-a12b
models:
- nvidia/nemotron-3-super-120b-a12b
- openai/gpt-oss-120b
- mistralai/mistral-nemotron
- nvidia/llama-3.3-nemotron-super-49b-v1.5
rate_limit: 1000
timeout: 30
deepseek:
api_key: sk-b1212066094d4e319784f23d5b2c6bbd
base_url: https://api.deepseek.com
cost_factor: 0.0
default_model: deepseek-v4-flash
models:
- deepseek-v4-flash
- deepseek-v4-pro
rate_limit: 1000
timeout: 30
fallback_providers: '["deepseek"]'
toolsets:
- hermes-cli
- web
agent:
max_turns: 90
gateway_timeout: 1800
restart_drain_timeout: 180
api_max_retries: 2
service_tier: ''
tool_use_enforcement: auto
task_completion_guidance: true
environment_probe: true
environment_hint: ''
gateway_timeout_warning: 900
clarify_timeout: 600
gateway_notify_interval: 180
gateway_auto_continue_freshness: 3600
image_input_mode: auto
disabled_toolsets: []
terminal:
backend: local
modal_mode: auto
cwd: .
timeout: 180
env_passthrough: []
shell_init_files: []
auto_source_bashrc: true
docker_image: nikolaik/python-nodejs:python3.11-nodejs20
docker_forward_env: []
singularity_image: docker://nikolaik/python-nodejs:python3.11-nodejs20
modal_image: nikolaik/python-nodejs:python3.11-nodejs20
daytona_image: nikolaik/python-nodejs:python3.11-nodejs20
container_cpu: 1
container_memory: 5120
container_disk: 51200
container_persistent: true
docker_volumes: []
docker_mount_cwd_to_workspace: false
docker_extra_args: []
docker_run_as_host_user: false
persistent_shell: true
vercel_runtime: node24
web:
backend: ''
search_backend: ''
extract_backend: ''
browser:
inactivity_timeout: 120
command_timeout: 30
record_sessions: false
allow_private_urls: false
engine: auto
auto_local_for_private_urls: true
cdp_url: ''
dialog_policy: must_respond
dialog_timeout_s: 300
camofox:
managed_persistence: false
user_id: ''
session_key: ''
adopt_existing_tab: false
rewrite_loopback_urls: false
loopback_host_alias: host.docker.internal
cloud_provider: local
use_gateway: false
checkpoints:
enabled: true
max_snapshots: 50
max_total_size_mb: 500
max_file_size_mb: 10
auto_prune: false
retention_days: 7
delete_orphans: true
min_interval_hours: 24
file_read_max_chars: 100000
tool_output:
max_bytes: 50000
max_lines: 2000
max_line_length: 2000
tool_loop_guardrails:
warnings_enabled: true
hard_stop_enabled: false
warn_after:
exact_failure: 2
same_tool_failure: 3
idempotent_no_progress: 2
hard_stop_after:
exact_failure: 5
same_tool_failure: 8
idempotent_no_progress: 5
compression:
enabled: true
threshold: 0.5
target_ratio: 0.2
protect_last_n: 20
hygiene_hard_message_limit: 400
protect_first_n: 3
abort_on_summary_failure: false
kanban:
dispatch_in_gateway: true
dispatch_interval_seconds: 60
failure_limit: 2
worker_log_rotate_bytes: 2097152
worker_log_backup_count: 1
orchestrator_profile: ''
default_assignee: ''
auto_decompose: true
auto_decompose_per_tick: 3
dispatch_stale_timeout_seconds: 14400
prompt_caching:
cache_ttl: 5m
long_lived_prefix: true
long_lived_ttl: 1h
openrouter:
response_cache: true
response_cache_ttl: 300
min_coding_score: 0.65
bedrock:
region: ''
discovery:
enabled: true
provider_filter: []
refresh_interval: 3600
guardrail:
guardrail_identifier: ''
guardrail_version: ''
stream_processing_mode: async
trace: disabled
auxiliary:
vision:
provider: newapi-local
model: meta/llama-3.2-11b-vision-instruct
base_url: http://127.0.0.1:3000/v1
api_key: 0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP
timeout: 120
download_timeout: 30
web_extract:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 360
compression:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
skills_hub:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
approval:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
mcp:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
title_generation:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
triage_specifier:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 120
kanban_decomposer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 180
profile_describer:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 60
curator:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 600
session_search:
provider: auto
model: ''
base_url: ''
api_key: ''
timeout: 30
extra_body: {}
max_concurrency: 3
display:
compact: false
personality: kawaii
resume_display: full
resume_exchanges: 10
resume_max_user_chars: 300
resume_max_assistant_chars: 200
resume_max_assistant_lines: 3
resume_skip_tool_only: true
busy_input_mode: interrupt
tui_auto_resume_recent: false
bell_on_complete: false
show_reasoning: false
streaming: false
timestamps: false
final_response_markdown: strip
persistent_output: true
persistent_output_max_lines: 200
inline_diffs: true
file_mutation_verifier: true
show_cost: false
skin: default
language: en
tui_status_indicator: kaomoji
user_message_preview:
first_lines: 2
last_lines: 2
interim_assistant_messages: true
tool_progress_command: false
tool_preview_length: 0
ephemeral_system_ttl: 0
runtime_footer:
fields:
- model
- context_pct
- cwd
copy_shortcut: auto
tool_progress: all
tool_progress_style: accumulate
dashboard:
theme: default
show_token_analytics: false
oauth:
client_id: ''
portal_url: ''
public_url: ''
privacy:
redact_pii: false
tts:
provider: edge
edge:
voice: zh-CN-XiaoxiaoNeural
elevenlabs:
voice_id: pNInz6obpgDQGcFmaJgB
model_id: eleven_multilingual_v2
openai:
model: gpt-4o-mini-tts
voice: alloy
xai:
voice_id: eve
language: en
sample_rate: 24000
bit_rate: 128000
mistral:
model: voxtral-mini-tts-2603
voice_id: c69964a6-ab8b-4f8a-9465-ec0925096ec8
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu
piper:
voice: en_US-lessac-medium
use_gateway: false
stt:
enabled: true
provider: local
local:
model: base
language: ''
openai:
model: whisper-1
mistral:
model: voxtral-mini-latest
voice:
record_key: ctrl+b
max_recording_seconds: 120
auto_tts: true
beep_enabled: true
silence_threshold: 200
silence_duration: 3.0
human_delay:
mode: 'off'
min_ms: 800
max_ms: 2500
context:
engine: compressor
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200
user_char_limit: 1375
provider: zhiyi
delegation:
model: nvidia/nemotron-3-super-120b-a12b
provider: newapi-local
base_url: ''
api_key: ''
api_mode: ''
inherit_mcp_toolsets: true
max_iterations: 50
child_timeout_seconds: 600
reasoning_effort: ''
max_concurrent_children: 3
max_spawn_depth: 1
orchestrator_enabled: true
subagent_auto_approve: false
prefill_messages_file: ''
goals:
max_turns: 20
moa:
default_preset: expert-panel
save_traces: false
presets:
expert-panel:
reference_models:
- provider: newapi-local
model: openai/gpt-oss-120b
- provider: newapi-local
model: nvidia/llama-3.3-nemotron-super-49b-v1
- provider: newapi-local
model: mistralai/mistral-large-3-675b-instruct-2512
aggregator:
provider: newapi-local
model: openai/gpt-oss-120b
fanout: user_turn
reference_max_tokens: 800
enabled: true
skills:
external_dirs: []
template_vars: true
inline_shell: false
inline_shell_timeout: 10
guard_agent_created: false
curator:
enabled: true
interval_hours: 168
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
backup:
enabled: true
keep: 5
timezone: ''
slack:
require_mention: true
free_response_channels: ''
allowed_channels: ''
discord:
require_mention: true
free_response_channels: ''
allowed_channels: ''
auto_thread: true
thread_require_mention: false
history_backfill: true
history_backfill_limit: 50
reactions: true
dm_role_auth_guild: ''
server_actions: ''
allow_any_attachment: false
max_attachment_bytes: 33554432
telegram:
reactions: false
allowed_chats: ''
mattermost:
require_mention: true
free_response_channels: ''
allowed_channels: ''
matrix:
require_mention: true
free_response_rooms: ''
allowed_rooms: ''
approvals:
mode: manual
timeout: 60
cron_mode: deny
mcp_reload_confirm: true
destructive_slash_confirm: false
command_allowlist:
- pipe remote content to shell
- script execution via heredoc
- copy/move file into /etc/
- find -delete
- recursive delete
- hermes update (restarts gateway, kills running agents)
- shell command via -c/-lc flag
- force kill processes (killall -KILL)
- script execution via -e/-c flag
- overwrite system file via tee
- kill hermes/gateway process (self-termination)
- delete in root path
- git force push short flag (rewrites remote history)
- sudo with combined-flag privilege escalation
- overwrite system file via redirection
- start gateway outside systemd (use 'systemctl --user restart hermes-gateway')
- disk copy
- overwrite system config
- overwrite project env/config via redirection
- kill process via pgrep expansion (self-termination)
- SQL TRUNCATE
- in-place edit of system config
- world/other-writable permissions
- stop/restart hermes gateway (kills running agents)
- sudo with privilege flag (stdin/askpass/shell/list)
- copy/move file into system config path
- force kill processes
- git force push (rewrites remote history)
- stop/restart system service
- in-place edit of Hermes config/env
hooks_auto_accept: false
security:
allow_private_urls: false
redact_secrets: true
tirith_enabled: true
tirith_path: tirith
tirith_timeout: 5
tirith_fail_open: true
website_blocklist:
enabled: false
domains: []
shared_files: []
acked_advisories: []
allow_lazy_installs: true
cron:
provider: auto
wrap_response: true
gateway_required: true
default_deliver: origin,feishu:oc_81f6df701c872a1122f32080e366543f
code_execution:
mode: project
tools:
tool_search:
enabled: auto
threshold_pct: 10
search_default_limit: 5
max_search_limit: 20
logging:
level: INFO
max_size_mb: 5
backup_count: 3
memory_monitor:
enabled: true
interval_seconds: 300
model_catalog:
enabled: true
url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
ttl_hours: 24
network:
force_ipv4: false
gateway:
strict: false
media_delivery_allow_dirs: []
trust_recent_files: true
trust_recent_files_seconds: 600
multiplex_profiles: false
sessions:
auto_prune: false
retention_days: 90
vacuum_after_prune: true
min_interval_hours: 24
write_json_snapshots: false
onboarding:
seen:
busy_input_prompt: true
openclaw_residue_cleanup: true
tool_progress_prompt: true
updates:
pre_update_backup: false
backup_keep: 5
lsp:
enabled: true
wait_mode: document
wait_timeout: 5.0
install_strategy: auto
x_search:
model: grok-4.20-reasoning
timeout_seconds: 180
retries: 2
secrets:
bitwarden:
enabled: false
access_token_env: BWS_ACCESS_TOKEN
project_id: ''
cache_ttl_seconds: 300
override_existing: true
auto_install: true
server_url: ''
paste_collapse_threshold: 5
paste_collapse_threshold_fallback: 5
paste_collapse_char_threshold: 2000
_config_version: 24
mcp_servers:
codegraph:
args:
- serve
- --mcp
command: codegraph
connect_timeout: 60
enabled: true
timeout: 120
github:
args:
- -y
- '@modelcontextprotocol/server-github'
command: npx
enabled: true
env:
GITHUB_PERSONAL_ACCESS_TOKEN: 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
timeout: 60
openclaw:
command: openclaw
args:
- mcp
- serve
connect_timeout: 60
timeout: 300
codebase-memory-mcp:
command: /home/muc/.local/bin/codebase-memory-mcp
enabled: true
platform_toolsets:
cli:
- browser
- clarify
- code_execution
- computer_use
- cronjob
- delegation
- file
- image_gen
- mcp-codegraph
- memory
- messaging
- session_search
- skills
- terminal
- todo
- tts
- vision
- web
platforms:
webhook:
enabled: true
extra:
host: 0.0.0.0
port: 8644
feishu:
enabled: true
app_id: cli_a95d7ff06b789bb4
app_secret: Gm7eo0aD9Luka8mHxApRufYIDwmpGsGf
plugins:
disabled: []
enabled:
- agentic-sms-gateway
- cronalytics
- rtk-rewrite
weixin:
enabled: true
extra:
dm_policy: open
group_policy: open
session_reset: {}
known_plugin_toolsets:
cli:
- spotify

View File

@ -27,7 +27,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-06-21T18:52:36.548110+08:00",
"next_run_at": "2026-07-30T11:45:09.710569+08:00",
"next_run_at": "2026-08-01T01:36:48.501935+08:00",
"last_run_at": "2026-07-30T11:44:09.710569+08:00",
"last_status": "ok",
"last_error": null,
@ -123,7 +123,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:30:54.618246+08:00",
"next_run_at": "2026-07-30T17:22:23.748974+08:00",
"next_run_at": "2026-08-01T07:35:48.504498+08:00",
"last_run_at": "2026-07-30T11:22:23.748974+08:00",
"last_status": "ok",
"last_error": null,
@ -169,7 +169,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:42:21.503720+08:00",
"next_run_at": "2026-07-30T11:59:10.256329+08:00",
"next_run_at": "2026-08-01T02:05:48.506956+08:00",
"last_run_at": "2026-07-30T11:29:10.256329+08:00",
"last_status": "ok",
"last_error": null,
@ -215,7 +215,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T01:43:11.921492+08:00",
"next_run_at": "2026-07-30T22:00:00+08:00",
"next_run_at": "2026-08-01T22:00:00+08:00",
"last_run_at": "2026-07-29T22:02:40.385507+08:00",
"last_status": "ok",
"last_error": null,
@ -265,7 +265,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:10:36.846128+08:00",
"next_run_at": "2026-07-31T03:00:00+08:00",
"next_run_at": "2026-08-01T03:00:00+08:00",
"last_run_at": "2026-07-30T03:00:00.405596+08:00",
"last_status": "ok",
"last_error": null,
@ -311,7 +311,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:11:00.385573+08:00",
"next_run_at": "2026-07-31T03:00:00+08:00",
"next_run_at": "2026-08-01T03:00:00+08:00",
"last_run_at": "2026-07-30T03:00:00.992609+08:00",
"last_status": "ok",
"last_error": null,
@ -449,7 +449,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:46:29.345663+08:00",
"next_run_at": "2026-07-31T05:00:00+08:00",
"next_run_at": "2026-08-01T05:00:00+08:00",
"last_run_at": "2026-07-30T05:00:02.935247+08:00",
"last_status": "ok",
"last_error": null,
@ -495,7 +495,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T02:51:48.935042+08:00",
"next_run_at": "2026-07-30T12:00:00+08:00",
"next_run_at": "2026-08-01T06:00:00+08:00",
"last_run_at": "2026-07-30T06:00:19.898064+08:00",
"last_status": "ok",
"last_error": null,
@ -541,7 +541,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T21:31:29.417518+08:00",
"next_run_at": "2026-07-31T09:00:00+08:00",
"next_run_at": "2026-08-01T09:00:00+08:00",
"last_run_at": "2026-07-30T09:00:07.467395+08:00",
"last_status": "ok",
"last_error": null,
@ -587,7 +587,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-09T21:31:33.068978+08:00",
"next_run_at": "2026-07-30T21:00:00+08:00",
"next_run_at": "2026-08-01T21:00:00+08:00",
"last_run_at": "2026-07-29T21:00:55.787887+08:00",
"last_status": "ok",
"last_error": null,
@ -725,7 +725,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-12T01:32:01.773389+08:00",
"next_run_at": "2026-07-30T16:00:00+08:00",
"next_run_at": "2026-08-03T16:00:00+08:00",
"last_run_at": "2026-07-29T16:01:02.261318+08:00",
"last_status": "ok",
"last_error": null,
@ -771,7 +771,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-12T02:01:32.403228+08:00",
"next_run_at": "2026-07-31T08:00:00+08:00",
"next_run_at": "2026-08-03T08:00:00+08:00",
"last_run_at": "2026-07-30T08:00:07.765250+08:00",
"last_status": "ok",
"last_error": null,
@ -817,7 +817,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-12T02:33:28.322158+08:00",
"next_run_at": "2026-07-31T09:00:00+08:00",
"next_run_at": "2026-08-03T09:00:00+08:00",
"last_run_at": "2026-07-30T09:00:10.097029+08:00",
"last_status": "ok",
"last_error": null,
@ -863,7 +863,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-13T12:03:22.805682+08:00",
"next_run_at": "2026-07-30T12:00:00+08:00",
"next_run_at": "2026-08-01T02:00:00+08:00",
"last_run_at": "2026-07-30T11:00:10.087879+08:00",
"last_status": "ok",
"last_error": null,
@ -909,7 +909,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-13T12:06:19.941605+08:00",
"next_run_at": "2026-07-31T04:00:00+08:00",
"next_run_at": "2026-08-01T04:00:00+08:00",
"last_run_at": "2026-07-30T04:00:02.811555+08:00",
"last_status": "ok",
"last_error": null,
@ -1001,7 +1001,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-21T08:55:49.786038+08:00",
"next_run_at": "2026-07-30T11:50:00+08:00",
"next_run_at": "2026-08-01T01:40:00+08:00",
"last_run_at": "2026-07-30T11:40:09.486613+08:00",
"last_status": "ok",
"last_error": null,
@ -1047,7 +1047,7 @@
"paused_at": null,
"paused_reason": null,
"created_at": "2026-07-30T09:50:28.224645+08:00",
"next_run_at": "2026-07-31T03:00:00+08:00",
"next_run_at": "2026-08-01T03:00:00+08:00",
"last_run_at": null,
"last_status": null,
"last_error": null,
@ -1064,5 +1064,5 @@
"workdir": null
}
],
"updated_at": "2026-07-30T11:44:09.710669+08:00"
"updated_at": "2026-08-01T01:35:48.507024+08:00"
}

View File

@ -1 +1 @@
1785383109.5456767
1785519348.5146606

View File

@ -1 +1 @@
1785383109.5549402
1785519348.517083

View File

@ -1,9 +1,9 @@
{
"started_at": "2026-07-08T18:23:30.315261+00:00",
"last_deep_tick": "2026-07-30T03:44:54.373606+00:00",
"last_light_tick": "2026-07-30T03:45:27.484596+00:00",
"last_deep_tick": "2026-07-31T17:34:17.383350+00:00",
"last_light_tick": "2026-07-31T17:35:21.790013+00:00",
"last_state": {
"disk_pct": 51,
"disk_pct": 54,
"mem_pct": 63,
"processes": {
"zhiyid": true,
@ -12,17 +12,17 @@
"hermes": true
}
},
"tick_count": 56084,
"deep_tick_count": 9188,
"tick_count": 60218,
"deep_tick_count": 10222,
"solved_count": 1,
"learned_count": 0,
"uptime_seconds": 225719,
"uptime_seconds": 133256,
"last_reflection": {
"evaluation_previous_goal": "LLM\u8c03\u7528\u5931\u8d25",
"memory": "\u4e0a\u6b21\u8c03\u7528\u5931\u8d25",
"next_goal": "\u91cd\u8bd5"
"evaluation_previous_goal": "",
"memory": "",
"next_goal": ""
},
"last_profile_update": 1785381718.3491108,
"last_profile_update": 1785500531.101474,
"soulful": {
"recent_moments": [
{
@ -57,7 +57,7 @@
}
],
"profile_summary": "\u7b80\u6d01\u76f4\u63a5",
"cares_pending": 3,
"cares_pending": 0,
"uptime_minutes": 0,
"daemon_status": "running"
},

View File

@ -1,466 +1,14 @@
{
"version": 2,
"updated_at": "2026-07-30T03:45:27.656337+00:00",
"uptime_minutes": 3761,
"updated_at": "2026-07-31T17:35:21.869168+00:00",
"uptime_minutes": 2220,
"daemon_status": "running",
"distill_status": "ok",
"observations": [
{
"name": "f_a01确认巡检报告已收_关键状态_知乎文章停更于_05_6月20日_约一个月无更新_a01评估当前无需升级_等待哥哥_牧尘_指示",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1785072114064818659",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_sessiokey_有效性检查_-_2026-07-26_11_00_utc_8_结论_整体正常_有一项需关注_正常的_sessio-_agent_a02_maiheartbe",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1785034875422838308",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_2026-07-09_11_00_心跳回复_-_a03_墨文_1_05_封面图任务_记忆库查不到_我未录入过_队列里也没有_请来源方确认补充_2_overdue-check_blac",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1785018158403944028",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_用户_全面进行一次检查_发现问题_并解决_尽量用opencode审核代码_助手_全面检查完成_已修复_7_个问题_文件_行_类型_严重_状态_---",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784989382795967336",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_用户_加上_认真分析问题_别乱修改_助手_全部搞定_daemo稳定_deep_tick_6092_正常运行_---_修复总结_问题_根因_修复_状",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784986219983115592",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_用户_你怎么一直弄dns_助手_daemo已稳定运行_6128_次_crash_终结_---_根因_int_out_假设_nvidia-smi_永远输出数字",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784984502438260149",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_用户_错误信息一直在飞书群发_助手_问题已定位清楚_总结一下_---_根因_dns_中断_20_分钟_20_00-20_20_dns_断期间_所有发飞书群的_delivery",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784983326599083903",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_用户_小唯异常_助手_我在等你说具体哪里异常_刚才已确认_-_进程全存活_zhiyi_bge_new-api_hermes_daemo-_newapi_13",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784982897737856478",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_sessiokey_有效性检查记录_2026-07-25_11_00_cst_51个活跃sessio0个已归档_过期_所有团队成员_a01_a02_a03_a04_a05_sessio均",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1784948443895996082",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_sessiokey_健康检查报告_-_2026-07-24_11_00_cst_正常心跳_sessio5个_-_maiagent_maimaiheartbeat",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1784862056715739883",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_用户_cronjob_response_bge内存泄漏监控_job_id_2891b3304339_---_crobge内存泄漏监控_failed_provider_t",
"namespace": "shared",
"summary": ""
},
{
"name": "ep_1784798739181161581",
"namespace": "shared",
"summary": ""
},
{
"name": "f_sessiokey_健康检查结果_2026-07-23_11_00_cst_心跳_sessio全部正常_-_a02_maiheartbeat_178477335930",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1784775745032095947",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "f_用户_小唯机器人发的_助手_修好了_总结两次诊断的结果_问题1_本次对话发现并修复_memory-system-self-upgrade_py_里期望_active_scene",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784767495091903065",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_用户_记忆系统升级异常_助手_这条消息只有标题_没有具体内容_是哪个_cro发出来的_还是你看漏了具体报错信息_能把完整内容发给我吗_或者告诉我_记忆系统升级异常_具体是指哪个系统_什",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "ep_1784766328648485458",
"namespace": "hermes-main",
"summary": ""
},
{
"name": "f_a05_核查_a01_sessiokey_异常_2026-07-22_11_00_结论_a01_小雪_无独立_agent_实体_是_mai的会话标签_-_sessions_list_a",
"namespace": "openclaw-main",
"summary": ""
},
{
"name": "ep_1784689500438390218",
"namespace": "openclaw-main",
"summary": ""
}
],
"patterns": [
{
"name": "topic:按照你的建议",
"occurrence": 1,
"source": "session_messages",
"topic": "按照你的建议"
},
{
"name": "topic:each",
"occurrence": 1,
"source": "session_messages",
"topic": "each"
},
{
"name": "topic:COMPLETE",
"occurrence": 1,
"source": "session_messages",
"topic": "COMPLETE"
},
{
"name": "topic:同步服务器凭",
"occurrence": 1,
"source": "session_messages",
"topic": "同步服务器凭"
},
{
"name": "topic:证照片",
"occurrence": 1,
"source": "session_messages",
"topic": "证照片"
},
{
"name": "topic:系统",
"occurrence": 1,
"source": "session_messages",
"topic": "系统"
},
{
"name": "topic:设计改造方案",
"occurrence": 1,
"source": "session_messages",
"topic": "设计改造方案"
},
{
"name": "topic:改造",
"occurrence": 1,
"source": "session_messages",
"topic": "改造"
},
{
"name": "topic:BATCH",
"occurrence": 1,
"source": "session_messages",
"topic": "BATCH"
},
{
"name": "topic:daemon",
"occurrence": 1,
"source": "session_messages",
"topic": "daemon"
},
{
"name": "topic:写代码",
"occurrence": 1,
"source": "session_messages",
"topic": "写代码"
},
{
"name": "topic:自检",
"occurrence": 1,
"source": "session_messages",
"topic": "自检"
},
{
"name": "topic:code",
"occurrence": 1,
"source": "session_messages",
"topic": "code"
},
{
"name": "topic:IMPORTANT",
"occurrence": 1,
"source": "session_messages",
"topic": "IMPORTANT"
},
{
"name": "pattern:shared:software",
"occurrence": 1,
"source": "graph_nodes",
"topic": ""
},
{
"name": "topic:数据恢复备忘",
"occurrence": 1,
"source": "session_messages",
"topic": "数据恢复备忘"
},
{
"name": "topic:在不",
"occurrence": 1,
"source": "session_messages",
"topic": "在不"
},
{
"name": "topic:好的",
"occurrence": 1,
"source": "session_messages",
"topic": "好的"
},
{
"name": "topic:执行",
"occurrence": 1,
"source": "session_messages",
"topic": "执行"
},
{
"name": "topic:问题",
"occurrence": 1,
"source": "session_messages",
"topic": "问题"
},
{
"name": "topic:我想知道",
"occurrence": 1,
"source": "session_messages",
"topic": "我想知道"
},
{
"name": "topic:人格文件什么",
"occurrence": 1,
"source": "session_messages",
"topic": "人格文件什么"
},
{
"name": "topic:的用修改么",
"occurrence": 1,
"source": "session_messages",
"topic": "的用修改么"
},
{
"name": "topic:财务报表报送",
"occurrence": 1,
"source": "session_messages",
"topic": "财务报表报送"
},
{
"name": "topic:与信息采集",
"occurrence": 1,
"source": "session_messages",
"topic": "与信息采集"
},
{
"name": "topic:小企业会计准",
"occurrence": 1,
"source": "session_messages",
"topic": "小企业会计准"
},
{
"name": "topic:你可以让她执",
"occurrence": 1,
"source": "session_messages",
"topic": "你可以让她执"
},
{
"name": "topic:行你不能执行",
"occurrence": 1,
"source": "session_messages",
"topic": "行你不能执行"
},
{
"name": "topic:的终端命令",
"occurrence": 1,
"source": "session_messages",
"topic": "的终端命令"
},
{
"name": "topic:继续",
"occurrence": 1,
"source": "session_messages",
"topic": "继续"
},
{
"name": "topic:hermes",
"occurrence": 1,
"source": "session_messages",
"topic": "hermes"
},
{
"name": "topic:you",
"occurrence": 1,
"source": "session_messages",
"topic": "you"
},
{
"name": "topic:muc",
"occurrence": 1,
"source": "session_messages",
"topic": "muc"
},
{
"name": "topic:has",
"occurrence": 1,
"source": "session_messages",
"topic": "has"
},
{
"name": "topic:The",
"occurrence": 1,
"source": "session_messages",
"topic": "The"
},
{
"name": "topic:background",
"occurrence": 1,
"source": "session_messages",
"topic": "background"
},
{
"name": "topic:home",
"occurrence": 1,
"source": "session_messages",
"topic": "home"
},
{
"name": "topic:user",
"occurrence": 1,
"source": "session_messages",
"topic": "user"
},
{
"name": "topic:process",
"occurrence": 1,
"source": "session_messages",
"topic": "process"
},
{
"name": "topic:out",
"occurrence": 1,
"source": "session_messages",
"topic": "out"
},
{
"name": "topic:parallel",
"occurrence": 1,
"source": "session_messages",
"topic": "parallel"
},
{
"name": "topic:openclaw",
"occurrence": 1,
"source": "session_messages",
"topic": "openclaw"
},
{
"name": "topic:results",
"occurrence": 1,
"source": "session_messages",
"topic": "results"
},
{
"name": "topic:ASYNC",
"occurrence": 1,
"source": "session_messages",
"topic": "ASYNC"
},
{
"name": "topic:DELEGATION",
"occurrence": 1,
"source": "session_messages",
"topic": "DELEGATION"
},
{
"name": "pattern:reasonix-main:concept",
"occurrence": 1,
"source": "unknown",
"topic": ""
},
{
"name": "pattern:obsidian-plugin-main:entity",
"occurrence": 1,
"source": "unknown",
"topic": ""
},
{
"name": "pattern:hermes-test-e41:entity",
"occurrence": 1,
"source": "unknown",
"topic": ""
},
{
"name": "pattern:hermes:entity",
"occurrence": 1,
"source": "unknown",
"topic": ""
},
{
"name": "pattern:a06-main:concept",
"occurrence": 1,
"source": "unknown",
"topic": ""
}
],
"observations": [],
"patterns": [],
"scenes": [
{
"content": "Found 5 matching memories:\n\n- **[episodic]** (priority: 93) [scene: 我和用户一起补写织忆心迹的时间线] (score: 0.033)\n 用户和 AI 于 2026-07-13T09:30:00Z 上线了统一记忆入口 memory_recall.py首次将原有的三套独立记忆系统打通标志着织忆心迹记忆体系完成整合。\n\n- **[episodic]** (priority: 90) [scene: 我和用户一起补写织忆心迹的时间线] (score: 0.032)\n 用户和 AI 于 2026-07-13T10:30:00Z ",
"content": "Found 5 matching memories:\n\n- **[episodic]** (priority: 90) [scene: 我在和用户一起补写织忆心迹的时间线] (score: 0.032)\n 用户与 AI 于 2026-07-10 共同启动了每日复盘机制,开始有意识地记录当天学到的东西,这是织忆心迹记忆体系搭建的第一个关键里程碑;于 2026-07-13T09:30 上线统一记忆入口 memory_recall.py首次打通原有三套独立记忆系统标志着记忆体系完成整合于 2026-07-13T10:30 完成 Soulful 心迹补写,首次主动记录彼此之间有意义的事。此后用",
"total": 5
}
],

View File

@ -30,6 +30,12 @@ save_llm_context教训函数存在不代表真的在工作——必须每次t
§
5个独立分身实体cron(22)/delegate_task/OpenClaw(铁锋/卫安)/opencode/prof-b(独立profile+gateway+飞书)。各自独立配置。prof-b的HERMES_HOME=~/.hermes-prof-b/(不是~/hermes/profiles/systemd unit指定。2026-07-29起model-health.py自愈覆盖主配置+prof-b。
§
免费模型质量排名探针自动评分①gpt-oss-120b(99分,329ms) ②nemotron-3-super(94分,432ms) ③mistral-nemotron(79分,2560ms) ④nemotron-nano-9b(76分,973ms)。model-health.py v2新增质量探针+自动发现(5个/轮)+自动升级(更好模型替换配置中最差的)。
NewAPI免费模型上下文: deepseek-v4-pro(1M), nemotron-3-super(1M✅用户确认), llama-4-maverick(1M), minimax-m3(256K), most NIM 128K, step-3.5-flash(8K)。
§
CBM v0.9.0 已装8 MCP工具已通。cbm-code-analysis v1.1.0 + references (verified-queries + mcp-integration-workflow)。
CBM v0.9.0 已装8 MCP工具已通。cbm-code-analysis v1.1.0 + references (verified-queries + mcp-integration-workflow)。
§
2026-07-30 模型排序: nemotron-3-super-120b-a12b(1M ctx)为🥇delegation模型。上下文评分1M=100,256K=90,128K=80。慢模型>3s用户舍弃。下载研究项目: GH超时→镜像/换源/或先下载到/tmp。
§
⚠️铁律(2026-07-31牧尘纠正)禁止擅自切换日常对话模型2026-07-30我把deepseek-v4-flash(收费)换成nemotron-3-super(NewAPI免费)→无法正常使用,牧尘改回收费模型。日常对话=deepseek-v4-flash(收费)固定不变NewAPI免费模型只用于cron/自动化,绝不用于主对话。改模型前必须先问牧尘。
§
model-health.py v3(2026-07-31修复两致命缺陷): ①旧版只修providers.models列表、从不验证model.default→prof-b被写成NewAPI不存在的deepseek/deepseek-v4-flash全挂503 ②排名公式丢了context_score→1M模型排不上。v3: 自愈检查model.default(仅newapi-local,付费保护) + _verify_model_usable替换前真实调用验证 + 候选必须stable + OpenClaw fallbacks也修 + 探针每题3次取平均 + 排名公式probe*0.30+ctx*0.25+param*0.20+family*0.10+stab*0.10+speed*0.05。当前🥇nemotron-3-super(1M,probe100)🥈gpt-oss(probe92)。cron 6a45e41cba6c每6h跑。

View File

@ -9,7 +9,7 @@ KOCR修复铁律只动需要改的列不从逐页XLS重新合并batch
文档意识:做完必须同步 Obsidian。所有工具在 07-Wiki 或 06-工具与资源 留档。
技术深度要求研究必须挖到底API结构、架构原理、对比给结论带数据支撑。
§
模型分层:日常对话用 DeepSeek V4 Flash(付费)cron/自动化走 NewAPI 免费模型(gpt-oss-120b优先)。2026-07-29 EOL模型全部替换(step-3.5-flash、minimax-m2.7、minimax-m3、qwen3.5-122b)新免费四件套gpt-oss-120b/nemotron-super-49b/mistral-medium-3.5/nemotron-3-super。config.yaml+MOA已修22 cron零报错
模型分层铁律:日常对话必须用 DeepSeek V4 Flash(付费)禁止擅自切换为NewAPI免费模型2026-07-31被纠正两次切了就无法正常使用。NewAPI免费模型仅用于cron/自动化。改模型前必须先问
§
牧尘2026-07-29教训修复必须全覆盖所有分体——主配置/prof-b/OpenClaw都得改到漏一个都不算完。模型自愈脚本必须覆盖所有配置文件格式(YAML+JSON)。prof-b gateway重启只能从他那边终端手动执行agent内部被强制保护。
§

View File

@ -205,43 +205,47 @@ def _context_score(model: str) -> float:
return max(round(ctx / 8 * 10), 5)
def _run_quality_probe(model: str) -> dict:
"""运行质量探针,返回探针分和详细结果"""
def _run_quality_probe(model: str, trials: int = 3) -> dict:
"""运行质量探针,返回探针分和详细结果。
v3: 每道题测 trials 默认 3取通过比例消除单次波动"""
probe_results = []
total = 0
for q in PROBE_QUESTIONS:
payload = json.dumps({
"model": model,
"messages": [{"role": "user", "content": q["question"]}],
"max_tokens": 200,
"temperature": 0.1,
}).encode()
req = urllib.request.Request(
f"{API}/chat/completions",
data=payload,
headers=HEADERS,
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=20) as resp:
body = json.loads(resp.read())
msg = body.get("choices", [{}])[0].get("message", {}) or {}
# 有些模型把实际回答放 reasoning_contentgpt-oss-120b 等)
content = msg.get("content") or msg.get("reasoning_content") or msg.get("reasoning") or ""
passed = 1 if q["check"](content) else 0
score = q["weight"] if passed else 0
total += score
probe_results.append({
"question": q["question"][:40],
"passed": passed,
"score": score,
})
except Exception:
probe_results.append({
"question": q["question"][:40],
"passed": 0,
"score": 0,
})
passed_count = 0
scores = []
for _ in range(trials):
payload = json.dumps({
"model": model,
"messages": [{"role": "user", "content": q["question"]}],
"max_tokens": 200,
"temperature": 0.1,
}).encode()
req = urllib.request.Request(
f"{API}/chat/completions",
data=payload,
headers=HEADERS,
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=20) as resp:
body = json.loads(resp.read())
msg = body.get("choices", [{}])[0].get("message", {}) or {}
# 有些模型把实际回答放 reasoning_contentgpt-oss-120b 等)
content = msg.get("content") or msg.get("reasoning_content") or msg.get("reasoning") or ""
passed = 1 if q["check"](content) else 0
scores.append(passed)
except Exception:
scores.append(0)
passed_count = sum(scores)
# 取平均:通过比例 × 权重3 次中过 2 次 = 2/3 权重)
score = round(q["weight"] * passed_count / trials)
total += score
probe_results.append({
"question": q["question"][:40],
"passed": passed_count,
"trials": trials,
"score": score,
})
return {"probe_score": total, "probe_detail": probe_results}
@ -375,7 +379,7 @@ def test_model(model: str, fastest_latency: int = None) -> dict:
cs = _context_score(model)
rank_score = round(
probe_s * 0.30 + cs * 0.15 + ps * 0.20 + fs * 0.15 + stab_s * 0.10 + ss * 0.10
probe_s * 0.30 + cs * 0.25 + ps * 0.20 + fs * 0.10 + stab_s * 0.10 + ss * 0.05
)
return {
@ -399,10 +403,31 @@ def test_model(model: str, fastest_latency: int = None) -> dict:
}
def _verify_model_usable(model: str) -> bool:
"""替换前真实调用验证:必须 HTTP 200 且有内容,才允许写入配置。
这是自愈安全闸门候选模型必须先实际跑通一次防止写入死模型/不存在模型"""
payload = json.dumps({
"model": model,
"messages": [{"role": "user", "content": "hi"}],
"max_tokens": 5,
}).encode()
req = urllib.request.Request(
f"{API}/chat/completions", data=payload, headers=HEADERS, method="POST"
)
try:
with urllib.request.urlopen(req, timeout=20) as resp:
body = json.loads(resp.read())
msg = body.get("choices", [{}])[0].get("message", {}) or {}
content = msg.get("content") or msg.get("reasoning_content") or ""
return bool(content.strip())
except Exception:
return False
def main():
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
results = []
deadline = time.time() + 300 # 5分钟全局超时探针增加了耗时
deadline = time.time() + 480 # 8分钟全局超时探针3次取平均耗时增加
# ============ 自动发现新模型 ============
new_models = _discover_new_models()
@ -440,12 +465,14 @@ def main():
else:
ss = 50
stab_s = 100 if r["stability"] == "stable" else (50 if r["stability"] == "unstable" else 0)
# v3: 加入 context_score长上下文是核心优势之前公式把它丢了
r["rank_score"] = round(
r.get("probe_score", 0) * 0.35
+ r.get("param_score", 50) * 0.25
+ r.get("family_score", 60) * 0.20
r.get("probe_score", 0) * 0.30
+ r.get("context_score", 80) * 0.25
+ r.get("param_score", 50) * 0.20
+ r.get("family_score", 60) * 0.10
+ stab_s * 0.10
+ ss * 0.10
+ ss * 0.05
)
# 汇总
@ -491,47 +518,78 @@ def main():
# ============ 自愈:检测到死的模型自动替换 ============
def _heal_config(config_path: str, declared: list, label: str) -> bool:
"""修复一个配置文件的模型列表,返回是否修改"""
dead_in = [r for r in results if r["model"] in declared and r["stability"] == "dead"]
if not dead_in:
return False
"""修复一个配置文件的模型列表,返回是否修改。
print(f"\n🔧 [{label}] 检测到 {len(dead_in)} 个模型已死亡,正在自愈...")
v2: providers 列表外还必须检查实际生效的 model.default 字段
之前只修 providers.models 列表model.default 指向死模型时脚本完全看不见
所有替换前必须通过 _verify_model_usable 真实调用验证
"""
with open(config_path) as f:
cfg = yaml.safe_load(f)
current_models = cfg["providers"]["newapi-local"]["models"]
# ---------- 1. 检查 providers.newapi-local.models 列表 ----------
current_models = cfg.get("providers", {}).get("newapi-local", {}).get("models", [])
changed = False
for dead in dead_in:
if dead["model"] not in current_models:
continue
replacement = None
# 按质量排名选最优替补(高 rank_score 优先)
ranked_candidates = sorted(
[r for r in results if r["model"] in CANDIDATE_POOL
and r["model"] not in current_models
and r["stability"] != "dead"],
key=lambda x: x["rank_score"], reverse=True
)
if ranked_candidates:
replacement = ranked_candidates[0]["model"]
if not replacement:
print(f" ❌ [{label}] {dead['model']} 已死,但无可用替补")
continue
dead_in = [r for r in results if r["model"] in declared and r["stability"] == "dead"]
if dead_in:
print(f"\n🔧 [{label}] 检测到 {len(dead_in)} 个模型已死亡,正在自愈...")
idx = current_models.index(dead["model"])
current_models[idx] = replacement
changed = True
print(f" ✅ [{label}] {dead['model']}{replacement}")
for dead in dead_in:
if dead["model"] not in current_models:
continue
replacement = None
# 按质量排名选最优替补(高 rank_score 优先)且必须通过真实调用验证
ranked_candidates = sorted(
[r for r in results if r["model"] in CANDIDATE_POOL
and r["model"] not in current_models
and r["stability"] == "stable"
and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
if ranked_candidates:
replacement = ranked_candidates[0]["model"]
if not replacement:
print(f" ❌ [{label}] {dead['model']} 已死,但无可用替补")
continue
if cfg["providers"]["newapi-local"].get("default_model") == dead["model"]:
cfg["providers"]["newapi-local"]["default_model"] = replacement
print(f" default_model 同步更新为 {replacement}")
idx = current_models.index(dead["model"])
current_models[idx] = replacement
changed = True
print(f" ✅ [{label}] {dead['model']}{replacement}")
if cfg.get("model", {}).get("default") == dead["model"]:
cfg["model"]["default"] = replacement
print(f" model.default 同步更新为 {replacement}")
if cfg.get("providers", {}).get("newapi-local", {}).get("default_model") == dead["model"]:
cfg["providers"]["newapi-local"]["default_model"] = replacement
print(f" default_model 同步更新为 {replacement}")
if cfg.get("model", {}).get("default") == dead["model"]:
cfg["model"]["default"] = replacement
print(f" model.default 同步更新为 {replacement}")
# ---------- 2. 检查 model.default 实际生效字段v2 新增)----------
# 只有当 model.default 指向 newapi-local 免费模型时才自愈;
# 付费主模型deepseek-v4-flash 等)绝不自动改。
model_default = cfg.get("model", {}).get("default")
model_provider = cfg.get("model", {}).get("provider", "")
if model_default and model_provider == "newapi-local":
# 在结果里找它;不在结果里 = 根本没被测试(未知状态),也视为需要修复
found = next((r for r in results if r["model"] == model_default), None)
is_bad = found is None or found["stability"] != "stable"
if is_bad:
print(f"\n🔧 [{label}] model.default={model_default} 不可用({found['stability'] if found else '未测试'}),正在自愈...")
ranked_candidates = sorted(
[r for r in results if r["model"] in CANDIDATE_POOL
and r["stability"] == "stable"
and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
replacement = ranked_candidates[0]["model"] if ranked_candidates else None
if replacement and replacement != model_default:
cfg["model"]["default"] = replacement
cfg["model"]["base_url"] = "http://127.0.0.1:3000/v1"
cfg["model"]["api_key"] = "0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP"
changed = True
print(f" ✅ [{label}] model.default {model_default}{replacement}")
if changed:
with open(config_path, "w") as f:
@ -574,7 +632,8 @@ def main():
continue
ranked_candidates = sorted(
[r for r in results if r["model"] in CANDIDATE_POOL
and r["stability"] != "dead"
and r["stability"] == "stable"
and _verify_model_usable(r["model"])
and not any(m.get("id") == r["model"] for m in models_list)],
key=lambda x: x["rank_score"], reverse=True
)
@ -602,9 +661,9 @@ def main():
dead_result = next((r for r in results if r["model"] == raw_model and r["stability"] == "dead"), None)
if not dead_result:
continue
# 找替补
# 找替补(必须 stable + 真实调用验证)
ranked_candidates = sorted(
[r for r in results if r["stability"] == "stable"],
[r for r in results if r["stability"] == "stable" and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
replacement = ranked_candidates[0]["model"] if ranked_candidates else None
@ -617,6 +676,36 @@ def main():
changed = True
print(f" ✅ [OpenClaw agent] {raw_model}{replacement}")
# --- 2.5 修复 agents.list[*].model.fallbacksv2 新增)---
for agent in agents_list:
fallbacks = agent.get("model", {}).get("fallbacks", [])
if not fallbacks:
continue
new_fallbacks = []
fb_changed = False
for fb in fallbacks:
parts = fb.split("/")
raw_model = "/".join(parts[-2:]) if len(parts) >= 2 else parts[-1]
fb_dead = next((r for r in results if r["model"] == raw_model and r["stability"] == "dead"), None)
if not fb_dead:
new_fallbacks.append(fb)
continue
ranked_candidates = sorted(
[r for r in results if r["stability"] == "stable" and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
replacement = ranked_candidates[0]["model"] if ranked_candidates else None
if not replacement:
print(f" ❌ [OpenClaw fallback] {raw_model} 已死,无替补")
continue
prefix = fb.split("/")[0] + "/"
new_fallbacks.append(f"{prefix}{replacement}")
fb_changed = True
print(f" ✅ [OpenClaw fallback] {raw_model}{replacement}")
if fb_changed:
agent["model"]["fallbacks"] = new_fallbacks
changed = True
# --- 3. 修复 agents.defaults.compaction.model ---
defaults = cfg.get("agents", {}).get("defaults", {})
comp_model = defaults.get("compaction", {}).get("model", "")
@ -624,7 +713,8 @@ def main():
dead_result = next((r for r in results if r["model"] == comp_model and r["stability"] == "dead"), None)
if dead_result:
ranked_candidates = sorted(
[r for r in results if r["stability"] == "stable" and r["rank_score"] > 50],
[r for r in results if r["stability"] == "stable" and r["rank_score"] > 50
and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
replacement = ranked_candidates[0]["model"] if ranked_candidates else None
@ -643,45 +733,50 @@ def main():
# ============ 主动升级:新模型排名更高则自动替换 ============
def _auto_promote_config(config_path: str, label: str, n_keep: int = 4) -> bool:
"""检查配置中模型列表,如果发现有排名更高的新模型,替换掉最差的"""
"""v3: 排名驱动的自动升级。
每次巡检检查配置里实际生效的 default_modelnewapi-local
如果排名第一的稳定模型不同且验证通过就升级不依赖"新模型/死模型"事件"""
if not os.path.exists(config_path):
return False
# 新发现的稳定模型(不在 CANDIDATE_POOL 里的)
new_stable = [r for r in results if r["model"] not in CANDIDATE_POOL
and r["stability"] == "stable" and r["rank_score"] > 0
and r["model"] not in KNOWN_IGNORE]
if not new_stable:
return False
# 读取当前配置的模型列表
with open(config_path) as f:
cfg = yaml.safe_load(f)
current_models = cfg.get("providers", {}).get("newapi-local", {}).get("models", [])
if not current_models:
return False
# 对每个新模型,检查是否超过当前配置中的最低排名模型
changed = False
for new_r in sorted(new_stable, key=lambda x: x["rank_score"], reverse=True):
# 如果已经存在,跳过
if new_r["model"] in current_models:
continue
# 找当前配置中排名最低的
ranked_current = sorted(
[r for r in results if r["model"] in current_models and r["stability"] != "dead"],
key=lambda x: x["rank_score"]
)
if not ranked_current or len(current_models) < n_keep:
continue
worst = ranked_current[0]
if new_r["rank_score"] > worst["rank_score"]:
idx = current_models.index(worst["model"])
print(f" ⬆️ [{label}] 升级: {worst['model']}({worst['rank_score']}分) → {new_r['model']}({new_r['rank_score']}分)")
current_models[idx] = new_r["model"]
# ---------- A. 升级 providers.newapi-local.default_model ----------
prov = cfg.get("providers", {}).get("newapi-local", {})
current_default = prov.get("default_model", "")
# 排名第一的稳定模型(必须验证通过)
best_candidates = sorted(
[r for r in results if r["stability"] == "stable"
and _verify_model_usable(r["model"])],
key=lambda x: x["rank_score"], reverse=True
)
best_model = best_candidates[0]["model"] if best_candidates else None
if best_model and current_default != best_model:
print(f" ⬆️ [{label}] default_model: {current_default or '(空)'}{best_model} (排名第1)")
prov["default_model"] = best_model
changed = True
# ---------- B. 升级 model.default仅当它指向 newapi-local 免费模型)----------
model_default = cfg.get("model", {}).get("default")
model_provider = cfg.get("model", {}).get("provider", "")
if model_default and model_provider == "newapi-local" and best_model and model_default != best_model:
# 当前模型不可用,或排名落后于第一名
cur = next((r for r in results if r["model"] == model_default), None)
cur_bad = cur is None or cur["stability"] != "stable"
cur_lower = cur is not None and best_model and best_candidates and cur["rank_score"] < best_candidates[0]["rank_score"]
if cur_bad or cur_lower:
print(f" ⬆️ [{label}] model.default: {model_default}{best_model} (排名驱动)")
cfg["model"]["default"] = best_model
cfg["model"]["base_url"] = "http://127.0.0.1:3000/v1"
cfg["model"]["api_key"] = "0ExNiLblJvIWBDpkS50fwOBw4MmqLyKdHJK5iQtlw9dOMWBP"
changed = True
if changed:
cfg["providers"]["newapi-local"]["models"] = current_models
with open(config_path, "w") as f:
yaml.dump(cfg, f, default_flow_style=False, allow_unicode=True, sort_keys=False)
print(f" ✅ [{label}] 主动升级完成")
print(f" ✅ [{label}] 排名驱动升级完成")
return changed
_auto_promote_config(CONFIG_PATH, "主配置")

View File

@ -6,10 +6,12 @@
"context": "",
"created_at": "2026-07-09T19:44:52.308215+00:00",
"follow_up_date": "2026-07-31",
"status": "pending",
"status": "stale",
"reminder_count": 6,
"last_reminded": "2026-07-23T16:13:46.254173+00:00",
"tags": []
"tags": [],
"staled_at": "2026-07-31T17:35:21.830340+00:00",
"stale_reason": "超过14天未处理创建于2026-07-09"
},
{
"id": "27ec4bb6",
@ -17,10 +19,12 @@
"context": "",
"created_at": "2026-07-09T19:45:07.031106+00:00",
"follow_up_date": "2026-07-31",
"status": "pending",
"status": "stale",
"reminder_count": 6,
"last_reminded": "2026-07-23T16:13:46.254543+00:00",
"tags": []
"tags": [],
"staled_at": "2026-07-31T17:35:21.830340+00:00",
"stale_reason": "超过14天未处理创建于2026-07-09"
},
{
"id": "93d680f2",
@ -28,11 +32,13 @@
"context": "",
"created_at": "2026-07-09T19:46:37.210399+00:00",
"follow_up_date": "2026-07-31",
"status": "pending",
"status": "stale",
"reminder_count": 6,
"last_reminded": "2026-07-23T16:13:46.254680+00:00",
"tags": []
"tags": [],
"staled_at": "2026-07-31T17:35:21.830340+00:00",
"stale_reason": "超过14天未处理创建于2026-07-09"
}
],
"updated_at": "2026-07-23T16:13:46.254699+00:00"
"updated_at": "2026-07-31T17:35:21.830340+00:00"
}