mathiasandClaude Opus 5 4038339727
CD / Lint / Test / Vet (push) Successful in 9s
CD / Build & Import (push) Skipped
CD / Deploy via GitOps (push) Skipped
fix(test): grade golangci-lint on its exit code, not on grepping its output
Found by an adversarial review of the same harness in template-go-web
(template-go-web#13). This copy had the identical defect.

The harness matched golangci-lint's human-readable summary to decide pass or
fail. Any failure that is not "found issues" -- bad config, unwritable TMPDIR,
OOM, or simply a future change to the output format -- produces non-matching
text and was scored as a pass.

That is the exact defect class this harness exists to end. It is the only gate
covering cmd/__PROJECT_NAME__, so a linter that dies leaves the entrypoint
unchecked with CI green.

golangci-lint exits 0 clean / 1 issues found / >1 the linter itself failed.
Now graded on that, with the >1 case reported as UNCHECKED rather than clean.

Also: a missing tool now fails instead of `exit 0` with zero assertions, which
was indistinguishable from a real pass to anything reading the exit code. And
Dockerfile joins the substituted file set -- it references the entrypoint path,
which is the one thing a rename has historically broken here.

Verified with a shimmed linter exiting 3: 3 passed, 1 failed. Normal run 4/4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:14:10 +02:00

PROJECT_NAME

Go agent built on Google ADK with a LiteLLM adapter for local model routing.

Quick start

cp .env.example .env
# edit .env with your LITELLM_API_KEY
go mod tidy
task run

Harness & workflow

Single harness: Claude Code + hyperguild — session-based (start a session, it works, it stops). No push-triggered dispatch. MCP connections live in .mcp.json: brain (knowledge) and gitea (issues/PRs — the audit trail); provide BRAIN_MCP_TOKEN and GITEA_MCP_TOKEN.

Work flows: issue → hyperguild session → PR (task check gate) → report-back comment on the issue → brain capture if the learning is durable. See AGENTS.md / CLAUDE.md for the full context, AGENT_BOUNDARIES.md for runtime scope.

Observability

Set OTLP_ENDPOINT=http://jaeger.d-ma.be:4318 to emit traces. Each invocation produces:

  • invoke_agent __PROJECT_NAME__ span
  • generate_content <model> child span with gen_ai.request.model attribute

Structure

cmd/__PROJECT_NAME__/   agent entrypoint
pkg/litellm/           OpenAI-compat ADK adapter + OTLP telemetry helper
S
Description
Go ADK agent template with LiteLLM adapter and OTLP telemetry
Readme
125 KiB
Languages
Go 54%
Shell 44.6%
Dockerfile 1.4%