Skip to content
cccskills
FreePublished on GitHub

debugging-guide

Use when debugging Go errors, test failures, or unexpected behavior — step-by-step diagnosis approach

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

harness9 调试指南

诊断顺序

遇到问题时,按以下顺序排查:

1. 编译错误

go build ./...

常见原因:

  • 未使用的 import → 删除或添加 _ blank import
  • 类型不匹配 → 检查接口实现是否完整
  • 循环依赖 → 将接口定义移到使用者侧包中

2. 测试失败

# 详细输出
go test -v ./internal/engine/

# 单个测试
go test -v -run TestAgentLoop ./internal/engine/

# 带 race detector
go test -race ./...

3. 运行时 panic

查看完整 goroutine stack:

go run ./cmd/harness9 2>&1 | head -100

nil pointer panic 通常来自:

  • 未初始化的 map(用 make(map[K]V) 初始化)
  • 接口值为 nil 但调用了方法

4. Agent 行为异常

LLM 不调用工具: 检查工具的 Definition() 描述是否清晰,JSON Schema 是否正确。

工具执行失败: 查看 ToolResult.IsError 和 Output 字段,错误信息会回传给 LLM。

无限循环: 检查 WithMaxTurns 配置,默认 50 Turn。

常用调试技巧

打印 System Prompt

在 internal/context/builder.go 的 Build() 方法末尾临时添加:

fmt.Fprintf(os.Stderr, "=== SYSTEM PROMPT ===\n%s\n===================\n", prompt)

检查工具注册

在 registry.Execute 前打印可用工具列表:

for _, def := range registry.GetAvailableTools() {
    fmt.Fprintf(os.Stderr, "tool: %s\n", def.Name)
}

Provider 请求/响应

如需查看实际 API 请求,在 internal/provider/openai.go 中打印消息列表。

harness9 特有问题

Anthropic Provider:user/assistant 必须严格交替

症状:400 Bad Request 或 invalid_request_error

原因:Anthropic Messages API 禁止连续 assistant 消息。

修复:检查 contextHistory 的消息顺序,确保 system→user→assistant→user→assistant 交替。

路径沙箱拒绝访问

症状:工具返回 路径超出工作区范围 或类似错误

原因:路径包含 ../ 或绝对路径指向启动目录之外。

修复:Agent 应使用相对于启动目录的路径,如 internal/engine/agent_loop.go 而非 /absolute/path/...。

Skills 未加载

症状:Agent 不知道有 Skills 可用

检查:

  1. skills/ 目录是否在项目根目录(启动目录)下
  2. 每个 Skill 是否在独立子目录中,且子目录内有 SKILL.md 文件
  3. SKILL.md 是否包含 name 和 description frontmatter 字段
  4. 启动日志中是否有 [skills] warn 输出

正确的目录结构示例:

skills/
├── go-coding-standards/
│   └── SKILL.md      ← 必须是这个文件名
└── debugging-guide/
    └── SKILL.md

go vet 常见 warning

Warning含义修复
printf 格式不匹配%s 传入了非 string 类型修正格式或类型
unreachable codereturn 后有代码删除死代码
loop variable capturedgoroutine 捕获了循环变量传参而非捕获

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use when asked about harness9 architecture, module design, or how components interact — explains the system design

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

Feature auto-development — clarify requirements, generate spec, dispatch dev sub-agent to implement and merge into current branch

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

commit

Free

Use when the user invokes /commit or asks to commit changes, after a code review has been completed and the changes are confirmed ready to stage and commit to git.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

cr

Free

Use when the user invokes /cr, requests a code review, or before committing to verify correctness, security, and quality of new or modified code in the working tree.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

Use when writing or reviewing Go code — explains harness9 project coding conventions and patterns

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

pr

Free

Use when the user invokes /pr or asks to push changes and open a pull request, after commits are ready to be pushed to a remote branch and merged into the main branch.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

See all skills by ZhangShenao

Report a problem with this skill