A named, shareable list of muted words/phrases — Anisota's managed layer on top of Bluesky's flat muted-words preference. Each list is a complete, self-contained record so it can be shared by URL and saved (copied) into another user's PDS, mirroring the net.anisota.spell.custom architecture. Muting is applied client-side by the moderation pipeline: multiple enabled lists combine, a list can be scoped to specific feeds, restricted to a time-of-day/day-of-week window, and softened with a strength percentage (mute only that share of matching posts, deterministically per post). A list can optionally be projected into Bluesky's native mutedWordsPref for parity with other clients.
tid
Timestamp-based ID
Properties
createdAt
string
datetime
Required
When this list was created
description
string
Optional
Optional description of what this list covers
maxLength: 300 bytesenabled
boolean
Optional
Whether this list is currently active. Scheduling and spell effects further gate an enabled list.
falsename
string
Required
Display name for this word list
maxLength: 64 bytesschedule
ref
#schedule
Optional
Optional active window. Absent means the list applies at all times while enabled.
source
ref
#source
Optional
No description available.
strength
integer
Optional
Mute strength percentage: the share of matching posts this list mutes. Which posts fill that share is decided by match confidence — how many of the list's words hit, whether they landed in the post's own text, a hashtag, or only a quoted post, and how much of the post they account for — so a softened list keeps the squarest matches muted and lets the marginal ones through. Deterministic per post, so a post never flickers. Absent means 100 (mute everything it matches).
minimum: 0maximum: 100syncToBluesky
boolean
Optional
Whether this list's words are also projected into Bluesky's native mutedWordsPref (managed entries, removed when the list is disabled or deleted).
falsetargetFeeds
array
of
string
Optional
Feeds where this list applies: feed generator / list at-uris, or the literal sentinel 'following' for the home timeline. Empty or absent applies everywhere.
maxLength: 50 itemstreatment
string
Optional
What this list does to a post it mutes, overriding the app-wide muted-words handling: 'hide' removes it from feeds, 'warn' collapses it behind a notice, 'show' leaves it visible and only counts it toward impact. Absent inherits the global setting.
hide, warn, showupdatedAt
string
datetime
Optional
When this list was last modified
words
array
of
ref
#word
Required
The muted words/phrases in this list
maxLength: 500 itemsView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"name",
"words",
"createdAt"
],
"properties": {
"name": {
"type": "string",
"maxLength": 64,
"description": "Display name for this word list"
},
"words": {
"type": "array",
"items": {
"ref": "#word",
"type": "ref"
},
"maxLength": 500,
"description": "The muted words/phrases in this list"
},
"source": {
"ref": "#source",
"type": "ref"
},
"enabled": {
"type": "boolean",
"default": false,
"description": "Whether this list is currently active. Scheduling and spell effects further gate an enabled list."
},
"schedule": {
"ref": "#schedule",
"type": "ref",
"description": "Optional active window. Absent means the list applies at all times while enabled."
},
"strength": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Mute strength percentage: the share of matching posts this list mutes. Which posts fill that share is decided by match confidence — how many of the list's words hit, whether they landed in the post's own text, a hashtag, or only a quoted post, and how much of the post they account for — so a softened list keeps the squarest matches muted and lets the marginal ones through. Deterministic per post, so a post never flickers. Absent means 100 (mute everything it matches)."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this list was created"
},
"treatment": {
"type": "string",
"description": "What this list does to a post it mutes, overriding the app-wide muted-words handling: 'hide' removes it from feeds, 'warn' collapses it behind a notice, 'show' leaves it visible and only counts it toward impact. Absent inherits the global setting.",
"knownValues": [
"hide",
"warn",
"show"
]
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When this list was last modified"
},
"description": {
"type": "string",
"maxLength": 300,
"description": "Optional description of what this list covers"
},
"targetFeeds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 512
},
"maxLength": 50,
"description": "Feeds where this list applies: feed generator / list at-uris, or the literal sentinel 'following' for the home timeline. Empty or absent applies everywhere."
},
"syncToBluesky": {
"type": "boolean",
"default": false,
"description": "Whether this list's words are also projected into Bluesky's native mutedWordsPref (managed entries, removed when the list is disabled or deleted)."
}
}
},
"description": "A named, shareable list of muted words/phrases — Anisota's managed layer on top of Bluesky's flat muted-words preference. Each list is a complete, self-contained record so it can be shared by URL and saved (copied) into another user's PDS, mirroring the net.anisota.spell.custom architecture. Muting is applied client-side by the moderation pipeline: multiple enabled lists combine, a list can be scoped to specific feeds, restricted to a time-of-day/day-of-week window, and softened with a strength percentage (mute only that share of matching posts, deterministically per post). A list can optionally be projected into Bluesky's native mutedWordsPref for parity with other clients."
}