# Maven — Agent Context ## Vikunja This repo maps to **Maven** (project ID: 2) in Vikunja. Feature work, bugs, deployment tasks all go here. MCP endpoint: `http://localhost:9100/mcp` (or `http://192.168.1.104:9100/mcp` from workpc) ## The sibling services (Nexus, Praxis, Hexis) Maven is the conversational front end of a four-service ecosystem. The other three live in sibling repos next to this one. | Service | Repo | Port | Answers | |---|---|---|---| | Nexus | `../nexus` | 9740 | who or what is this name | | Praxis | `../praxis` | 8989 | what needs attention | | Hexis | `../hexis` | 9741 | what can be run, and running it | Division of labour: Nexus identifies, Praxis observes, Hexis acts, Maven understands and coordinates. Maven is not the source of truth for any of the three. The full contract is `MAVEN_ECOSYSTEM_ARCHITECTURE.md`, and the constraints that bite during implementation are summarised in `CLAUDE.md`. Where things are in this repo: - `cmd/mavend/ecosystem.go` holds `nexusClient` and `praxisClient`. The Hexis client is vendored from `github.com/kami/hexis/pkg/client`. - `cmd/mavend/ecosystem_acts.go` routes an act through capability discovery. - `cmd/mavend/factenrichment.go` resolves each stored fact's `Subject` against Nexus on a background poll loop, with backoff and no give-up. - `internal/store/entityfacts.go` holds the entity-tagged fact rows. - Config blocks are `nexus`, `praxis` and `hexis` in `deploy/mavend.json`. Each is optional. Absent means that integration is dark, not broken. Bring the whole ecosystem up locally: ```sh docker compose -f deploy/ecosystem/docker-compose.yml up -d ``` That builds all three from the sibling working trees, so commit or stash there first. Each publishes on loopback at the port above. Maven reaches them by service name on the shared compose network. Testing without them running: `cmd/mavend/fakeecosystem_test.go` provides stubs, and `cmd/mavend/ecosystem_degraded_test.go` covers each service being unreachable. ## Rendering / previewing the web UI locally To see mavweb pages with real data without touching the production stack: ```sh R=/tmp/mvn-preview; mkdir -p $R go build -o $R/mavend ./cmd/mavend/ && go build -o $R/mavweb ./cmd/mavweb/ cat > $R/mavend.json <"}}`). New pages must link both — no per-page inline `