开源AI工作流 是 AI Skill Hub 本期精选Agent工作流之一。综合评分 7.5 分,整体质量较高。我们推荐使用将其纳入你的 AI 工具库,帮助提升工作效率。
开源AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
开源AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:go install(推荐) go install github.com/Temikus/denkeeper@latest # 方式二:从源码编译 git clone https://github.com/Temikus/denkeeper cd denkeeper go build -o denkeeper . # 方式三:下载预编译二进制 # 访问 Releases 页面下载对应平台二进制文件 # https://github.com/Temikus/denkeeper/releases
# 查看帮助 denkeeper --help # 基本运行 denkeeper [options] <input> # 详细使用说明请查阅文档 # https://github.com/Temikus/denkeeper
# denkeeper 配置说明 # 查看配置选项 denkeeper --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export DENKEEPER_CONFIG="/path/to/config.yml"
<p align="center"> <img src="assets/logo_text.png" alt="Denkeeper" width="300"> </p>
<p align="center"> <a href="https://github.com/Temikus/denkeeper/actions/workflows/ci.yml"><img src="https://github.com/Temikus/denkeeper/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="https://github.com/Temikus/denkeeper/actions/workflows/security.yml"><img src="https://github.com/Temikus/denkeeper/actions/workflows/security.yml/badge.svg" alt="Security"></a> <a href="https://github.com/Temikus/denkeeper/releases/latest"><img src="https://img.shields.io/github/v/release/Temikus/denkeeper?label=release" alt="Latest Release"></a> <a href="https://github.com/Temikus/denkeeper/pkgs/container/denkeeper"><img src="https://img.shields.io/github/v/release/Temikus/denkeeper?label=ghcr.io&logo=docker" alt="Docker Image"></a> <a href="https://goreportcard.com/report/github.com/Temikus/denkeeper"><img src="https://goreportcard.com/badge/github.com/Temikus/denkeeper" alt="Go Report Card"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/Temikus/denkeeper" alt="License"></a> <a href="https://github.com/Temikus/denkeeper/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/UI_coverage-enforced-blue" alt="UI Coverage"></a> </p>
A security-first personal AI agent that lives in your chat. Built in Go as a single binary, designed to run anywhere from a Raspberry Pi to a cloud VM.
Denkeeper connects to your Telegram or Discord, routes messages through LLM providers via Anthropic, OpenAI, OpenRouter, or a local Ollama instance, and remembers conversations across sessions using a local SQLite database. It enforces per-session cost budgets, user allowlists, and a tiered permission system — so you stay in control of what it can do and how much it can spend.
@daily/@hourly shorthand; per-schedule agent targeting and session modescommand:/schedule:) and per-agent skill mergingkv_get/kv_set/kv_delete/kv_list/kv_set_nx); useful for locks, counters, caches, and cross-session statesupervisor = "agent-name" in TOML; the supervisor sits between auto-approve rules and human approval, returning APPROVE/DENY/ESCALATE for each tool call; supervisor prompt includes skill/schedule context for scheduled invocations; configurable timeout (supervisor_timeout, default 30s) and context message count (supervisor_context_messages, default 5); LLM failures emit a supervisor_error event before falling through to human approvaltool_call, skill, channel, approval, schedule, llm, config, session, mcp, safety, supervisor); web UI page with timeline and table views, category/status/agent/time filters[[channels]]) that decouple sessions from adapters; cross-adapter session sharing, ephemeral session mode, /session command for runtime switching; auto-synthesized from agent adapters bindings when absent (backward compatible)/stop cancels the current in-flight request, /panic emergency-stops all in-flight requests and pauses the scheduler, /resume clears panic state; available in Telegram, Discord, web UI, and REST API/clear removes all messages from a session, /compact summarises via LLM and replaces all messages with a single summary; available in Telegram, Discord, web UI, and REST APIswaggo/swag, served at GET /api/v1/openapi.json (no auth required)/metrics endpoint and optional OTLP trace exportdenkeeper plugin keygen/sign/verify commands for Ed25519 plugin binary signing and verificationdenkeeper passwd generates a bcrypt hash for dashboard password loginSOUL.md that gives the agent character (editable)mise.toml)docker pull ghcr.io/temikus/denkeeper:latest
docker run -d --name denkeeper \
-v ~/.denkeeper:/data \
ghcr.io/temikus/denkeeper:latest
The container reads config from DENKEEPER_CONFIG (default /data/denkeeper.toml). Override with -e DENKEEPER_CONFIG=/path/to/config.toml.
```bash
just build ./pkg/bin/denkeeper serve
Or run directly without building:
bash just serve ```
mkdir -p ~/.denkeeper cp denkeeper.toml.example ~/.denkeeper/denkeeper.toml
Denkeeper uses a single TOML file (default ~/.denkeeper/denkeeper.toml). See denkeeper.toml.example for all options. The config path can be set via --config flag or DENKEEPER_CONFIG env var.
Health check: GET /api/v1/health returns {"status":"ok"} with no authentication required. Use this for Docker HEALTHCHECK or Kubernetes liveness/readiness probes (requires api.enabled = true).
Key sections:
| Section | Purpose |
|---|---|
[telegram] | Bot token and allowed user IDs |
[discord] | Bot token and allowed user snowflake IDs |
[llm] | Default provider name, model, and per-session cost limits (cost_limit_soft, cost_limit_hard) |
[[llm.providers]] | Named provider instances — multiple instances of the same type allowed (e.g. OpenAI + LM Studio) |
[llm.anthropic] | Anthropic API key — legacy single-slot syntax, auto-converted to [[llm.providers]] |
[llm.openrouter] | OpenRouter API key — legacy single-slot syntax |
[llm.ollama] | Ollama base URL — legacy single-slot syntax |
[[llm.fallback]] | Fallback strategies (error/rate_limit/cost_limit triggers) |
[session] | Default permission tier (supervised/autonomous/restricted) |
[[agents]] | Multi-agent definitions (persona, skills, LLM provider/model override, adapter bindings, supervisor, supervisor_timeout, supervisor_context_messages, cost limits) |
[[channels]] | Named routing endpoints — bind adapter chats to agents with session identity; session_mode (shared/ephemeral) |
[audit] | Audit log settings (enabled, retention_days, cleanup_interval, buffer_size) |
[mcp] | Global MCP settings — request timeout, auto-restart, max restart attempts, restart cooldown, SSE URL allowlist |
[tools.*] | MCP tool server definitions — stdio (subprocess) or SSE (remote) transport, URL, headers, per-server timeout override |
[plugins.*] | Plugin definitions — subprocess or Docker-sandboxed (capability declarations) |
[security] | Ed25519 plugin signing config (trusted_keys, allow_unsigned) |
[voice] | STT/TTS configuration (OpenAI) |
[api] | External REST API (listen addr, TLS, CORS, rate limiting, API keys with scopes) |
[api.auth] | Dashboard authentication (bcrypt password, session secret, OIDC SSO) |
[otel] | OpenTelemetry observability (Prometheus metrics, OTLP trace export) |
[[schedules]] | Recurring tasks (cron, interval, or named schedules) |
[kv] | Agent KV store limits (max_keys_per_agent, max_value_bytes, cleanup_interval) |
[memory] | SQLite database path |
[log] | Log level and format |
Secrets and select config fields can be set via environment variables, which take precedence over values in denkeeper.toml. This enables the standard Kubernetes pattern of using a ConfigMap for config and a Secret for credentials.
| Env Var | Config Field |
|---|---|
DENKEEPER_CONFIG | Config file path (replaces --config flag) |
DENKEEPER_TELEGRAM_TOKEN | telegram.token |
DENKEEPER_DISCORD_TOKEN | discord.token |
DENKEEPER_LLM_PROVIDER | llm.default_provider |
DENKEEPER_LLM_MODEL | llm.default_model |
DENKEEPER_LLM_OPENROUTER_API_KEY | llm.openrouter.api_key |
DENKEEPER_LLM_ANTHROPIC_API_KEY | llm.anthropic.api_key |
DENKEEPER_LLM_ANTHROPIC_BASE_URL | llm.anthropic.base_url |
DENKEEPER_LLM_OLLAMA_BASE_URL | llm.ollama.base_url |
DENKEEPER_LLM_OPENAI_API_KEY | llm.openai.api_key |
DENKEEPER_LLM_OPENAI_BASE_URL | llm.openai.base_url |
DENKEEPER_VOICE_OPENAI_API_KEY | voice.openai.api_key |
DENKEEPER_LOG_LEVEL | log.level |
DENKEEPER_LOG_FORMAT | log.format |
DENKEEPER_MEMORY_DB_PATH | memory.db_path |
DENKEEPER_API_ENABLED | api.enabled (accepts "true" or "1") |
DENKEEPER_API_LISTEN | api.listen |
DENKEEPER_SESSION_TIER | session.tier |
DENKEEPER_API_AUTH_SESSION_SECRET | api.auth.session_secret (AES-256 hex key) |
DENKEEPER_OIDC_CLIENT_ID | api.auth.oidc.client_id |
DENKEEPER_OIDC_CLIENT_SECRET | api.auth.oidc.client_secret |
DENKEEPER_API_WEBSOCKET_ENABLED | api.websocket_enabled (accepts "true" or "false") |
DENKEEPER_OTEL_ENABLED | otel.enabled (accepts "true" or "false") |
DENKEEPER_OTEL_TRACES_ENDPOINT | otel.traces_endpoint (OTLP HTTP endpoint) |
A Helm chart is available in deploy/helm/denkeeper/ for Kubernetes deployments.
$EDITOR ~/.denkeeper/denkeeper.toml
The API server and web dashboard are enabled by default (listening on :8080). All endpoints (except /health) require a Bearer token matching a configured API key.
[api]
listen = "0.0.0.0:8080"
[[api.keys]]
name = "my-client"
key = "dk-your-secret-key"
scopes = ["chat", "sessions:read", "costs:read"]
Available scopes: chat, admin, agents:read, agents:write, sessions:read, sessions:write, costs:read, skills:read, skills:write, schedules:read, schedules:write, approvals:read, approvals:write, tools:read, tools:write, kv:read, kv:write, channels:read, channels:write, audit:read
Endpoints:
| Method | Path | Scope | Description |
|---|---|---|---|
GET | /api/v1/health | — | Health check (no auth) |
GET | /api/v1/openapi.json | — | OpenAPI 2.0 spec (no auth) |
GET | /llms.txt | — | LLM-readable instance summary: base URL, auth notes, key endpoints, configured agents (no auth) |
GET | /api/v1/setup | — | First-run setup status |
POST | /api/v1/setup | — | Initialize first-run configuration |
POST | /api/v1/chat | chat | Send a message; returns { session_id, response }. Add Accept: text/event-stream for SSE. |
GET | /api/v1/ws | chat | WebSocket upgrade for bidirectional streaming (auth via ?token= or session cookie) |
GET | /api/v1/models | agents:read | List available LLM models from all providers |
GET | /api/v1/models/details | agents:read | Model details with pricing info |
GET | /api/v1/llm/providers | admin | List LLM providers with current config |
POST | /api/v1/llm/providers | admin | Create a named provider instance |
PATCH | /api/v1/llm/providers/{name} | admin | Update provider config (API key, base URL) |
DELETE | /api/v1/llm/providers/{name} | admin | Remove a provider instance |
PATCH | /api/v1/llm/config | admin | Update global LLM config (default provider, model) |
GET | /api/v1/server/config | admin | Server config (version, build info, CORS, WebSocket) |
PATCH | /api/v1/server/config | admin | Update server config (CORS origins, WebSocket settings) |
POST | /api/v1/server/reload | admin | Reload config from disk |
POST | /api/v1/server/restart | admin | Restart the server process |
GET | /api/v1/auth/status | admin | Auth config summary (password, OIDC, sessions) |
GET | /api/v1/auth/sessions | admin | List active sessions |
DELETE | /api/v1/auth/sessions/{id} | admin | Revoke a session |
POST | /api/v1/auth/password | admin | Change password |
GET | /api/v1/auth/oidc/test | admin | Test OIDC provider reachability |
POST | /api/v1/auth/preferences | admin | Set preferred login method |
GET | /api/v1/onboarding | admin | Setup checklist status |
POST | /api/v1/onboarding/dismiss | admin | Dismiss onboarding card |
GET | /api/v1/sessions | sessions:read | List all conversations |
GET | /api/v1/sessions/{id}/messages | sessions:read | Get messages for a session |
GET | /api/v1/sessions/{id}/stats | sessions:read | Session telemetry summary |
GET | /api/v1/sessions/{id}/tool-calls | sessions:read | Tool call records for a session |
GET | /api/v1/sessions/{id}/skills | sessions:read | Skill usage for a session |
POST | /api/v1/sessions/{id}/clear | sessions:write | Clear all messages in a session (keeps conversation row) |
POST | /api/v1/sessions/{id}/compact | sessions:write | Compact session into LLM summary |
POST | /api/v1/sessions/{id}/stop | chat | Cancel in-flight request for a session |
DELETE | /api/v1/sessions/{id} | sessions:read | Delete a session and its history |
POST | /api/v1/panic | admin | Emergency stop — cancel all in-flight requests, pause scheduler |
POST | /api/v1/resume | admin | Clear panic state, resume scheduler |
GET | /api/v1/panic | admin | Get panic state ({panicked, panic_time}) |
GET | /api/v1/telemetry/summary | costs:read | Aggregate telemetry (?since=&until=) |
GET | /api/v1/agents | agents:read | List agents with metadata |
POST | /api/v1/agents | admin | Create a new agent at runtime |
GET | /api/v1/agents/{name} | agents:read | Agent details and skills |
PATCH | /api/v1/agents/{name} | agents:write | Mutate agent config (tier, model, supervisor, cost limits) |
DELETE | /api/v1/agents/{name} | admin | Remove an agent (rejects if referenced by channels/schedules) |
GET | /api/v1/skills | skills:read | List all skills across agents |
GET | /api/v1/skills/{agent} | skills:read | List skills for a specific agent |
POST | /api/v1/skills/{agent} | skills:write | Create a skill |
PUT | /api/v1/skills/{agent}/{name} | skills:write | Update a skill |
DELETE | /api/v1/skills/{agent}/{name} | skills:write | Delete a skill |
GET | /api/v1/schedules | schedules:read | List schedules with run times |
POST | /api/v1/schedules | schedules:write | Create a schedule |
PATCH | /api/v1/schedules/{name} | schedules:write | Update a schedule |
DELETE | /api/v1/schedules/{name} | schedules:write | Delete a schedule |
GET | /api/v1/costs | costs:read | Cost summary |
GET | /api/v1/approvals | approvals:read | List approval requests (filter by ?status=pending) |
GET | /api/v1/approvals/{id} | approvals:read | Get a single approval request |
POST | /api/v1/approvals/{id}/approve | approvals:write | Approve; ?auto_approve=session\|permanent to create auto-approve rule |
POST | /api/v1/approvals/{id}/deny | approvals:write | Deny a pending request |
GET | /api/v1/auto-approve | approvals:read | List auto-approve rules (filter by ?agent=) |
POST | /api/v1/auto-approve | approvals:write | Create an auto-approve rule |
DELETE | /api/v1/auto-approve/{id} | approvals:write | Delete an auto-approve rule |
GET | /api/v1/keys | admin | List API keys (secrets not returned) |
POST | /api/v1/keys | admin | Create a new API key |
DELETE | /api/v1/keys/{id} | admin | Revoke an API key |
DELETE | /api/v1/keys/{id}/permanent | admin | Permanently delete a revoked key |
POST | /api/v1/keys/{id}/rotate | admin | Rotate an API key |
GET | /api/v1/tools | tools:read | List MCP tool servers |
GET | /api/v1/tools/{name} | tools:read | Get tool server details |
POST | /api/v1/tools | tools:write | Add a tool server |
PUT | /api/v1/tools/{name} | tools:write | Edit a tool server |
DELETE | /api/v1/tools/{name} | tools:write | Remove a tool server |
GET | /api/v1/tools/{name}/health | tools:read | Tool server health status |
POST | /api/v1/tools/{name}/restart | tools:write | Manually restart a tool server |
GET | /api/v1/plugins | tools:read | List plugins |
GET | /api/v1/plugins/{name} | tools:read | Get plugin details |
POST | /api/v1/plugins | tools:write | Add a plugin |
DELETE | /api/v1/plugins/{name} | tools:write | Remove a plugin |
GET | /api/v1/kv/{agent} | kv:read | List KV keys for an agent |
GET | /api/v1/kv/{agent}/{key} | kv:read | Get a KV key value |
PUT | /api/v1/kv/{agent}/{key} | kv:write | Set a KV key value (body: {"value":"...","ttl":"5m"}) |
DELETE | /api/v1/kv/{agent}/{key} | kv:write | Delete a KV key |
GET | /api/v1/channels | channels:read | List all channels |
POST | /api/v1/channels | channels:write | Create a channel |
GET | /api/v1/channels/{name} | channels:read | Channel detail |
PATCH | /api/v1/channels/{name} | channels:write | Update a channel |
DELETE | /api/v1/channels/{name} | channels:write | Remove a channel |
POST | /api/v1/channels/{name}/activate | channels:write | Set active channel for an adapter key |
DELETE | /api/v1/channels/{name}/activate | channels:write | Clear active channel override |
GET | /api/v1/audit | audit:read | List audit events (filter by ?category=&agent=&status=&since=&until=) |
GET | /api/v1/audit/stats | audit:read | Aggregate counts by category/status |
Chat example:
```bash
denkeeper是一个开源的AI工作流,提供了一个单一二进制的个人AI代理,用户可以自定义控制AI工作流,具有很好的可扩展性和可定制性。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
经综合评估,开源AI工作流 在Agent工作流赛道中表现稳健,质量良好。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | denkeeper |
| 原始描述 | 开源AI工作流:A single-binary personal AI agent designed for people who want full control over。⭐9 · Go |
| Topics | workflowgo |
| GitHub | https://github.com/Temikus/denkeeper |
| License | Apache-2.0 |
| 语言 | Go |
收录时间:2026-05-19 · 更新时间:2026-05-19 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端