Skip to content

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.

  • 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.

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.

Example of the bot in Discord

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, weekly or on_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 team in 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.

/summary-admin create adds a summary. It starts enabled with an empty prompt and no recipients, so nobody receives it until you add recipients.

name text required

Lowercase letters, digits and dashes. Names are unique, and a disabled summary still holds its name.

Allowed: 1 to 50 characters: a-z, 0-9, dash

team text required

The Linear team. Pick from the list as you type; it shows team names and keys.

cadence choice required

How often it is sent. daily skips Saturday and Sunday in each recipient’s timezone. weekly sends on one weekday. on_demand is never sent on a schedule, and members use /summary now.

Allowed: daily, weekly, on_demand

weekday choice optional

The day for a weekly summary. Required for weekly, refused for daily and on_demand.

Allowed: Monday to Sunday

time text optional

Send time in the recipient’s timezone. Suggestions are half-hour slots, but you can type 09:00, 9:30am, 9am or 1730.

Default: 09:00

description text optional

What this summary covers. The model is given it as context.

Allowed: up to 200 characters

project text optional

Limit the Linear tickets to one project of the team. Pick from the list as you type, after you have chosen the team. The bot does not check that the project belongs to that team, and a mismatch finds no tickets. It does not filter Discord channels.

Example of the bot in Discord

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 seeWhy
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.

/summary-admin prompt opens a form to edit the note that tells the model what to stress. It works on disabled summaries too.

config text required

The summary to edit. Pick from the list; it includes disabled ones.

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.

Example of the bot in Discord

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.

/summary-admin recipients add and /summary-admin recipients remove take the same options. Give exactly one of user or role.

config text required

The summary. Pick from the list.

user user optional

One person.

role role optional

A role. It covers everyone who holds it when the summary is sent, so people who join later are included.

Example of the bot in Discord

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 seeWhy
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 the channels a team’s summaries may read.

/summary-admin map-channel:

channel channel required

The channel to map.

Allowed: text, announcement or forum channels

team text required

The Linear team. Pick from the list.

Example of the bot in Discord

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.

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.

/summary-admin enable and /summary-admin disable take one option, config (required, pick from the list).

Example of the bot in Discord

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>".

  • 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.

You want a weekday digest of the launch work at 09:00 for two people.

  1. Map the channel. Run /summary-admin map-channel channel: #project-launch team: Studio (STU). The bot replies Mapped <#123456789012345678> to Studio (STU). Repeat for each channel that belongs to the project.

  2. Create the summary. Run /summary-admin create name: launch-daily team: Studio (STU) cadence: daily time: 09:00. The bot confirms with Created summary **launch-daily** ...

  3. Set the prompt. Run /summary-admin prompt config: launch-daily, type Stress launch blockers and release risk. and send the form. You get Prompt updated for launch-daily.

  4. 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 set with a timezone.

  5. 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.

  6. 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.

Summaries are off by default. Whoever runs the bot sets these in its environment. See Configuration for exact values.

SettingNeeded for
SUMMARIES_ENABLED=trueEverything. When off, /summary, /interests and /summary-admin do not exist in the server.
GEMINI_API_KEYWriting summaries. Without it /summary now replies Summaries are not available: AI is not configured. and nothing is sent on a schedule.
LINEAR_API_KEYCreating 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_ALLOWLISTOptional. 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.