neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Production-ready agents, your way.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Production-ready agents, your way.
Skills, scaffolder, or meta-agent — build agents on Google ADK, Buzz, or Hermes Agent with the workflow you already have.
nuvel is an open-source toolkit for building production-ready agents across the agent frameworks that matter — Google ADK, Buzz, and Hermes Agent. It ships in three shapes — knowledge skills, a CLI scaffolder, and an autonomous meta-agent — and you use whichever fits the way you already work.README 전문 보기 ↗Production-ready agents, your way.
Skills, scaffolder, or meta-agent — build agents on Google ADK, Buzz, or Hermes Agent with the workflow you already have.
nuvel is an open-source toolkit for building production-ready agents across the agent frameworks that matter — Google ADK, Buzz, and Hermes Agent. It ships in three shapes — knowledge skills, a CLI scaffolder, and an autonomous meta-agent — and you use whichever fits the way you already work.
The skills follow the Anthropic skills format, so they plug into the coding agent you already use: Claude Code, Codex, Cursor, OpenClaw, Hermess Agent, and any other agent that supports the format. The CLI stamps out a battle-tested skeleton tuned per framework — an opinionated 17-plugin chain for ADK, a leaner Buzz skeleton with Nostr relay and Bitcoin/Lightning tools, and a Hermes Agent skeleton with platform gateways. The meta-agent does it for you autonomously from a natural-language description.
| Framework | Flag | Knowledge skills | Where the agent runs |
|---|---|---|---|
| Google ADK | --framework adk (default) | 15 skills (agent patterns, tool creation, prompt engineering, callbacks/HITL, streaming, skill design, Composio Tool Router, workflow graphs, task delegation, long-horizon guardrails/sessions, cron isolation, org memory retrieval, self-improvement) | Your server (OpenRouter + LiteLLM) |
| Buzz | --framework buzz | Nostr relay, Bitcoin/Lightning tools, on-chain leaderboard | Your server (OpenRouter) |
| Hermes Agent | --framework hermes | Platform gateways (Telegram, Slack, Teams), skill-driven config | Your server (OpenRouter) |
--persona ships a SOUL.md / awakening pattern for agents meant to live for months and develop a stable character. Inspired by OpenClaw. (ADK only.)--with-composio wires the Composio Tool Router for one-line access to Gmail, GitHub, Slack, Notion, Calendar, and more. (ADK only.)--with-acp adds an Agent Client Protocol adapter (JSON-RPC over stdio, the protocol editors like Zed use to drive an agent as a subprocess) plus a local terminal CLI. Run it as an editor subprocess (python -m <pkg>.acp) or straight from the shell (python -m <pkg>.cli "…" one-shot, or a REPL). The adapter honors the editor's session: mcpServers passed in session/new (stdio / HTTP / SSE) are wired in as tools, the agent reads/writes through the editor's filesystem view (unsaved buffers included) when the client supports it, and sensitive tool calls are gated by an editor approve/deny prompt (session/request_permission, tunable via ACP_PERMISSION_MODE). Both entrypoints reuse the same plugin-wired Runner as the FastAPI server. (ADK only.)--with-slack, --with-telegram, --with-teams). See docs/superpowers/specs/2026-05-09-messaging-gateways-design.md. (ADK only.)
GATEWAY_MAX_ATTACHMENT_*) and uploads agent artifacts back to chat. See the per-channel README for details.nuvel ships with a built-in bot fleet management system for orchestrating Hermes-backed agents.
Single-bot operations:
nuvel bots create <name> [--skills <refs>] [--model <model>]
nuvel bots list
nuvel bots info <name>
nuvel bots chat <name> <message>
nuvel bots logs <name> [-n 50]
nuvel bots delete <name>
nuvel bots send <from> <to> <msg>
Skill discovery:
nuvel bots skills list [--category <theme>]
nuvel bots skills search <query>
Fleet deployment (multi-bot):
nuvel fleet deploy <manifest.yaml>
nuvel fleet list
nuvel fleet status <name>
nuvel fleet destroy <manifest.yaml>
nuvel fleet update-vision <fleet> <path>
Fleet manifests support VISION.md (shared constitution symlinked into every bot), a Manager bot with fleet governance skills, and per-bot cron routines.
Example manifest:
name: "my-company"
vision: |
# Fleet Constitution
All bots follow these shared rules...
manager:
name: manager-bot
model: anthropic/claude-sonnet-4
default_model: deepseek/deepseek-v4-flash
bots:
- name: triage-bot
skills: [customer/triage-agent]
routines:
- schedule: "0 8 * * 1-5"
task: "Review yesterday's logs"
Agent Plugins (agent-plugins.org v1.0.0) for integrating Nuvel OrgMemory into major AI coding and chat harnesses. Six plugins live under plugins/:
| Plugin | Harness | MCP Support | Skills |
|---|---|---|---|
| codex-plugin | OpenAI Codex CLI | ✅ streamable-http | setup, agent, review |
| claude-code-plugin | Anthropic Claude Code CLI | ✅ stdio | setup, agent, review |
| chatgpt-plugin | OpenAI ChatGPT (web/app) | ❌ | setup, workflows |
| claude-plugin | Anthropic Claude (web/app) | ❌ | setup, workflows |
| grokbot-plugin | xAI GrokBot (web/app/API) | ❌ | setup, workflows |
| cursor-plugin | Cursor IDE | ✅ stdio | setup, agent, review |
Drop a plugin into your agent's plugin directory, or reference the skills from your agent's skill loader — each is self-contained, independently versioned, and follows the agent-plugins.org packaging standard. See plugins/README.md for full docs.
Use the skills with Claude Code:
git clone https://github.com/Folken2/nuvel.git
# Skills live in nuvel/backends/adk/skills/ and a ready-made SKILL.md is at .claude/skills/nuvel/
Install the CLI from PyPI:
pip install nuvel-cli
The PyPI distribution is named
nuvel-cli(the barenuvelname was too close to an existing package). The CLI command and all imports staynuvel—pip install nuvel-clithennuvel agent create my-agent.
Or install from source (always available):
git clone https://github.com/Folken2/nuvel.git
cd nuvel
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
# Google ADK (default)
nuvel agent create k8s-monitor --description "checks pod health, queries logs, alerts on anomalies"
# Buzz
nuvel agent create k8s-monitor --framework buzz --description "..."
# Hermes Agent
nuvel agent create k8s-monitor --framework hermes --description "..."
You get a complete project at generated-agents/k8s-monitor/ — package layout, FastAPI server, framework-appropriate plugins, Dockerfile, Railway config, and tests.
The skeleton is free; the brain is yours. Edit:
tools/ (one file per tool), prompt/instructions.py, skills/, agent.py (wire tools + SkillToolset).tools/ (Nostr + Lightning tools), prompt/instructions.py, skills/, agent.py.tools/, prompt/instructions.py, skills/, agent.py (wire platform gateways).If you're driving Claude Code, the bundled skill at .claude/skills/nuvel/SKILL.md walks Claude through this step-by-step.
cd generated-agents/k8s-monitor
cp .env.example .env # add OPENROUTER_API_KEY
pip install -r requirements.txt
# ADK
DEV_MODE=true python run_adk.py
# Buzz
python server.py # or `python run_dev.py "<prompt>"` for a quick local test
# Hermes Agent
python server.py # or `python run_dev.py "<prompt>"` for a quick local test
The agent runs at http://localhost:8000. POST to /run_sse/ to talk to it.
nuvel run --dev # http://localhost:8000
Then describe the agent you want; nuvel will scaffold, generate, and validate it autonomously.
| Command | Description |
|---|---|
nuvel agent create <name> | Scaffold a new agent (default framework: adk) |
nuvel agent create <name> --framework <fw> | Pick framework: adk, buzz, or hermes |
nuvel agent create <name> --description "..." | Scaffold with a one-liner description |
nuvel agent create <name> --persona | (adk only) Self-evolving agent (SOUL.md, awakening flow) |
nuvel agent create <name> --with-composio | (adk only) Bundle ~1000 integrations via Composio Tool Router |
nuvel agent create <name> --with-slack | (adk only) Add a Slack Events API gateway (auto-enables --with-composio) |
nuvel agent create <name> --with-telegram | (adk only) Add a Telegram Bot webhook gateway |
nuvel agent create <name> --with-teams | (adk only) Add a Microsoft Teams bot bridge via Azure Bot Service |
nuvel agent create <name> --workflow | (adk only) Workflow-native root agent — an ADK 2.0 Workflow graph with task-mode nodes, typed contracts, and conditional routing |
nuvel agent create <name> --with-acp | (adk only) Make the agent ACP-compatible (Agent Client Protocol over stdio, python -m <pkg>.acp) and CLI-runnable (python -m <pkg>.cli) |
nuvel agent create <name> --with-eval | (adk only) Stamp a starter evalv2 suite into the agent (skills/default/eval/suite.yaml + a sample example) |
nuvel agent create <name> --output-dir ./agents | Override the output directory |
nuvel skills list [--framework <fw>] | List bundled knowledge skills for a framework |
nuvel skills search <term> [--framework <fw>] | Search skills by keyword |
nuvel doctor [--path <dir>] | Diagnose the install and the agent in cwd (env, deps, pricing) |
make install / make dev / make run / make dev-ui / make skills / make test are wired through to the same commands.
"A Kubernetes monitoring agent that checks pod health, queries logs, and alerts on anomalies."
Whichever shape you used, you end up with the same project:
generated-agents/k8s-monitor-agent/ — full project, ready to pip install and runget_pod_status, query_pod_logs, check_anomaliesk8s-alerting/SKILL.md with escalation patternsnuvel/
├── nuvel/
│ ├── agent.py # Meta-agent: LlmAgent with tools + SkillToolset
│ ├── cli.py # `nuvel` CLI (new / skills / run)
│ ├── run_adk.py # FastAPI server (launched by `nuvel run`)
│ ├── prompt/instructions.py # Meta-agent system prompt
│ ├── tools/ # scaffold, write_file, read_file, list_files, validate
│ ├── plugins/ # Meta-agent chain (12, via Makefile PLUGIN_FLAGS)
│ ├── config/ # LiteLLM/OpenRouter config
│ └── backends/ # Per-framework scaffolders + skills
│ ├── adk/ # Google ADK backend
│ │ ├── scaffold.py
│ │ ├── templates/ # Production skeleton for ADK agents
│ │ └── skills/ # ADK knowledge skills
│ ├── buzz/ # Buzz backend (Nostr relay + Lightning)
│ │ ├── scaffold.py
│ │ ├── templates/
│ │ └── skills/
│ └── hermes/ # Hermes Agent backend
│ ├── scaffold.py
│ ├── templates/ # Platform gateway skeleton
│ └── skills/
├── .claude/skills/nuvel/ # Claude Code SKILL.md for driving the CLI
├── pyproject.toml # Packaging + `nuvel` console script
└── generated-agents/ # Output directory
Each generated agent is a standalone, runnable project:
generated-agents/my-agent/
├── my_agent/
│ ├── agent.py # LlmAgent with SkillToolset
│ ├── prompt/ # Custom system prompt
│ ├── tools/ # Domain-specific tools
│ ├── skills/ # Domain skills (SKILL.md)
│ ├── contexts/ # Domain knowledge files
│ ├── plugins/ # Full production plugin chain
│ └── config/ # LiteLLM/OpenRouter config
├── run_adk.py # FastAPI server with auth + health checks
├── requirements.txt
└── .env.example
Run any generated agent:
cd generated-agents/my-agent
pip install -r requirements.txt
DEV_MODE=true python run_adk.py
Every environment variable a generated agent reads is documented inline in .env.example, grouped by subsystem (auth, plugins, providers, memory, cron, and more). It's copied into each scaffolded project from nuvel/backends/adk/templates/.env.example, so that file — not this README — is the canonical reference for what to configure.
Every generated agent ships with a full plugin chain — cross-cutting concerns that apply to all interactions without touching agent code.
| Plugin | Type | What it does |
|---|---|---|
| MemoryPlugin | Features | Markdown file-based long-term memory across sessions |
| CostGuardPlugin | Budget | Calculates USD cost per LLM call, enforces per-session budget limits |
| ContextWindowPlugin | Observability | Tracks context-window occupancy per response (tokens used / max / %) for live UI indicators |
| TracePlugin | Observability | Raw event JSONL + consolidated conversation JSON for eval pipelines |
| ContextFilterPlugin | Performance | Keeps last N invocations in context window (default: 10) |
| ConsoleLoggerPlugin | Observability | Color-coded terminal output for all lifecycle events |
| ToolEventsPlugin | Observability | Structured tool execution events for SSE streaming |
| ResiliencePlugin | Resilience | Circuit breaker and per-session rate limiting for tool calls |
| GuardrailsPlugin | Resilience | Halts runaway model/tool loops — no-progress and repeated-failure guards behind a shared halt latch |
| CronIsolationPlugin | Resilience | Headless tool-approval policy during scheduled cron runs; inert outside cron runs |
| CachePlugin | Performance | Session-scoped caching for specific tools with TTL |
| ReflectAndRetryToolPlugin | Resilience | Self-healing tool retry with LLM reflection (max 3) |
| SaveFilesAsArtifactsPlugin | Features | Saves user-uploaded files as session artifacts |
| RecordingsPlugin | Testing | Records LLM/tool interactions for ADK conformance testing; off unless NUVEL_RECORD_REPLAY=1 (its config is client-writable session state, so never enable it on a server) |
| ReplayPlugin | Testing | Replays recorded interactions instead of executing live calls; off unless |
The CostGuardPlugin tracks LLM costs using a pricing.json config file and optionally enforces per-session budget limits.
How it works:
pricing.jsoncost_usd per call, total_cost_usd in summary)COST_GUARD_BUDGET is set and the session cost exceeds it, further LLM calls are blocked with a friendly messageMaintaining pricing.json:
The pricing config lives at nuvel/plugins/pricing.json (or <agent>/plugins/pricing.json for generated agents). Edit it to add or update model pricing — no code changes needed:
{
"moonshotai/kimi-k2.5": {
"input": 0.0000005,
"output": 0.000002
},
"anthropic/claude-sonnet-4": {
"input": 0.000003,
"output": 0.000015
}
}
Keys are model IDs (matching what your LLM provider returns). The plugin auto-strips provider prefixes — openrouter/moonshotai/kimi-k2.5 matches moonshotai/kimi-k2.5. Prices are in USD per token.
To find current prices: check OpenRouter models or your provider's pricing page.
The ContextWindowPlugin knows the total context window of the selected model and reports how full it is after every response — the same "context used" signal Claude Code shows. It's read-only: it never mutates the request and never blocks.
After each LLM call it publishes a context_window snapshot into session state, so a frontend consuming the SSE stream can render a live indicator on every agent response:
{
"model": "anthropic/claude-sonnet-4",
"used_tokens": 12345,
"prompt_tokens": 12000,
"completion_tokens": 345,
"max_tokens": 200000,
"remaining_tokens": 187655,
"used_pct": 6.17,
"remaining_pct": 93.83
}
used_tokens prefers the provider's total_token_count (so reasoning/thinking tokens are included) and falls back to prompt + completion. When the model isn't in the config, percentages are omitted (max_tokens: null) unless CONTEXT_WINDOW_DEFAULT is set.
Maintaining context_windows.json:
Window sizes live at nuvel/plugins/context_windows.json (or <agent>/plugins/context_windows.json for generated agents) and use the same keys as pricing.json, so provider prefixes are auto-stripped (openrouter/anthropic/claude-sonnet-4 matches anthropic/claude-sonnet-4):
{
"anthropic/claude-sonnet-4": 200000,
"google/gemini-2.5-pro": 1048576
}
| Env var | Default | Effect |
|---|---|---|
CONTEXT_WINDOW_CONFIG | auto-detected | Path to a custom context_windows.json |
CONTEXT_WINDOW_DEFAULT | 0 (unknown) | Fallback window size for models not in the config |
CONTEXT_WINDOW_WARN_PCT | 0 (off) | Log a one-time warning once usage crosses this percent |
The trace system captures two layers:
traces/
2026-04-06_<session>.jsonl # Raw events (per-event, for debugging)
conversations/
2026-04-06_<session>.json # Consolidated record (per-conversation, for evals)
The consolidated JSON includes: full system prompt, user input, LLM thinking/reasoning, response, tool calls with args/results, token usage, cost, context-window occupancy (per call, plus a peak_context_tokens / peak_context_pct in the summary), and timing — everything an eval agent needs to score quality and drive improvements.
| Variable | Default | Description |
|---|---|---|
OPENROUTER_API_KEY | (required) | OpenRouter API key |
FAST_MODEL | openrouter/moonshotai/kimi-k2.5 | LLM model |
AGENTS_OUTPUT_DIR | ./generated-agents | Where agents are created |
DEV_MODE | false | In-memory sessions for dev |
PORT | 8000 | Server port |
API_KEY | (optional) | Bearer token auth |
SESSION_SERVICE_URI | (optional) | PostgreSQL for prod sessions |
| Variable | Default | Description |
|---|---|---|
COST_GUARD_BUDGET | 0 (unlimited) | Max USD per session. Set to e.g. 0.50 to cap spending |
COST_GUARD_PRICING | (bundled) | Path to custom pricing.json. Default uses the bundled file |
| Variable | Default | Description |
|---|---|---|
TRACE_ENABLED | true | Master on/off for all tracing |
TRACE_DIR | ./traces | Directory for JSONL + conversation trace files |
TRACE_DB | false | Also write traces to PostgreSQL (agent_traces table) |
LOG_FORMAT | text | json for production (structured), text for dev (colored) |
LOG_LEVEL | INFO | Logging level |
| Variable | Default | Description |
|---|---|---|
MEMORY_ENABLED | true | Enable/disable long-term memory |
MEMORY_DIR | ./memory | Directory for markdown memory files |
MEMORY_MAX_CORE_SIZE | 10000 | Max chars for core memory file |
MEMORY_MAX_TOPIC_SIZE | 5000 | Max chars per topic file |
| Variable | Default | Description |
|---|---|---|
TOOL_RATE_LIMIT | 5.0 | Tool calls per second, per session (token bucket) |
TOOL_RATE_BURST | 20 | Burst capacity for tool rate limiting, per session |
TOOL_RATE_LIMIT_TOTAL | 50.0 | Tool calls per second across all sessions (caps callers who open many sessions) |
TOOL_RATE_BURST_TOTAL | 200 | Burst capacity across all sessions |
PROTECTED_TOOLS | (none) | Comma-separated tools with circuit breaker |
CONTEXT_FILTER_KEEP | 10 | Prior invocations to keep in context window |
make test
Tests cover scaffold, file tools, validation, memory, cost guard, conversation traces, and end-to-end pipeline.
deploy_agent_tool pushes the
generated agent to Railway (or equivalent) and returns a live URL, so
non-technical users go from natural-language intent to a running agent
without leaving the conversationContributions are welcome — please read CONTRIBUTING.md before opening a PR. For security issues, see SECURITY.md.
MIT © Albert Folch
GATEWAY_MAX_ATTACHMENT_*GATEWAY_MAX_ATTACHMENT_*) and surfaces inline agent artifacts back to chat. Inline agent artifacts only; saved artifacts via tool_context.save_artifact(...) are surfaced on Slack and Telegram but not yet on the Teams sidecar. See the per-channel README for details./help, /new, /usage, /stop, /personality, /cron work the same way on every gateway. Add your own with one decorator and it's live on all channels. (ADK only.)30m), interval (every 2h), or cron-expression (0 9 * * *) schedules. Manage from chat (/cron add ...), HTTP (POST /cron/jobs), or natural language (the cronjob tool). Delivery to origin chat, local file, or any configured Slack/Telegram channel. (ADK only.)~/.nuvel/personalities/<name>.md and switch with /personality <name> per session. Lighter than --persona and composes with it. (ADK only.)GATEWAY_TRANSCRIBE_AUDIO=1 and Slack/Telegram voice notes are transcribed via Whisper (OpenAI or Groq) before reaching the agent. (ADK only.)SkillCuratorPlugin watches each run and proposes new skills (or patches to existing ones) to ~/.nuvel/skill-proposals/ for human review. Never auto-applies. (ADK only.)nuvel doctor — one command diagnoses the install and any generated agent in your cwd: missing env vars, broken deps, framework SDKs, Docker reachability.nuvel traces list | show | stats | errors | Inspect JSONL trace logs across all local agents |
nuvel pricing list | sync | add <model> | Sync pricing.json against OpenRouter |
nuvel dashboard [--demo] | Open a local web dashboard over your trace logs (also shows nuvel.skill_run/1 skill runs and per-step error rates) |
nuvel eval score | report | worst | drift | Production trace scoring — score traces (heuristics + LLM judge), surface worst runs, detect drift |
nuvel evalv2 init <skill> [--name <n>] [--description <d>] [--force] | Skill evaluation — stamp a starter eval/ suite into a skill |
nuvel evalv2 list | List skills that ship an eval/ suite |
nuvel evalv2 run <skill> [--model <m>] [--json] [--save-baseline] | Run a skill's eval suite against a fresh executor and save the result |
nuvel evalv2 compare <skill> [--json] [--threshold N] | Diff a skill's latest run against its baseline; exits 2 on regression |
nuvel plugins list | Discover Agent Plugins in the configured plugin_dirs (NUVEL_PLUGIN_DIRS, default ./plugins), listing each plugin's skills and MCP servers |
nuvel plugins load <dir> | Load and inspect a single plugin directory |
nuvel plugins config | Show the current plugin directory configuration |
nuvel-mcp serve [--skills-dir <dir>] | Standalone, dependency-free Skills MCP server (uvx nuvel-mcp serve --skills-dir …); nuvel mcp serve delegates to it, and the old nuvel.mcp import is a deprecated shim for nuvel_mcp |
nuvel run | Run the meta-agent (production-style server) |
nuvel run --dev | Same, with in-memory sessions for dev |
NUVEL_RECORD_REPLAY=1| SkillCuratorPlugin | Features | Proposes SKILL.md files from observed tool usage; opt-in, default off (NUVEL_SKILL_CURATOR) |
| SiblingRunner | Features | Drains fire-and-forget memory-review sibling runs at shutdown; no-op until NUVEL_MEMORY_REVIEW_FORK=1 |