Ask harder questions, get cited answers
Ask Pup something that needs a proper look, like “research whether Rakan is still a good support” or “compare the last two Bun releases”. Pup replies right away in its own voice to say it’s on it, reads several sources for up to three minutes, then turns that same message into the finished answer. There’s no pile of messages, and you can see what it relied on: sources are marked inline, like [1], with a compact Sources line at the end and no link-preview clutter. Try it: mention Pup with “research …” and something current.Share a link, get the gist
Paste a web page or a PDF and ask Pup about it. It opens the page, reads it, and answers with a citation. It can also run quick calculations when a question needs exact numbers. Try it: “@Pup what does this page say about pricing? https://…”Pup knows your server, and itself
Ask about your rules channel, upcoming events, roles or who someone is, and Pup looks it up. Ask how a Pup feature works and it answers from the documentation for the exact version you’re running, with a link to the right page. Try it: “@Pup how do I set up raid mode?” or “@Pup what events are coming up?”Find that message from last week
Turn on History search under Community → Assistant, and Pup can search earlier conversations, read other channels and threads from their very first message, and open message links you paste. It’s off by default, and it’s careful: Pup’s answer is visible to everyone in the channel, so it only shares messages from channels that are public or part of the current conversation, and only when the member asking can see them. Channels where learning is off are never searched, and deleted messages never come back. Try it: “@Pup find where we decided the movie night time” or “@Pup what was the first thing ever posted in #general?”Reminders and polls, just by asking
“Remind me in 20 minutes to start the raid” now just works. Pup mentions only you at the right time, replying to your original message. Members can ask Pup to list or cancel their own reminders. Pup can also create a poll in the current channel, and your server’s poll roles, channels and limits still apply, so it can’t be used to bypass your settings. Turn both off with Reminders and polls if you’d rather not. Try it: “@Pup make a poll: pizza or tacos for friday?”Give Pup a richer personality
The Personality field under Community → Assistant now holds up to 6,000 characters, three times the previous limit, with a live character count. Use the room for your server’s in-jokes, who’s who, and the tone you want, with examples.Under the hood
Replies and research
- Ordinary replies use reasoning effort low, up to 6 tool calls and 60 seconds. When a question needs more, the model asks to escalate: Pup posts the acknowledgement the model wrote, then continues the same response with reasoning effort medium, up to 20 tool calls and 3 minutes, and edits the acknowledgement into the answer.
- Independent tool calls run in parallel, and the last 15 seconds (30 in research) are kept for writing the answer.
- Once its acknowledgement is posted, a research reply stops holding the server’s reply queue, so other members still get quick answers. Long-running replies renew their processing lease every 45 seconds, so they are never picked up twice. A retry after the acknowledgement resumes research and edits the same message.
- Answers are split at paragraph, line or word boundaries within Discord’s 2,000-character limit, up to 3 messages. Code blocks are closed and reopened across messages.
- Assistant replies now complete immediately after posting. Previously, a delivered reply could still be retried in the background and recorded as failed.
Citations
- Web-search citations and tool sources (pages, PDFs, documentation) share one numbering. Numbers are reassigned in order of use, and sources the answer never cites are dropped.
- The Sources line uses Discord subtext and bracketed links, and the message is sent with link previews suppressed.
Page and PDF reading
- Only
httpandhttpson ports 80 and 443, without embedded credentials. - Every resolved address is checked, and the request is refused for loopback, private (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), carrier-grade NAT (100.64.0.0/10), link-local (including 169.254.169.254), multicast and reserved ranges, and their IPv6 equivalents. The connection is pinned to the checked address while TLS still verifies the original hostname, so a DNS change between the check and the request cannot redirect it inward.
- Up to 5 redirects, each checked again; 15 seconds per request; responses over 2 MB are refused.
- HTML is reduced to readable text (scripts, styles, navigation, headers, footers and forms removed) and PDFs are text-extracted. The first 12,000 characters are passed to the model.
- Calculations run in the provider’s hosted code interpreter. The page-reading and calculation tools follow the Web search setting.
History search and channel reading
- PostgreSQL full-text search with language-neutral tokenizing, so it works across languages, backed by an index on stored message text. Queries support “quoted phrases”,
ORand-exclusions, with optional channel (including its threads), author and before/after filters. Results are capped at 10, each with a jump link. - Only messages Pup already stored for learning are searched, so there is no new collection. Deleted messages and channels where learning is off are excluded.
- Visibility is computed from Discord permissions for the member asking: @everyone, role and member overwrites, and owner or Administrator access. They need View Channel and Read Message History. Threads follow their parent; private threads require membership and are never quoted outside themselves. Content from other channels is shared only when that channel is visible to @everyone.
- Channel reading returns up to 50 messages per request, paging backward from recent messages or forward from any message, including the first.
Server, member and documentation answers
- Server details list only channels that pass the same visibility check. Member lookup uses Discord’s member search and returns up to 5 matches with roles and join dates.
- Documentation answers come from a copy of the docs bundled at build time for the exact running version, ranked by relevance per section and linked to that section. No network access is needed.
- Memory search can now run as many times as the model needs, not only once before it answers.
Reminders and polls
- Reminders are stored with a delayed delivery job, so they survive restarts and redeploys. They are due between 1 minute and 1 year ahead, hold up to 500 characters, and each member can have up to 25 scheduled.
- Only the member who asked can be pinged: other mentions in the reminder text, including @everyone, are not notified. Reminders coming due while the Assistant or Reminders and polls is off are cancelled.
- Polls go through the same creation policy as
/poll create(creator roles, allowed channels, duration and open-poll limits). Pup uses named attribution when your server allows it, and the first allowed result settings otherwise. Retried replies reuse the same request ID, so they never create duplicate polls or reminders.
For self-hosted installs
- Migration
0140_assistant_toolsadds the History search and Reminders and polls settings (off and on by default, including for existing servers), a generated full-text column and index on stored Assistant messages (existing rows are indexed during the migration), and a reminders table. Migrations are forward-only; take and verify a backup before upgrading, as usual. - The default Azure OpenAI deployment name is now
gpt-6-sol. SetAZURE_OPENAI_DEPLOYMENTexplicitly if your deployment uses another name. Requests use reasoning, so temperature is not configurable. - Page reading makes outbound HTTP(S) requests from the worker. If your network requires it, restrict the worker’s egress at the network level.