feat: project-webhook — HTTP endpoint to trigger new-project from claude.ai #10
Closed
opened 2026-05-14 13:56:23 +00:00 by mathias
·
1 comment
No Branch/Tag Specified
main
fix/pipeline-writes-158
fix/edit-path-io-192
fix/create-regular-188
fix/guard-special-179
fix/linkcheck-keeps-write-178
fix/write-dir-redirect-173
fix/tunnel-detect-174
fix/pipeline-root-157
w3/154-mcp-auth-wiring
fix/tunnel-traversal
test/in-brain-targets-171
fix/brain-scan-root-157
fix/graph-wiki-root-157
fix/vectorstore-root-157
fix/notes-root-157
fix/search-root-157
fix/brainwide-root-157
fix/raw-symlinks-153
feat/symlink-tripwire-157
fix/rest-auth-149
fix/123-brain-edit-envelope-check
feat/106-page-aware-extraction
fix/105-source-drift-on-main
fix/104-surface-merge-conflicts-on-main
agent/b1-compile-on-ingest
agent/104-surface-merge-conflicts
agent/105-source-drift
agent/107-loud-unconfigured-alerting
feat/brain-read-edit
fix/capture-i1-refusal-names-target
renovate/configure
feat/consolidate-single-harness
icebox/cmd-routing
feat/brain-pending-promote
fix/close-session-classification-refresh
fix/capture-summarywriter
v0.24.0
v0.23.1
v0.23.0
v0.22.0
v0.21.1
v0.21.0
v0.20.1
v0.20.0
v0.19.1
v0.19.0
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.0
v0.16.1
v0.16.0
v0.15.0
v0.14.0
v0.13.2
v0.13.1
v0.13.0
v0.12.1
v0.12.0
v0.11.2
icebox/cmd-routing-2026-07-01
v0.11.1
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Labels
Clear labels
agent/ready
blocked/client
blocked/supplier
blocked/upstream
risk/high
risk/low
risk/medium
size/l
size/m
size/s
size/xs
status:dispatch
status:dispatched
status:review
status:reviewing
type/chore
type/decision
type/docs
type/feat
type/fix
type/ops
type/research
type/test
Meets the agent-ready contract; authorizes unattended execution
Waiting on the client
Waiting on a supplier
Waiting on an upstream project or vendor
Irreversible, security-relevant, or control plane
Reversible, local, test-covered
Touches shared state, deploys or data
Too big - split it
Under two days
Under half a day
Under an hour
Maintenance, no behaviour change
Human decision required; never agent/ready
Documentation only
New capability
Corrects broken behaviour
Infrastructure, deploy, runtime
Investigate; output is a finding, not code
Test coverage only
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mathias/hyperguild#10
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
hyperguild new-projectwill be a CLI command — callable from a terminal or Claude Code session. But from claude.ai web/mobile, there is no way to trigger it directly because:Solution
Add a lightweight webhook endpoint to the existing
cmd/routingHTTP server (which already runs on koala as an MCP server behind Dex/OAuth). A single new route:Response:
How claude.ai calls it
The routing pod is already exposed as an MCP server via gitea-mcp-adjacent infrastructure. Two options:
Option A: Add
project_createas a new MCP tool in the routing pod's tool registry — callable directly from claude.ai via the existing connector.Option B: Expose as a plain HTTP endpoint, call it from claude.ai via a new minimal MCP tool
hyperguild_webhookthat wraps the HTTP call.Recommendation: Option A — the routing pod already has the MCP server infrastructure (
mcp.NewServer,registry.New()), auth via Dex JWT, and is reachable from claude.ai. Adding a tool is a singlereg.Register(...)call.What the tool does (v1, three steps)
Create GitHub repo from template (
template-go-agentortemplate-go-web)POST /repos/mathiasb/template-go-agent/generatereposcope in env/secretCommit staging namespace manifest to infra repo
k8s/staging/<name>/namespace.yamlOpen GitHub issue with experiment brief
POST /repos/mathiasb/<name>/issuesReturns URLs +
next_stepsstring with exact local commands to run.What it does NOT do (v2+)
task new-project)Security
cmd/routing/main.goRequired secrets/config (new)
Testing the concept (before full implementation)
Minimal proof-of-concept to validate the claude.ai → webhook → koala flow:
ping_projectMCP tool to routing pod that takes{name: string}and returns{echo: name, timestamp: ...}If ping works → full implementation is straightforward.
Related issues
Architecture update — 2026-05-14
Original issue assumed we needed a separate webhook endpoint + GitHub API access from claude.ai. That's not needed.
Revised approach: Gitea-first, GitHub via push mirror
The complete
new-projectflow works entirely through the existing gitea-mcp connector already available in claude.ai:No new HTTP endpoints needed. No GitHub API access from claude.ai. No routing pod changes needed.
ADR exception (pragmatic)
GitHub-as-master ADR is preserved for all ongoing work (Claude Code, Actions, PRs). One exception: repo creation originates in Gitea, GitHub receives it via push mirror seconds later. After that, GitHub is canonical for all development.
What this issue becomes
Rather than a webhook endpoint, this is now about orchestrating the gitea-mcp tool sequence as a single composite
project_createMCP tool in the routing pod's registry — callable directly from claude.ai as one action instead of four manual tool calls.The composite tool: repo_create → repo_mirror_push → file_write_branch (infra) → issue_create, with idempotency and rollback on failure.
Blockers
Test plan (manual, before composite tool)