Documentation

Origami documentation

Origami is a privacy-focused identity, profile, and proxying bot. Identity data such as systems, members, groups, and profiles can follow you between servers, while moderation settings and restrictions remain local to each server.

The in-bot help menu is intended as a quick reference. This page expands on those same features with more context, examples, and behaviour notes.

Getting started

A basic Origami setup starts with a system, then one or more members, followed by proxy tags.

  1. Create a system. og!system new <name>
  2. Create a member. og!member new <name>
  3. Add a proxy tag. og!member proxyadd <member> [text]
  4. Send a proxied message. Use the proxy tag pattern around your message.
  5. Optionally enable latch mode. og!latch on
Origami commands are not case-sensitive. Most member, group, proxy, switch, privacy, and configuration commands operate on your active system.

Systems

Systems are top-level identity containers for members, groups, switches, profiles, and linked accounts. You can have multiple systems, but one is active at a time.

Common system commands

og!system og!system new <name> og!system list og!system use <ID> og!system rename <name> og!system description <text> og!system tag <tag> og!system nameformat <format> og!system pronouns <text> og!system color <hex> og!system delete

Proxy name formatting

{name} is required and represents the member name or display name. {tag} is optional and represents the system tag.

Examples include {name}{tag}, {tag} {name}, [{tag}] {name}, and {name}.

Deleting a system also deletes its members, groups, switches, proxy tags, stored assets, and related Origami data.

Members

Members are identities inside an Origami system. Member profiles can include names, display names, pronouns, descriptions, birthdays, colours, avatars, banners, webhook avatars, and proxy tags.

Members can be resolved by short ID, canonical name, or display name without case-sensitive name matching.

Viewing and creation

og!member <name/id> og!member list og!member new <name>

Editing

Origami supports both action-first and PK-style member-first command forms.

og!member rename <member> <name> og!member <member> rename <name> og!member displayname <member> <name> og!member pronouns <member> <text> og!member description <member> <text> og!member birthday <member> <value> og!member color <member> <hex>

Images

og!member avatar <member> og!member banner <member> og!member webhookavatar <member>

Deletion

og!member delete <member>

Proxying

Proxy tags let messages appear using a member's name and avatar while Origami retains attribution to the real Discord account.

Proxy tags

og!member proxy <member> og!member proxyadd <member> [text] og!member proxyremove <member> <number>

The word text marks where the message goes. For example, [text] turns [hello] into hello sent as that member.

Latch mode

og!latch on og!latch og!latch off

While latch mode is enabled, using an explicit proxy tag selects that member as the active latch. Normal messages afterwards continue proxying as that member until you switch again or disable latch mode.

One-message bypass

Start a message with \ to prevent Origami from proxying that one message while keeping your current latch state active.

Start a message with \\ to prevent Origami from proxying that message and disable your current latch state.

Examples: \hello stays as a normal Discord message, while \\hello stays normal and also turns latch mode off.

Managing proxied messages

og!edit <new text> og!delete

Moderator reaction controls

These reactions are moderation controls and require the Discord Manage Messages permission. Reactions from other users are removed without performing the action.

  • ❓ identifies the real Discord account without pinging it.
  • 🔔 pings the real Discord account that sent the proxy.
  • ❌ deletes the proxied message and removes its Origami proxy record.

Proxy senders can still manage their own proxied messages with og!edit and og!delete; they do not need moderator reaction access for those commands.

Groups

Groups organise members and can have their own profiles. Groups can also be nested inside parent groups.

og!group <name/id> og!group list og!group new <name> og!group add <group> <member> og!group remove <group> <member> og!group rename <group> <name> og!group description <group> <text> og!group color <group> <hex> og!group parent <child> <parent> og!group icon <group> og!group banner <group> og!group delete <group>
Deleting a group does not delete the members inside it.

Switches & privacy

Switch tracking

og!switch og!sw og!switch set <members> og!switch end

Switch history belongs to the system and can also be imported from PluralKit.

Privacy controls

og!privacy system og!privacy member <member> og!privacy group <group> og!privacy set <type> <target> <field> <visibility> og!privacy reset <type> <target> [field]

Visibility can be public or private. Public fields can be shown normally; private fields require an authenticated Discord account linked to that system. Privacy is field-based, so names, descriptions, avatars, pronouns, proxy tags, and group membership can have separate visibility settings. A direct system link never upgrades a viewer's access: private fields are only returned after Origami verifies that the signed-in Discord account is linked to the system.

Linked accounts

Multiple Discord accounts can be linked to the same Origami system while remaining separate real users for attribution and server moderation.

og!account link og!account link <code> og!account list og!account unlink

Link codes are sent privately by DM, expire after 10 minutes, and can only be used once. The second Discord account must redeem the code itself.

Linked accounts share the same system, members, groups, proxy tags, privacy settings, and other identity data. Proxy-message ownership and moderation still identify the exact Discord account that sent the message.

Configuration

These settings control defaults for the active system or the current linked Discord account.

og!config og!config private-members on/off og!config private-groups on/off og!config proxy-case-sensitive on/off og!config proxy on/off

Private-member and private-group settings affect newly created entities. They do not silently change existing privacy settings. Proxy case sensitivity also applies as a default for new proxy tags.

Proxying can be disabled for one linked Discord account without unlinking it or disabling proxying for other linked accounts.

Moderation

Origami moderation is server-local. Restrictions in one server do not become cross-server reputation or punishment.

Server proxy controls

og!proxyoff og!proxyon

Channel blacklist

og!proxyblacklist og!pbl og!proxyblacklist add #channel og!proxyblacklist remove #channel

Logging

og!proxylog og!proxylog #channel og!proxylogoff og!deletelogsource og!deletelogsource #channel og!deletelogsourceoff

Restrictions

og!proxyban @user [duration] [reason] og!proxyunban @user og!proxymemberban @user <member> [duration] [reason] og!proxymemberunban @user <member> og!who

Account bans target the actual Discord account, so changing member identity cannot bypass a moderation restriction. Origami also waits briefly before proxy delivery; if moderation deletes the original message before delivery, the proxy is cancelled.

Migration

og!import pk og!import tupper

Imports are isolated from unrelated Origami systems. PluralKit and Tupperbox data are kept in their own imported systems rather than being merged into whichever system is currently active.

Re-importing the same source updates the same imported system and mapped members, groups, proxies, and profile data instead of creating duplicates.

Tupperbox exports can contain personal system data. Import them in DMs with Origami rather than posting them in a public server channel.

PluralKit token

DM PluralKit and run pk;token. Origami requests the token through a private modal, uses it only while fetching the import, and does not store the token.

Imported profile images are stored in Origami's own asset storage instead of depending permanently on PluralKit image URLs.

Status & diagnostics

og!ping

The live status panel shows gateway latency, database health, uptime, connected server count, version, and status-generation time.

Detailed health includes build commit, environment, loaded extensions, Python version, and discord.py version, while avoiding sensitive details such as database credentials, hostnames, filesystem paths, internal asset URLs, and raw exception details.

Command reference

Command examples throughout this page are grouped by the feature they belong to. Angle brackets indicate required values and square brackets indicate optional values.

Troubleshooting

My message did not proxy

Check that proxying is enabled for your linked account and the current server, that the channel is not blacklisted, and that your proxy tag matches the configured case-sensitivity behaviour.

A field is not visible

Origami privacy is field-based. Check the privacy setting for the specific field on the system, member, or group.

My import created or updated a separate system

This is expected. Imports are kept isolated from unrelated Origami systems, and re-imports update the mapped imported system rather than merging into the active one.

A linked account is restricted in one server

Moderation remains tied to the exact Discord account that sent the proxied message. Linked accounts share identity data, not moderation identity.

About Origami

Team

Z3R0 — Developer. Built and maintains Origami, including the bot, backend, infrastructure, migrations, moderation tools, and overall design.

Fishy — Artist. Creates Origami's artwork and helps shape its visual identity and personality.

Special thanks

Redbull Collective, LabMCL, and The Mockingbird Collective have contributed testing, feedback, migration testing, and edge-case reports during development.