AI Skill Hub 强烈推荐:智能AI工作流 是一款优质的Agent工作流。AI 综合评分 8.0 分,在同类工具中表现稳健。如果你正在寻找可靠的Agent工作流解决方案,这是一个值得深入了解的选择。
智能AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
智能AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:pip 安装(推荐)
pip install victrola
# 方式二:虚拟环境安装(推荐生产环境)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install victrola
# 方式三:从源码安装(获取最新功能)
git clone https://github.com/haileyok/victrola
cd victrola
pip install -e .
# 验证安装
python -c "import victrola; print('安装成功')"
# 命令行使用
victrola --help
# 基本用法
victrola input_file -o output_file
# Python 代码中调用
import victrola
# 示例
result = victrola.process("input")
print(result)
# victrola 配置文件示例(config.yml) app: name: "victrola" debug: false log_level: "INFO" # 运行时指定配置文件 victrola --config config.yml # 或通过环境变量配置 export VICTROLA_API_KEY="your-key" export VICTROLA_OUTPUT_DIR="./output"
[!WARNING] No guarantees about security are made. I have reasonable confidence that things like secrets cannot be accessed by the agent (unless, of course, you allow it access through one of its custom tools...), but again make no guarantees. Don't do stupid things with agents. Don't give agents access to sensitive information. Do we really need to warn about anything else? You are also trusting the Deno sandbox. For a truly hardened setup, you should absolutely be executing code in something like Firecracker VMs, not Deno alone.
A general-purpose personal AI agent harness. You chat with it through a local web interface or through Discord. It writes and runs code to do tasks for you!
Victrola is a single-operator agent runtime. You (the operator) drive it through chat. The agent has persistent memory, a scheduler, and can write its own tools in TypeScript that run in a sandboxed Deno process. You can also pre-write your own tools in Python using a decorator.
Victrola supports Anthropic, OpenAI, or any OpenAPI compatible endpoint like Ollama or llama-cpp.
git clone https://github.com/haileyok/victrola.git
cd victrola
uv sync --frozen
Victrola ships as a single Docker image published to ghcr.io/haileyok/victrola. The image bundles Python, Deno, Playwright Chromium, and the pre-built frontend — everything needed to run the full agent.
If you want to build the image yourself instead of pulling from ghcr.io:
```bash docker build -t victrola .
```
The Dockerfile uses a multi-stage build: Stage 1 compiles the React frontend with Node, Stage 2 assembles the Python runtime with Deno and Playwright Chromium.
```bash
uv run python main.py serve # web interface at http://localhost:8000
uv run python main.py main # headless; runs the scheduler + Discord bot only
All commands accept --model-api, --model-name, --model-api-key, --model-endpoint to override config at launch.
WORKSPACE_DIR=data/workspace
WORKSPACE_MAX_SIZE_MB=1024
cp .env.example .env
The Docker image sets sensible container defaults: - WEB_HOST=0.0.0.0 (binds all interfaces so the port mapping works) - WEB_PDF_CHROMIUM_NO_SANDBOX=1 (Chromium can't use its namespace sandbox as non-root in a container)
Override anything else in your .env file — model config, Discord/Signal settings, embeddings endpoint, etc.
These are not included in the compose file because they're deployment-specific. If you use them, run them alongside Victrola:
EMBEDDING_ENDPOINT at your Ollama instance. If Ollama isn't running, memory degrades gracefully to keyword-only search.SIGNAL_SERVICE at it.Copy .env.example to .env and fill in. Minimal setup for Anthropic:
MODEL_API=anthropic
MODEL_API_KEY=sk-ant-...
MODEL_NAME=claude-sonnet-4-5-20250929
For local Ollama (Gemma 4, etc.):
MODEL_API=openapi
MODEL_ENDPOINT=http://localhost:11434/v1
MODEL_NAME=gemma4:26b-moe
MODEL_API_KEY=ollama # Ollama ignores the value; just can't be empty
Sub-agent (used by summarize and anything else that needs a lighter model) defaults to the same key as the main model if left empty:
SUB_MODEL_API=anthropic
SUB_MODEL_NAME=claude-haiku-4-5-20251001
Umans AI is a subscription-based inference provider with an Anthropic-compatible endpoint. To use it:
MODEL_API=umans
MODEL_API_KEY=sk-...
MODEL_NAME=umans-glm-5.2
Available models include umans-glm-5.2, umans-kimi-k2.7, umans-coder, and umans-flash.
Embeddings (for memory search and RAG recall) use a local Ollama instance:
EMBEDDING_ENDPOINT=http://localhost:11434
EMBEDDING_MODEL=nomic-embed-text
EMBEDDING_DIMENSIONS=768
If Ollama isn't running, memory writes store NULL embeddings and searches fall back to keyword-only.
You can chat with the agent from Discord in addition to the web interface. Each thread in a dedicated channel is a chat session.
Setup (one-time):
1. discord.com/developers/applications → New Application → "Victrola" 2. Bot tab → Reset Token → copy (save as DISCORD_BOT_TOKEN secret in the web interface) 3. Bot tab → Privileged Gateway Intents → enable "Message Content Intent" (required — otherwise the bot can't read message text) 4. OAuth2 → URL Generator: - Scopes: bot - Bot Permissions (principle of least privilege): - View Channel - Read Message History - Create Public Threads - Send Messages in Threads - Visit the generated URL → pick your server → Authorize 5. In your server, create a text channel (default name victrola-sessions — configurable via DISCORD_SESSIONS_CHANNEL in .env)
Usage:
The bot only starts when DISCORD_BOT_TOKEN is configured. Without it the web interface and scheduler still run normally.
You can chat with the agent from Signal in addition to the web interface. Signal becomes the default notification channel when configured — scheduled task results and notify.send calls route there automatically.
Requires signal-cli-rest-api running as an external service. This is a REST wrapper around signal-cli that victrola polls for incoming messages and uses to send responses.
Setup:
1. Run signal-cli-rest-api via Docker:
docker run -d \
-e MODE=normal \
-p 8080:8080 \
-v ./signal-cli-config:/home/.local/share/signal-cli \
bbernhard/signal-cli-rest-api:latest
Do NOT set AUTO_RECEIVE_SCHEDULE — the bot polls /v1/receive itself, and the auto-receive schedule would consume messages out from under it, causing permanent message loss.
3. Configure .env:
SIGNAL_SERVICE=127.0.0.1:8080
SIGNAL_BOT_PHONE=+1234567890
SIGNAL_OPERATOR_PHONE=+0987654321
SIGNAL_OPERATOR_PHONE can be a phone number or a Signal UUID — username-only accounts are matched via sourceUuid.
signal-persistent) that survives restarts.Usage:
notify.signal and notify.send tools work independently of the chat loop, so you can send notifications even when the bot isn't running.The agent can create standalone Google Meet links via meet.create_link. This uses the Google Meet REST API (spaces.create) to generate a meeting space and return a meeting_uri like https://meet.google.com/abc-mnop-xyz. The link is standalone — it is not tied to a calendar event, so there is no duplication when the real event lives in Fastmail or another calendar.
Return value: { success, meeting_uri, meeting_code, space_name }. The meeting_uri is the full join URL; meeting_code is the short code (e.g. abc-mnop-xyz); space_name is Google's internal resource ID. Both meeting_code and space_name may be null.
One-time setup:
1. Go to Google Cloud Console → create (or select) a project 2. Enable the Google Meet API (APIs & Services → Library → search "Google Meet") 3. APIs & Services → OAuth consent screen → configure as External, add your email as a test user 4. APIs & Services → Credentials → Create Credentials → OAuth client ID (Application type: Web application). Add https://developers.google.com/oauthplayground as an authorized redirect URI. 5. Obtain a refresh token with the https://www.googleapis.com/auth/meetings.space.created scope. The easiest way is the OAuth Playground: - Click the gear icon (top right) → check "Use your own OAuth credentials" → paste your client ID and secret from step 4 - In the left panel, find "Google Meet API v2" → expand → check meetings.space.created - Click "Authorize APIs" → grant consent → click "Exchange authorization code for tokens" - Copy the refresh_token value 6. In the victrola web interface → Secrets page, add three secrets: - GOOGLE_CLIENT_ID — your OAuth client ID - GOOGLE_CLIENT_SECRET — your OAuth client secret - GOOGLE_REFRESH_TOKEN — the refresh token from step 5
Note on token expiration: If the OAuth consent screen is left in "Testing" status, Google refresh tokens expire after 7 days. For durable use, publish the consent screen (requires verification if using sensitive scopes — but meetings.space.created is non-sensitive, so publishing is straightforward). If links stop working after a week, this is the likely cause.
The agent can now call meet.create_link from execute_code. The optional access_type parameter controls who can join without knocking: - open (default) — anyone with the link can join without knocking - trusted — org members and invited users join without knocking; others must knock - restricted — only invited users join without knocking; everyone else must knock
Troubleshooting: If the tool returns an OAuth error, the refresh token may have expired or been revoked. Re-authorize via the OAuth Playground (step 5) and update the GOOGLE_REFRESH_TOKEN secret.
When a conversation grows too large, older messages are summarized by the sub-agent into a single summary turn. The most recent ~25% of the threshold is kept as raw messages; everything older is replaced with the summary. Compaction checkpoints are persisted to the store, so summaries are reused on reload instead of re-summarizing.
The threshold is configurable in .env:
COMPACT_THRESHOLD_CHARS=240000 # ~60k tokens at ~4 chars/token
Requires a sub-agent LLM (SUB_MODEL_* config). If no sub-agent is configured, compaction is a no-op and conversations grow unbounded.
Override the Umans API base URL if needed:
UMANS_ENDPOINT=https://api.code.umans.ai
cd web && npm run dev ```
The Vite dev server runs at http://localhost:5173 with API requests proxied to the backend on port 8000. For production, build the frontend (cd web && npm run build) and it will be served directly by FastAPI at http://localhost:8000.
高质量的AI工作流项目,具有较强的扩展性和自定义能力
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
总体来看,智能AI工作流 是一款质量优秀的Agent工作流,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。
| 原始名称 | victrola |
| 原始描述 | 开源AI工作流:A self-modifying, TUI and Discord-facing, AI agent harness with parallel tool ca。⭐26 · Python |
| Topics | aiagentpythonllm |
| GitHub | https://github.com/haileyok/victrola |
| License | MIT |
| 语言 | Python |
收录时间:2026-06-25 · 更新时间:2026-06-26 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端