- Python 66.8%
- TypeScript 25.1%
- C# 5.1%
- CSS 1.6%
- Shell 0.9%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
build-publish / test (push) Successful in 47s
build-publish / frontend (push) Successful in 33s
build-publish / build-image (push) Successful in 4m2s
build-publish / publish-eco-jobs-tracker (push) Successful in 18s
build-publish / publish-eco-replay (push) Successful in 34s
build-publish / publish-eco-store-exporter (push) Successful in 6s
build-publish / publish-eco-telemetry (push) Successful in 7s
This repo declares `ward.workflow: merge-remote-main`, and the pinned pr-guard predates the fix that stands the guard down on that lane (3d80e355, first packaged in aos-precommit-v0.50.0). Below that tag the guard refuses the push that IS this repo's lane. The full suite passes here at v0.55.0 with no content changes. The managed .gitattributes block rides along. Refs coilyco-flight-deck/agentic-os#1383 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Agent-Role: platform |
||
| .agents/skills/repo-eco-app | ||
| .claude | ||
| .forgejo | ||
| .gauntlet/trials | ||
| .github | ||
| .ward | ||
| data | ||
| docs | ||
| frontend | ||
| investigation | ||
| mods | ||
| scripts | ||
| src | ||
| static | ||
| tests | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .trufflehog-exclude | ||
| _typos.toml | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| Dockerfile | ||
| justfile | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Banner: Steam header for Eco by Strange Loop Games. Used here for attribution, not my artwork.
eco-app
The companion service for the Sirens Eco server. It turns live world, trade, crafting, civics, and player state into practical answers, for an agent over MCP or a person in a browser.
One fused service
eco_mcp_app is the core, a data-only MCP server reachable over stdio for
Claude Desktop and Streamable-HTTP at /mcp/, whose tools return markdown and
structured JSON. Tool names are task-shaped and do not repeat the product name,
so get_server_status and get_region rather than get_eco_status.
Mounted inside it: the jobs API at /jobs/api, shaping rows out of the in-game
skills mod, and eco_replay, a reader over the replay mod's append-only JSONL
event log. frontend/ is the Vite, React, and TypeScript SPA the same service
serves at /, with /jobs and /replay pages over those two.
The in-game half
mods/ holds the C# Eco server plugins that feed it: jobs for the skills
API, replay for the player-action event store, stores for live store and
currency export, and telemetry for logs, metrics, and exception capture.
Gameplay mods live in the sibling eco-mods repo, not here. Main CI builds every real mod project and publishes install-ready ZIPs to Forgejo Packages, per docs/mod-packages.md.
The operator surface is separate and bounded
A feature-flagged privileged MCP at /admin is the inside-out operator view.
Its fourteen admin_* tools read fixed read-only Eco state mounts and
node-local status, plus twelve enum-only observational RCON queries. It has no
arbitrary path, no free-form command, and no write capability. The admin_
prefix is a deliberate security-boundary signal rather than namespacing. See
docs/admin-mcp.md.
Run it
just http # the fused server against a live eco target
just http-offline # the same, against the local snapshot fixture
just frontend-dev # Vite with HMR on :5173, proxying the API
just alone lists every recipe. Each push to canonical main publishes the
fused image as
forgejo.coilysiren.me/coilyco-gaming/eco-app:<full-source-sha>, and deploy
consumes that exact reference through a separate read-only credential.
See also
- AGENTS.md - agent-facing operating rules.
- docs/FEATURES.md - inventory of what ships today.
- docs/admin-mcp.md - the privileged surface and its disclosure contract.
- justfile - dev verbs.
- .ward/ward.yaml - catalog metadata only.
