A discord community agent harness - home of sirens echo and sirens deep
  • Go 97.9%
  • Shell 1.4%
  • Just 0.3%
  • Dockerfile 0.3%
  • Python 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Coilyco Robotic Operations Division 5b3ec52a65
All checks were successful
ci / image-build (push) Successful in 41s
ci / test (push) Successful in 1m2s
ci / publish-echo-image (push) Successful in 5m19s
ci / publish-observed (push) Successful in 3s
Merge pull request 'feat(threads): a thread can carry one living answer instead of a run' (#1138) from aos/claude/edit-reply-951 into main
2026-08-23 02:08:27 +00:00
.agents/skills chore(skills): regenerate the repo pointer skill from Forgejo metadata 2026-08-20 00:37:51 -07:00
.forgejo/workflows chore: drop CODEOWNERS so agents stop reading a review request as a gate 2026-08-20 02:16:32 -07:00
.github chore: drop CODEOWNERS so agents stop reading a review request as a gate 2026-08-20 02:16:32 -07:00
.ward feat(eval): declare every boundary, and move the command core to just 2026-08-15 18:22:23 -07:00
agent feat(threads): a thread can carry one living answer instead of a run 2026-08-22 19:02:07 -07:00
agents refactor(eval)!: adopt entity and attribute from the shared layer 2026-08-22 17:35:55 -07:00
assets feat(assets): add 2x banners and record how the field was generated 2026-08-10 21:28:53 -07:00
cmd feat(image): a check that reads a definition against the tree it ships with 2026-08-22 15:46:29 -07:00
docs feat(threads): a thread can carry one living answer instead of a run 2026-08-22 19:02:07 -07:00
eval refactor(eval)!: adopt entity and attribute from the shared layer 2026-08-22 17:35:55 -07:00
internal Merge pull request 'feat(threads): a thread can carry one living answer instead of a run' (#1138) from aos/claude/edit-reply-951 into main 2026-08-23 02:08:27 +00:00
scripts refactor(eval)!: adopt entity and attribute from the shared layer 2026-08-22 17:35:55 -07:00
.dockerignore fix(build): give the compose stage the inputs it actually needs 2026-08-11 18:57:54 -07:00
.gitattributes sirens-echo: initial public release 2026-08-10 11:19:58 -07:00
.gitignore refactor(compose): keep the allowlist in agent-compose's own format 2026-08-11 18:27:25 -07:00
.pre-commit-config.yaml docs(bands): finish the large-band migration and bump the hook pin 2026-08-17 00:50:34 -07:00
_typos.toml feat(attachments): name the stored upload to the model as data 2026-08-13 01:00:21 -07:00
AGENTS.md chore(agents): return to the pull-request lane and restore the gate guard 2026-08-22 14:16:32 -07:00
CLAUDE.md sirens-echo: initial public release 2026-08-10 11:19:58 -07:00
Dockerfile fix(image): fetch the pinned catalogue commit, not the branch again 2026-08-22 17:35:35 -07:00
go.mod feat(temporal): serve the lane's own Temporal namespace as read-only MCP 2026-08-18 19:53:56 -07:00
go.sum feat(mirror): send the tool-call trajectory to Temporal, metadata only 2026-08-16 21:36:52 -07:00
justfile refactor(eval)!: adopt entity and attribute from the shared layer 2026-08-22 17:35:55 -07:00
LICENSE sirens-echo: initial public release 2026-08-10 11:19:58 -07:00
pyproject.toml feat(compose): add the librarian role via a community person package 2026-08-19 01:12:03 -07:00
README.md docs: delete the capability ledger and the assets page 2026-08-18 20:28:04 -07:00

sirens-echo

sirens-echo and sirens-deep, a discord community agent harness

A discord community agent harness - home of sirens echo and sirens deep

About

Sirens Echo is an automated community response service. Its model context is a repository-owned neutral profile plus approved Sirens knowledge. The Discord deployment remains Sirens Echo.

  • Only a mention or reply in a configured channel, or a thread under one, invokes the service. Everything else is ignored, direct messages included.
  • A git-tracked access policy stacks guild, channel, user, and role grants with a deny list. Per-user, per-guild, and global limits bound spend.
  • Replies disable all mentions. Twelve earlier messages give continuity.
  • A deterministic validator rejects greetings, emojis, banter, and sign-offs.
  • The tool roster exposes public Eco MCP and a private, repository-fixed Forgejo MCP.
  • Unanswered questions and corrections become sanitized Forgejo issues.
  • The action surface stays repository-scoped, with no moderation or roles.

No automatic memory. Guarded investigations use .agents/skills/ops-social-discord/. See the walkthrough.

Coilyco harness

The sirens-deep deployment selects agents/deep/definition.yaml. Its model identity is Sirens Deep of Coilyco and its scope is general-purpose.

  • It loads only the domain-neutral coilyco-general policy and names no channel, so deployment selects Discord ingress, HTTP ingress, or both.
  • It starts with no MCP, repository knowledge, issue tracker, or write surface while retaining the shared safety and transport bounds.
  • One process serves several channels across several guilds, plus opt-in direct messages. See multiple Discord contexts.

General-purpose means topic-neutral and extensible, not universally authorized. Future tools or knowledge must be added explicitly to the tracked definition with their own permission boundary.

Configuration

Every number has one home, internal/community/config.go, and every one of them takes an environment override through the same helper. There is no tier of numbers a deployment cannot reach. The list is generated into the reference from the table itself, and a test fails if a number drifts out of the file or the reference falls behind it.

Deploy selects the tracked YAML definition, Agent Proxy route, Discord switch, channel and guild scope, admission limits, and instance name. Reachability of POST /v1/turn is decided at the network layer by the deployment. See tuning, tuning a deployment, response profiles, admission control, and deployment.

Development

Run commands through just:

just setup
just build
just policy-check
just test
just vet
just pre-commit-all

just setup installs the pre-commit hooks. Run it once per clone.

just eval-echo exercises the production prompt, Agent Proxy, and static Eco MCP roster without sending Discord messages or creating issues. Set OTEL_EXPORTER_OTLP_ENDPOINT to name the evaluation target you run against.

Deployment

Main pushes publish a full-source-SHA Echo image to Forgejo OCI. coilyco-bridge/deploy owns the k3s Deployment, secrets, rollout, and rollback. See the rollout checks.

See also

See AGENTS.md, docs/FEATURES.md, justfile, .ward/ward.yaml, admission, access, HTTP, health, notices, identity, role record, jobs, job lifecycle, job telemetry, commands, execution, guardfile knowledge, reply progress, the identity eval, counterparts, attribution, grants, and docs/sirens-echo-deploy.md. Cross-reference convention from FEATURES.md, tracked by coilysiren/agentic-os#59.