代理商c
项目状态:实验,草稿
自主AI代理的实验性任务范围身份和认证。
问题
如今,人工智能代理借用人工凭据,使用在并发任务中共享的静态API密钥,并产生无法区分哪个代理做了什么或授权了它的审计跟踪。当计划代理产生子任务时,每个代理都继承父代的完全权限,而不是最小的子集。对于从人类授权者通过每个中间代理到叶子操作的委托,没有一种标准的机制来跟踪临时、有范围、可审计的凭据。
AgentID的工作原理
AgentID通过为每个代理工作单元颁发的短期作用域凭据引入任务标识JWT。人工(或父任务)创建具有特定权限的任务凭据,表示为 tool:resource:action 范围。代理使用此JWT通过MCP代理调用工具,该代理验证令牌、检查范围、转换上游API的凭据,并在审计跟踪中记录每个操作。子任务的作用域比其父任务窄,在整个委托树中强制执行最小权限。
安装
go install github.com/samudary/agentid/cmd/agentid@latest
# Or from a local source
go install ./cmd/agentid配置
这里的示例基于通过代理和MCP与Github API交互。很快将添加更多适配器。
cp configs/example-gateway.yaml gateway.yaml
export GITHUB_TOKEN=ghp_your_token_here启动服务器
agentid serve --config gateway.yaml创建任务凭据
agentid task create \
--authorizer "human:you@company.com" \
--bundle code-contributor \
--purpose "implement feature" \
--ttl 30m \
--config gateway.yaml将其与MCP代理一起使用
# List available tools
curl -X POST http://localhost:8080/mcp \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
# Call a tool
curl -X POST http://localhost:8080/mcp \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"github_get_file","arguments":{"owner":"samudary","repo":"agentid","path":"README.md"}},"id":2}'检查审计跟踪
agentid audit tail --config gateway.yaml撤销凭证
agentid task revoke --reason "done" --config gateway.yaml核心概念
任务完整性
每个代理任务都会收到自己的JWT凭据,该凭据具有唯一的UUID v7标识符、明确的作用域和有界的生存期。凭据在任务开始时生成,在任务结束或到期时终止。没有长寿的代币。如果需要更多时间,父任务将创建一个新的子任务。
范围缩小
权限使用该格式 tool:resource:action (例如。, github:repo:read).当父任务委托给子任务时,子任务的范围必须等于或小于父任务的范围。通配符段(*)可以用特定值替换,但特定值永远不能用通配符替换。这在整个委托树中强制执行最小特权。
代表团链
每个JWT都带有从授权工作的人到每个中间任务到当前任务的完整授权来源。该链嵌入在令牌本身中,因此任何操作都可以追溯到其人类授权者,而无需外部查找。每个链接都记录了在该委托步骤中是否缩小了范围。
范围捆绑
在网关配置中定义的命名作用域组(例如。, code-contributor 捆绑包 github:repo:read, github:repo:write, github:pulls:write, github:actions:read).捆绑可以防止范围疲劳,并有助于减轻猜测权限数组或授予过于宽泛的通配符的倾向。在JWT编码之前,捆绑包被扩展到粒度范围;它们是一种配置便利,而不是运行时概念。
MCP代理
代理验证任务JWT,检查作用域授权,转换上游API的凭据(代理永远看不到像GitHub PAT这样的上游令牌),并记录每个操作。它通过JSON-RPC 2.0(MCP协议)公开工具,使代理能够发现可用工具并以编程方式调用它们。
建筑
- 代理/CLI(任务JWT)
- ---MCP(JSON-RPC 2.0)
- ------>AgentID代理(JWT验证、范围检查、身份验证转换、审计日志)
- ---上游API
- ------>Github等。
规格
所提出的身份模型和范围语义记录如下:
与MCP客户端一起使用
AgentID通过JSON-RPC 2.0使用标准MCP,这意味着任何MCP客户端都可以与之通信。唯一特定于AgentID的部分是将任务JWT作为承载令牌传递。
import (
"github.com/mark3labs/mcp-go/client"
"github.com/mark3labs/mcp-go/client/transport"
"github.com/mark3labs/mcp-go/mcp"
)
mcpClient, _ := client.NewStreamableHttpClient(
"http://localhost:8080/mcp",
transport.WithHTTPHeaders(map[string]string{
"Authorization": "Bearer " + taskJWT,
}),
)
defer mcpClient.Close()
mcpClient.Start(ctx)
tools, _ := mcpClient.ListTools(ctx, mcp.ListToolsRequest{})
result, _ := mcpClient.CallTool(ctx, mcp.CallToolRequest{
Params: mcp.CallToolParams{
Name: "github_get_file",
Arguments: map[string]any{
"owner": "samudary",
"repo": "agentid",
"path": "README.md",
},
},
})看 一个完整的工作示例。
CLI参考
agentid serve --config gateway.yaml
agentid task create --authorizer --scopes --ttl --config gateway.yaml
agentid task create --authorizer --bundle --ttl --config gateway.yaml
agentid task inspect --config gateway.yaml
agentid task revoke --reason --config gateway.yaml
agentid scopes list-bundles --config gateway.yaml
agentid scopes expand-bundle --config gateway.yaml
agentid audit query --task --since --config gateway.yaml
agentid audit tail --config gateway.yaml许可证
Apache 2.0
