luchy

An AI teammate for teams that work on Discord.

It lives in your channels, works in threads alongside everyone, asks before it does anything destructive, and remembers what it learns from one day to the next.

Request access
evening lag on factionthread in #ops
mira
Faction lags every evening around 21:00. Can you look?
LuchyAPP
▸ spark profile 120s · ▸ read logs/latest.log · ▸ memory_search hoppers
38% of the tick goes to hopper transfers in two farms near spawn, same cause as on 12 September. Raising hopper-transfer from 8 to 16 fixed it then.
Edit config/paper-world-defaults.yml · 1 line changed
ApproveRefuse
tom
Approved. Do it.
LuchyAPP
Done, applied on next reload. Checkpoint 14 holds the file as it was.

The thread is where the work happens.

Every thread Luchy watches is a persistent agent session. Someone asks, it investigates with its tools, answers, and acts. The whole team reads along, and anyone can steer it mid-task: a message written while it works lands at its next step, without restarting the job.

  • A forum post is a session too.
  • /new opens a thread with the model and profile you pick; /session info shows context, cache and cost.
  • Several agents share one instance, each with its own workspace, tools, credentials and Discord account.
release notes 2.3thread in #dev
mira
Write the release notes for 2.3 from the merged PRs.
LuchyAPP
▸ github list_pull_requests · ▸ read CHANGELOG.md
tom
Leave the internal refactors out.
⏩ steered
LuchyAPP
Nine user-facing changes, refactors left out. The draft is in docs/releases/2.3.md, want me to open the PR?

It remembers. You decide what it keeps.

What Luchy learns is plain markdown: rules the team stated, facts it observed, procedures that worked. Each turn, hybrid search recalls the few items that matter. After a conversation, a reflection pass turns what happened into memory, with its sources attached.

  • A rule is something a person actually said. It is announced with a Revoke button.
  • A procedure that worked in two separate conversations is proposed as a skill. Nothing becomes a skill until someone approves it.
  • Every night, a dream pass archives what expired, rewrites the briefing and posts a report.
  • Memory is filed per domain. What two roles share is declared, never inherited.
opschannel
LuchyAPP
Noted as a team rule.
Never restart production between 20:00 and 23:00.
Rule · from tom's message in #ops
Revoke
LuchyAPP
This procedure worked in two separate threads. Make it a skill?
Rebuild the resource pack and publish it
Procedure · 2 successful attempts
ApproveReject

It acts. It asks first.

Luchy has a shell, files, web search, and the MCP servers you give it: GitHub, a game panel, anything that speaks stdio or HTTP. The bot owns the permission modes and rules, and anything destructive waits for a yes or no in the thread.

  • Rules like bash(git:*) or edit(//path); an admin's "allow always" persists.
  • A checkpoint of the workspace on every turn, so a bad edit can be rewound.
  • Cost tracked per session.
  • A session cannot edit its own settings or MCP config to grant its next self more.
api is slowthread in #ops
LuchyAPP
The API container has been leaking memory since this morning's deploy. I'd like to restart it.
bash · docker compose restart api
Needs approval
Allow onceAllow alwaysDeny
nora
Go.
LuchyAPP
Restarted, health check green. Checkpoint 27 holds the workspace as it was before.

It keeps the team's rhythm.

A morning briefing, a midday check-in, and schedules that open a thread, do the work and report back. The briefing is written from what actually happened: every line points to the thread it came from.

  • /schedule list, pause, resume or delete what runs on a cron.
  • A notebook per domain for what the team wants it to keep in mind.
generalchannel
LuchyAPP
Good morning.
Active projects
Spring event map, in review · Release 2.3, notes drafted
Recent
Evening lag on faction fixed (hopper transfers) · API restarted after a memory leak
Planned
Daily 10:00 backup check · Friday 18:00 weekly report

Discord first. Not Discord only.

The agent stays in one place, on your server. Other surfaces are windows onto the same conversations and the same memory.

Voice
/voice join binds a voice channel to the thread: speech in, speech out. The thread keeps the written answer, attributed to whoever spoke.
Your editor
Zed, JetBrains and VS Code open and drive the same conversations through the Agent Client Protocol, with diffs and approval prompts.
The OpenAI API
Luchy serves the Responses API under /v1, so an SDK, a chat front-end or an automation drives a conversation with no code of its own.
from openai import OpenAI

client = OpenAI(base_url="https://luchy.example.org/v1", api_key="lk_…")
first = client.responses.create(model="luchy/default", input="What changed this week?")
print(first.output_text)

It runs on your side.

One isolated instance per organisation, on your own server: Docker, or a Pterodactyl panel. Your projects and roles are profiles inside it.

  • Any model pi supports, with your own keys: Anthropic, OpenAI, Amazon Bedrock, Gemini, Mistral and more.
  • Skills as SKILL.md; a vertical ships as a plugin, versioned on its own.
  • Telemetry and a dashboard for health, usage and cost.
$ docker compose build
$ docker compose run --rm luchy luchy init
$ docker compose up -d

Request access.

Luchy isn't open to everyone yet. Tell us about your team and what you'd want it to do, and we'll write back.

We use this only to answer you. Privacy