Summary configs
You decide which project a summary covers, who receives it and when. Everything happens through /summary-admin, with no config files and no restart. To set up your first summary, read What a summary is and then follow the worked example.
Before you start
Section titled “Before you start”- You need the Manage Server permission. Discord hides the command from everyone else, and the bot checks again when it runs. Without it the bot replies
You need Manage Server.and does nothing. - The command works inside the server only, not in DMs.
- Every reply is private: only you can see it.
- Summaries must be switched on by whoever runs the bot (the operator), and the bot needs a Gemini API key to write them. See what the operator must switch on.
- Linear must be connected to create a summary or map a channel. Without a Linear key the bot replies
Linear is not connected, so I cannot validate the team. Ask an admin to set LINEAR_API_KEY. - Members see only the result. See Summaries.
What a summary is
Section titled “What a summary is”A summary is a named recipe. In commands it is the config option. It holds:
- a Linear team, and optionally one Linear project of that team
- a cadence: daily, weekly or on demand only
- a send time, read in each recipient’s own timezone
- an optional description and an optional prompt that tells the model what to stress
- a list of recipients: people or roles
Channels are mapped (linked) to a Linear team, not to a summary. Every summary on a team reads the same mapped channels, which are the project’s Discord channels. You can map channels before or after you create the summary.
After you create a summary you can change its prompt, its recipients and whether it is on. The name, team, project, cadence, weekday, time and description cannot be changed. To change one of those, create a new summary under a new name and disable the old one. Summaries are never deleted, and the name stays taken.
Members’ personal digests from /interests are stored as hidden configs, one per member. They do not appear in /summary-admin list or autocomplete, and you cannot edit, enable or disable them. See Interests.
/summary-admin list shows every summary, enabled or not, sorted by name. It has no options.
You type
/summary-admin list
Doge Bot replies
launch-daily (enabled) - daily 09:00 in each recipient’s timezone - team Studio (STU) - 2 recipients - 3 channels
launch-weekly (disabled) - weekly Friday 16:00 in each recipient’s timezone - team Studio (STU) - 1 recipient - 3 channels
tools-team (enabled) - on_demand 09:00 in each recipient’s timezone - team Tools (TLS) - 1 recipient - 0 channels (unmapped)
Only you can see this
- The cadence prints as stored:
daily,weeklyoron_demand. An on-demand summary still shows a time, which is never used. - The channel count includes threads and forum posts under a mapped channel.
0 channels (unmapped)means the team has no mapped channel, so nobody can get content.- If the bot cannot reach Linear, the team shows as
a Linear teamin place of its name and key. - With no summaries it replies
There are no summaries. - A long list is cut to fit one message and ends with
...and N more.
create
Section titled “create”/summary-admin create adds a summary. It starts enabled with an empty prompt and no recipients, so nobody receives it until you add recipients.
You type
/summary-admin create name: launch-daily team: Studio (STU) cadence: daily time: 9am description: Launch progress
Doge Bot replies
Created summary launch-daily (daily 09:00 in each recipient’s timezone, team Studio (STU)). Set its prompt with /summary-admin prompt and add recipients with /summary-admin recipients add.
Only you can see this
| You see | Why |
|---|---|
Config names use lowercase letters, digits and dashes only, up to 50 characters. | The name breaks the rule. |
Config names starting with interests- are reserved for personal digests. | Pick another name. |
There is already a summary called "launch-daily". | The name is taken, even by a disabled summary. |
Pick a team from the list. | The team is not one Linear knows. |
Pick a weekday for weekly summaries. | A weekly summary needs weekday. |
Weekday only applies to weekly summaries. | Remove weekday. |
I could not read that time. Try 09:00, 9:30am or 1730. | Use one of those forms. |
Linear project id is invalid. | Choose the project from the list instead of typing. |
Linear team id is invalid. | Linear did not answer and the team was typed by hand. Pick the team from the list. map-channel can give the same reply. |
prompt
Section titled “prompt”/summary-admin prompt opens a form to edit the note that tells the model what to stress. It works on disabled summaries too.
The form is titled Prompt for <name> and has one optional paragraph field, Summary prompt, of up to 2000 characters, filled with the current text. Its hint is Optional: what to emphasise, e.g. launch blockers and release risk.
Doge Bot replies
Prompt updated for launch-daily.
Only you can see this
- An unknown name replies
There is no summary called "<name>".and no form opens. - Saving an empty field replies
Prompt cleared for launch-daily. - Only the person who opened the form can send it. Anyone else sees
This form is not for you. - The prompt is guidance only. The rules about citing, not inventing and not writing links always apply.
recipients add and remove
Section titled “recipients add and remove”/summary-admin recipients add and /summary-admin recipients remove take the same options. Give exactly one of user or role.
You type
/summary-admin recipients add config: launch-daily user: @Sam
Doge Bot replies
Added <@123456789012345678> to launch-daily. They have no timezone set, so they will not get scheduled summaries until they set one with /hours set.
Only you can see this
| You see | Why |
|---|---|
Pick exactly one of user or role. | You gave both or neither. |
Added <@id> to <config>. or Added <@&id> to <config>. | Done. A role shows as <@&id>. |
<@id> is already a recipient of <config>. | Nothing changed. |
Removed <label> from <config>. | Done. |
<label> was not a recipient of <config>. | Nothing to remove. |
Personal digests are managed with /interests. | You named a member’s personal digest. The same reply comes from prompt, enable and disable. |
A recipient gets the scheduled message and may run /summary now for that summary. Bots and people who have left the server are skipped. A person with no saved timezone gets nothing on a schedule, with no error, until they set one with /hours set. Removing a recipient keeps old summaries on record.
map-channel and unmap-channel
Section titled “map-channel and unmap-channel”Map the channels a team’s summaries may read.
/summary-admin map-channel:
You type
/summary-admin map-channel channel: #project-launch team: Studio (STU)
Doge Bot replies
Mapped <#123456789012345678> to Studio (STU).
Only you can see this
/summary-admin unmap-channel takes one option, channel (required, same channel types), and replies Unmapped <#id>. or <#id> was not mapped.
- A channel maps to at most one team. Mapping it again moves it.
- Threads and forum posts under a mapped channel count as mapped.
That channel has not been indexed yet. Try again after the backfill has seen it.means the bot has not recorded the channel yet. The backfill is the bot’s catch-up read of older channels, which runs when the bot starts; it skips channels the bot cannot view or read the history of. A channel created while the bot runs is recorded at once. See Messages and backfill.- A mapped channel the bot cannot read is skipped without any error.
What Linear contributes
Section titled “What Linear contributes”Summaries only read from Linear and never change anything in it.
- Tickets come from the summary’s team, or only its project if you set one in
create. Discord channels are not filtered by project. - The bot reads new, started and finished tickets for the period, plus everything in
In Review. A ticket in review for 7 days or more is flagged as stale in Blockers & risks. The state name and the 7 days have no command. - Tickets are not filtered by channel access: every recipient who can see at least one mapped channel gets the same ticket content.
- To use a different project, create another summary.
enable and disable
Section titled “enable and disable”/summary-admin enable and /summary-admin disable take one option, config (required, pick from the list).
You type
/summary-admin disable config: launch-weekly
Doge Bot replies
launch-weekly is now disabled.
Only you can see this
A disabled summary is never sent, is hidden from members’ lists and is refused by /summary now, for you too. It keeps its name, prompt and recipients. An unknown name gives There is no summary called "<name>".
Timing rules
Section titled “Timing rules”- A summary more than 60 minutes after its send time is dropped, not sent late. This is fixed.
- The bot checks every 15 minutes by default, so a summary can arrive a little after its send time.
- A recipient with no timezone gets nothing on a schedule.
For the reasoning, see how summaries work.
Worked example
Section titled “Worked example”You want a weekday digest of the launch work at 09:00 for two people.
-
Map the channel. Run
/summary-admin map-channel channel: #project-launch team: Studio (STU). The bot repliesMapped <#123456789012345678> to Studio (STU).Repeat for each channel that belongs to the project. -
Create the summary. Run
/summary-admin create name: launch-daily team: Studio (STU) cadence: daily time: 09:00. The bot confirms withCreated summary **launch-daily** ... -
Set the prompt. Run
/summary-admin prompt config: launch-daily, typeStress launch blockers and release risk.and send the form. You getPrompt updated for launch-daily. -
Add recipients. Run
/summary-admin recipients add config: launch-daily user: @Sam. If the reply says they have no timezone, ask them to run/hours setwith a timezone. -
Test it. Run
/summary now config: launch-daily. You can use it because you have Manage Server. It shows the summary only to you, as it would look to you, before any scheduled delivery. If it says you can see none of the channels, check the mapping from step 1. -
Wait for delivery. On the next weekday, each recipient with a timezone gets a direct message at 09:00 local time, give or take the bot’s check interval (15 minutes by default). If the bot was off for over an hour after 09:00, that day is skipped.
The first summary covers the last 24 hours. After that, each one starts where the previous one ended, so Monday covers the weekend.
What the operator must switch on
Section titled “What the operator must switch on”Summaries are off by default. Whoever runs the bot sets these in its environment. See Configuration for exact values.
| Setting | Needed for |
|---|---|
SUMMARIES_ENABLED=true | Everything. When off, /summary, /interests and /summary-admin do not exist in the server. |
GEMINI_API_KEY | Writing summaries. Without it /summary now replies Summaries are not available: AI is not configured. and nothing is sent on a schedule. |
LINEAR_API_KEY | Creating summaries, mapping channels and ticket content. Without it you cannot create or map, and existing summaries use messages only. Summaries need only the Read permission. Ticket prompts also need Create issues; see Ticket prompts. |
REMINDER_ALLOWLIST | Optional. When set, only these people get scheduled summaries and personal digests. It does not limit /summary now or /interests now. |
There is also a daily limit on how many summaries the bot writes in a rolling 24 hours, counted per recipient (SUMMARY_MAX_GENERATIONS_PER_DAY, 200 by default). Sent and failed ones count, and so does a personal digest that found nothing. When it is reached, members see Daily summary limit reached, try again later.
- Summaries shows members what they receive.
- How summaries work explains the timing, the limits and what the model sees.