Errly——轻量级自托管错误监控
专为AI代理时代打造。 Errly是一个自托管的错误监控系统,旨在与人工智能代理无缝协作,而不仅仅是人类。您的AI代理可以读取错误、跟踪堆栈跟踪、搜索问题,并通过MCP自主解决这些问题,而您的团队则可以从干净的web仪表板上查看所有内容。
加入小型团队和独立开发人员,他们希望在没有SaaS价格标签的情况下具有可观察性,以及可以根据他们看到的内容采取行动的人工智能代理。

为什么是Errly?
大多数错误监控工具都是为人类点击仪表板而构建的。Errly是不同的:
- MCP本地 --AI代理(Claude、Cursor等)可以直接通过模型上下文协议列出、搜索、读取和解决问题
- 包含技能档案 --下降
skill/在代理的上下文中,它立即知道如何安装、集成和操作Errly - Claude代码斜线命令 —
/install-errly,/implement-sdk,/use-mcp让你的人工智能助手一步一步地指导你 - 简单REST API --易于代理和人类解析的结构化JSON响应
- 自托管 --您的错误数据保留在您的基础设施上,而不是第三方SaaS上
- 轻量级 --单Go二进制,SQLite存储,无需管理依赖关系
______________________________________________________________________
使用AI代理安装——一步到位
有克劳德代码、光标或任何人工智能代理吗?只需说:
阅读 https://raw.githubusercontent.com/AsYourWish-ai/Errly/main/agent_install.md 并做到这一点。
代理将检查先决条件、启动服务器、运行集成测试、验证所有API终结点,并在Errly就绪时返回报告。
______________________________________________________________________
目录
- 走 - python - Types/Next.js
______________________________________________________________________
1.快速入门
选项A——安装脚本(推荐)
curl -fsSL https://raw.githubusercontent.com/AsYourWish-ai/Errly/main/install.sh | bash生成一个API密钥,启动服务器,并验证它是否正常-所有这些都在一个步骤中完成。
选项B——一艘班轮
ERRLY_API_KEY=your-secret-key docker compose up -d服务器启动时间 http://localhost:5080
常用命令
make install # guided first-time install
make up # start server
make down # stop server
make logs # tail logs
make dev # dev mode with auto-rebuild从源代码构建
cd src/server
go build -o errly-server .
ERRLY_API_KEY=your-secret-key ./errly-server______________________________________________________________________
2.仪表板
打开 http://localhost:5080 在您的浏览器中。
特征:
- 统计栏——总计/未解决/已解决/已忽略/事件
- 带有级别徽章、项目、环境、计数、最后一次看到的问题列表
- 详细信息面板——堆栈跟踪、最近事件、标签、元数据
- 按项目、环境、状态筛选
- 搜索问题
- 解决/忽略/重新打开操作
- 每30秒自动刷新一次
- API密钥存储在
localStorage
______________________________________________________________________
3.安装SDK
Go SDK
go get github.com/AsYourWish-ai/Errly/sdk/go@v1.0.0import errly "github.com/AsYourWish-ai/Errly/sdk/go"
client := errly.New(
"http://localhost:5080",
"your-secret-key",
errly.WithProject("my-api"),
errly.WithEnvironment("production"),
errly.WithRelease("v1.0.0"),
)
defer client.Flush()本地/monorepo安装:
# go.mod
replace github.com/AsYourWish-ai/Errly/sdk/go => ./sdk/go______________________________________________________________________
开发包
pip install errly
# With framework integrations
pip install "errly[fastapi]"
pip install "errly[flask]"from errly import Errly
errly = Errly(
url="http://localhost:5080",
api_key="your-secret-key",
project="my-service",
environment="production",
release="v1.0.0",
)本地安装:
pip install -e ./sdk/python______________________________________________________________________
Types/Next.js SDK
npm install @errly/sdk// lib/errly.ts
import { Errly } from '@errly/sdk'
export const errly = new Errly({
url: process.env.NEXT_PUBLIC_ERRLY_URL!, // http://localhost:5080
apiKey: process.env.ERRLY_API_KEY,
project: 'my-web-app',
environment: process.env.NODE_ENV,
release: process.env.NEXT_PUBLIC_RELEASE,
})本地安装:
{ "dependencies": { "@errly/sdk": "file:./sdk/ts" } }______________________________________________________________________
4.MCP(用于AI代理)
一次性构建MCP映像:
docker build -f Dockerfile.mcp -t errly-mcp .添加到MCP配置(.mcp.json 或克劳德桌面设置):
{
"mcpServers": {
"errly": {
"command": "docker",
"args": [
"run", "-i", "--network", "host",
"-e", "ERRLY_URL=http://localhost:5080",
"-e", "ERRLY_API_KEY=your-secret-key",
"errly-mcp"
]
}
}
}可用的MCP工具:
| 工具 | 说明 |
|---|---|
list_issues | 列出按状态/项目/env筛选的问题 |
get_issue | 获取完整的问题详细信息+最后一个事件 |
get_issue_events | 使用堆栈跟踪获取最近发生的事件 |
search_issues | 按关键字搜索问题 |
resolve_issue | 解决、忽略或重新打开问题 |
get_stats | 过去24小时内的问题和事件总数 |
示例提示:
- _“显示生产中所有未解决的错误”_
- _“查找与付款相关的错误”_
- _“解决问题abc123”_
- _“过去24小时内发生了多少错误?”_
______________________________________________________________________
5.SDK使用
走
// Capture an error
if err := doSomething(); err != nil {
client.CaptureError(ctx, err)
}
// Capture a message
client.CaptureMessage(ctx, "warning", "Payment service degraded")
// Set user context
client.SetUser(&errly.UserInfo{ID: "123", Email: "user@example.com"})
// Add a breadcrumb
client.AddBreadcrumb("database", "query executed", "info")
// HTTP middleware — auto-captures panics
http.ListenAndServe(":5080", client.Middleware(myHandler))python
# Capture an exception
try:
risky_operation()
except Exception as e:
errly.capture_exception(e)
# Capture a message
errly.capture_message("Payment service slow", level="warning")
# Set user context
errly.set_user(user_id="123", email="user@example.com")
# Add a breadcrumb
errly.add_breadcrumb("API call to payment", category="http")
# FastAPI integration
app = errly.instrument_fastapi(app)
# Flask integration
app = errly.instrument_flask(app)
# Flush before shutdown
errly.flush(timeout=5)Types/Next.js
// Capture an error
errly.captureError(new Error('Something broke'))
// Capture a message
errly.captureMessage('Checkout slow', 'warning')
// Set user context
errly.setUser({ id: '123', email: 'user@example.com' })
// Add a breadcrumb
errly.addBreadcrumb('button clicked', 'ui')
// app/global-error.tsx
'use client'
export default function GlobalError({ error }: { error: Error }) {
errly.captureError(error)
return
Something went wrong
}
// Pages Router — API route wrapper
export default errly.withNextJS(async function handler(req, res) {
res.json({ ok: true })
})
// App Router — Server Action wrapper
const createUser = errly.withAction(async (data: FormData) => {
// errors auto-captured
})
// React Error Boundary
import { createErrorBoundaryHandler } from '@errly/sdk'
______________________________________________________________________
6.REST API
除以下端点外的所有端点 POST /api/v1/events 要求 X-Errly-Key 头球
GET / — Web dashboard UI
POST /api/v1/events — Ingest event (SDK)
GET /api/v1/issues — List issues (?status=&project=&env=&limit=&offset=)
GET /api/v1/issues/:id — Get issue
GET /api/v1/issues/:id/events — Get issue events
GET /api/v1/issues/search?q= — Search issues
PUT /api/v1/issues/:id/status — Update status {"status":"resolved"}
GET /api/v1/stats — Statistics (?project=)
GET /api/v1/projects — List distinct project keys
GET /api/v1/environments — List distinct environment values
GET /healthz — Health check______________________________________________________________________
7.配置
| 环境变量 | 默认值 | 描述 |
|---|---|---|
ERRLY_ADDR | :5080 | 服务器侦听地址 |
ERRLY_DB_PATH | ./errly.db | SQLite数据库路径 |
ERRLY_API_KEY | _(无)_ | API密钥- 设置这个! |
ERRLY_RATE_LIMIT | 100 | 每个IP的最大摄取请求数/分钟 |
ERRLY_AUTO_REMOVE_RESOLVED | false | 问题解决后自动删除 |
ERRLY_URL | http://localhost:5080 | MCP→ 服务器URL |
______________________________________________________________________
8.项目结构
Errly/
├── src/
│ ├── server/ Go HTTP server + dashboard UI (SQLite)
│ └── mcp/ MCP server for AI agents (Go)
├── sdk/
│ ├── go/ Go SDK
│ ├── python/ Python SDK
│ └── ts/ TypeScript / Next.js SDK
├── skill/ Agent skill definitions (see below)
├── Dockerfile.server
├── Dockerfile.mcp
├── docker-compose.yml
└── .mcp.json MCP config (Claude Code / Claude Desktop)______________________________________________________________________
9.代理技能
这 skill/ 文件夹包含AI代理的指令文件(Claude Code、Claude Desktop、Cursor等)。每个文件都描述了代理应如何帮助用户完成特定任务。
| 技能档案 | 目的 |
|---|---|
skill/install-errly.md | 指导代理安装、启动和验证Errly服务器 |
skill/implement-sdk.md | 引导代理检测项目堆栈并集成SDK |
skill/use-mcp.md | 指导客服设置MCP,并在AI聊天中使用Errly工具 |
Claude代码--斜线命令
此仓库还提供预构建的slash命令 .claude/commands/.在Claude Code中打开项目并运行:
/install-errly — set up the Errly server
/implement-sdk — integrate the SDK into your project
/use-mcp — connect an AI agent via MCP______________________________________________________________________
支持
构建和维护这个项目——包括所有人工智能辅助开发——需要真正的代币。如果Errly为您节省时间,一杯咖啡将有助于保持代币流动!

