Kindlingfor peopleThe protocol siteThe specificationThe libraryThe Circular
KindlingAn open protocol for finding people
PreambleUnder the hood

Kindling runs on Kindling · the settings

Under the hood.

Every setting of the project’s five planned Pools, the section of the spec it answers to, and why we chose it. Then the files themselves, the block lists, and what the v0.1 schemas can’t say yet.

Art. ISettings

The settings, mapped to the spec.

Settings of the five planned Pools
SettingValueSpecWhy
All five Pools
curator (primary)Kindling maintainers, josh@intellibotique.com, Signed in with OAuth§3.2 §4.5A real, accountable curator on every Pool. The maintainers answer for all five.
curator (co-curators)One or two per Pool, invented, all signed in with OAuth§9.3Co-curators listed in the manifest are first in line if the primary curator goes quiet.
curator_contactjosh@intellibotique.com§3.2One address for removal requests, complaints and disputes.
visibilitypublic on all five§3.2These Pools are about public work: curating, building, reviewing, governing, writing. Anyone can find them and read who is listed, and nobody is listed without saying yes.
handshake window14 days, the default, carried in each request’s expires_at§5.2The manifest has no field for it. The demo request was sent 27 September and expires 11 October.
messaging_preferences.block_list_subscriptionsKindling public block list§7.3The project publishes its own list, and its own Pools subscribe to that one alone. Other Pools choose theirs; the invented examples also subscribe to the Circular consortium’s list.
minimum_sender_verificationNot set§7.1Members keep their own messaging rules. Every invented member here accepts messages from verified senders only.
statusactive in the manifest; planned in fact§9.1The schema has no planned state. See the gaps below.
Founding Curators
consent_modelcurator-only-adds§5.4The founding cohort is invited. Maintainers propose; every person still says yes or no.
intent_tagscurating founding-cohort§3.2What the Pool is for, in the tags a discovery agent reads.
co-curatorRosa Delgado-Park (invented)§9.3A founding curator herself, so the Pool has someone who does the work curating it.
governance_rulesMaintainers add curators by invitation. Any curator may nominate another. Leaving is always one click.§3.3Says in the file who may add a curator, so nobody has to ask.
Client Builders
consent_modeluniversal-opt-in§5.2Building is public work. Anyone building a client can ask, and each says yes.
intent_tagsbuilding open-source§3.2What the Pool is for, in the tags a discovery agent reads.
co-curatorImani Brooks (invented)§9.3A builder, so the people reviewing conformance are builders too.
governance_rulesNot set, so the protocol defaults apply§3.3The defaults are enough for an open Pool.
Spec Readers
consent_modeluniversal-opt-in§5.2Disagreement is the point, so nobody screens readers. The handshake is the only gate.
intent_tagsspec-review indieweb§3.2What the Pool is for, in the tags a discovery agent reads.
co-curatorTobias Weiler (invented)§9.3A close reader of specs, first in line if the maintainers go quiet.
governance_rulesNot set, so the protocol defaults apply§3.3The defaults are enough for an open Pool.
Toward a Working Group
consent_modelvouching-required§5.4 §4.4One vouch from a current member before the handshake. The vouch is local to this Pool.
intent_tagsgovernance§3.2What the Pool is for, in the tags a discovery agent reads.
co-curatorTobias Weiler, Ingrid Solberg (invented)§9.3Two co-curators, so no single person decides who may stand. Either can vouch.
governance_rulesEntry requires one vouch from a current member. A vouch is local to this Pool and carries nowhere else.§3.3The vouching rule has no field of its own, so it is written here.
Writers and Researchers
consent_modeluniversal-opt-in§5.2Writers should reach the work without a gatekeeper. Everyone listed still said yes.
intent_tagsresearch writing journalism§3.2What the Pool is for, in the tags a discovery agent reads.
co-curatorMei-Lin Zhou (invented)§9.3A researcher, so writers have a peer to talk to and not only the maintainers.
governance_rulesNot set, so the protocol defaults apply§3.3The defaults are enough for an open Pool.
Art. IIThe manifests

Five manifests and one request.

Each file validates against the repo’s JSON Schemas (Appendix A). The people in them are invented, and so are their dates.

  • Founding Curators

    pools/founding-curators.json · public · curator-only-adds · 2 curators · 7 invented entries · schema_version 0.1

    Show the manifest
    {
      "schema_version": "0.1",
      "id": "founding-curators",
      "name": "Founding Curators",
      "curator": [
        {
          "identity": "josh@intellibotique.com",
          "display_name": "Kindling maintainers",
          "verification_level": "oauth",
          "primary": true
        },
        {
          "identity": "rosa@mail.example",
          "display_name": "Rosa Delgado-Park",
          "verification_level": "oauth",
          "primary": false
        }
      ],
      "intent_tags": [
        "curating",
        "founding-cohort"
      ],
      "visibility": "public",
      "consent_model": "curator-only-adds",
      "curator_contact": "josh@intellibotique.com",
      "charter": "People who already do introduction work, invited by the maintainers to run the first Pools and write down what curation is as a craft. Maintainers propose; every person still accepts or declines, and can leave within a minute. This Pool is not a waiting list for anything and nobody pays to be in it.",
      "governance_rules": "Maintainers add curators by invitation. Any curator may nominate another. Leaving is always one click.",
      "messaging_preferences": {
        "block_list_subscriptions": [
          "https://protocol.kindling.foundation/blocklist.json"
        ]
      },
      "status": "active",
      "created_at": "2026-06-01T12:00:00Z",
      "updated_at": "2026-08-18T15:00:00Z",
      "entries": [
        {
          "profile_url": "https://rosa-dp.carrd.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://rosa-dp.carrd.example",
            "display_name": "Rosa Delgado-Park",
            "pronouns": "she/her",
            "location": {
              "city": "Port Ellery",
              "country": "United States"
            },
            "intent_tags": [
              "community",
              "curating",
              "libraries"
            ],
            "about": "Reference librarian at the Port Ellery Free Library. Keeps the Board, vouches for patrons at the desk, and will find you any book about knots.",
            "contact_methods": [
              {
                "type": "email",
                "value": "rosa@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-02T16:10:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-02T16:10:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-02T16:10:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-rosa",
            "accepted_at": "2026-06-02T16:10:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-02T16:10:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://lena-books-the-ferry.carrd.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://lena-books-the-ferry.carrd.example",
            "display_name": "Lena Brightwater",
            "pronouns": "she/her",
            "location": {
              "city": "Port Ellery",
              "country": "United States"
            },
            "intent_tags": [
              "booking",
              "curating",
              "music"
            ],
            "about": "Books the Ferry Room. Has filled a Friday bill at five in the afternoon more times than she can count.",
            "contact_methods": [
              {
                "type": "email",
                "value": "lena@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-04T18:30:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-04T18:30:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-04T18:30:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-lena",
            "accepted_at": "2026-06-04T18:30:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-04T18:30:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://neaptide-ozzie.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://neaptide-ozzie.notion.example",
            "display_name": "Oswaldo “Ozzie” Reyes",
            "pronouns": "he/him",
            "location": {
              "city": "Port Ellery",
              "country": "United States"
            },
            "intent_tags": [
              "music",
              "curating",
              "band"
            ],
            "about": "Runs Neap Tide Records. Has introduced more bands than any app, mostly by saying “you two should talk” at the counter.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ozzie@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-04T19:02:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-04T19:02:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-04T19:02:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-ozzie",
            "accepted_at": "2026-06-04T19:02:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-04T19:02:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://valeria-ortiz.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://valeria-ortiz.notion.example",
            "display_name": "Valeria Ortiz",
            "pronouns": "she/her",
            "location": {
              "city": "Oaxaca",
              "region": "Oaxaca",
              "country": "Mexico"
            },
            "intent_tags": [
              "language-exchange",
              "curating",
              "spanish",
              "english",
              "letters"
            ],
            "about": "Coordina Correo Lento desde Oaxaca. Teaches the co-op’s paid Spanish classes; the letters are free.",
            "contact_methods": [
              {
                "type": "email",
                "value": "valeria@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-11T14:45:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-11T14:45:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-11T14:45:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-valeria",
            "accepted_at": "2026-06-11T14:45:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-11T14:45:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://nadia-farouk.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://nadia-farouk.example",
            "display_name": "Nadia Farouk",
            "pronouns": "she/her",
            "location": {
              "city": "Port Ellery",
              "country": "United States"
            },
            "intent_tags": [
              "matchmaking",
              "curating"
            ],
            "about": "Matchmaker at Late Supper. Twenty years of dinner parties before it had a name. Meets everyone in person first.",
            "contact_methods": [
              {
                "type": "email",
                "value": "nadia@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-07-01T20:15:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-07-01T20:15:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-07-01T20:15:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-nadia",
            "accepted_at": "2026-07-01T20:15:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-07-01T20:15:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://ines-calloway.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://ines-calloway.notion.example",
            "display_name": "Inés Calloway",
            "pronouns": "she/her",
            "location": {
              "city": "Tucson",
              "region": "Arizona",
              "country": "United States"
            },
            "intent_tags": [
              "peer-support",
              "stewarding",
              "curating"
            ],
            "about": "Steward at Scattered Light. Spent eleven years looking for one other person with her diagnosis. Now vouches for newcomers after a video call.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ines@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-07-09T03:20:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-07-09T03:20:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-07-09T03:20:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-ines",
            "accepted_at": "2026-07-09T03:20:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-07-09T03:20:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://ruth-adler.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://ruth-adler.notion.example",
            "display_name": "Ruth Adler",
            "pronouns": "she/her",
            "location": {
              "city": "Chicago",
              "region": "Illinois",
              "country": "United States"
            },
            "intent_tags": [
              "writing",
              "editing",
              "curating"
            ],
            "about": "Editor of the Circular. Spent thirty years on a city desk and still circles things in red.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ruth@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-08-18T15:00:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-08-18T15:00:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-08-18T15:00:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-founding-curators-ruth",
            "accepted_at": "2026-08-18T15:00:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-08-18T15:00:00Z",
          "added_by": "josh@intellibotique.com"
        }
      ]
    }
  • Client Builders

    pools/client-builders.json · public · universal-opt-in · 2 curators · 3 invented entries · schema_version 0.1

    Show the manifest
    {
      "schema_version": "0.1",
      "id": "client-builders",
      "name": "Client Builders",
      "curator": [
        {
          "identity": "josh@intellibotique.com",
          "display_name": "Kindling maintainers",
          "verification_level": "oauth",
          "primary": true
        },
        {
          "identity": "imani@mail.example",
          "display_name": "Imani Brooks",
          "verification_level": "oauth",
          "primary": false
        }
      ],
      "intent_tags": [
        "building",
        "open-source"
      ],
      "visibility": "public",
      "consent_model": "universal-opt-in",
      "curator_contact": "josh@intellibotique.com",
      "charter": "Developers building Kindling clients, readers, hosts and tools, in any stack. For trading notes, reviewing each other’s conformance, and finding a second pair of eyes before a release. Not for recruiting or selling.",
      "messaging_preferences": {
        "block_list_subscriptions": [
          "https://protocol.kindling.foundation/blocklist.json"
        ]
      },
      "status": "active",
      "created_at": "2026-05-19T12:00:00Z",
      "updated_at": "2026-07-02T08:05:00Z",
      "entries": [
        {
          "profile_url": "https://imani-builds.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://imani-builds.example",
            "display_name": "Imani Brooks",
            "pronouns": "she/her",
            "location": {
              "city": "Baltimore",
              "region": "Maryland",
              "country": "United States"
            },
            "intent_tags": [
              "building",
              "open-source",
              "writing"
            ],
            "about": "Built the reader that prints the Circular from well-known files. Writes small tools that do one thing.",
            "contact_methods": [
              {
                "type": "email",
                "value": "imani@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-05-20T17:00:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-05-20T17:00:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-05-20T17:00:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-client-builders-imani",
            "accepted_at": "2026-05-20T17:00:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-05-20T17:00:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://kai-rivera.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://kai-rivera.example",
            "display_name": "Kai Rivera",
            "pronouns": "they/them",
            "location": {
              "city": "Oakland",
              "region": "California",
              "country": "United States"
            },
            "intent_tags": [
              "building",
              "open-source"
            ],
            "about": "Built the Ferry Room Players client in a weekend and has regretted nothing. Maintains the auto-accept notification code.",
            "contact_methods": [
              {
                "type": "email",
                "value": "kai@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-05-22T02:40:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-05-22T02:40:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-05-22T02:40:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-client-builders-kai",
            "accepted_at": "2026-05-22T02:40:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-05-22T02:40:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://tobias-weiler.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://tobias-weiler.example",
            "display_name": "Tobias Weiler",
            "pronouns": "he/him",
            "location": {
              "city": "Berlin",
              "country": "Germany"
            },
            "intent_tags": [
              "spec-review",
              "indieweb",
              "governance"
            ],
            "about": "IndieWeb regular since the h-card days. Reads specs for ambiguity and files polite issues.",
            "contact_methods": [
              {
                "type": "email",
                "value": "tobias@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-07-02T08:05:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-07-02T08:05:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-07-02T08:05:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-client-builders-tobias",
            "accepted_at": "2026-07-02T08:05:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-07-02T08:05:00Z",
          "added_by": "josh@intellibotique.com"
        }
      ]
    }
  • Spec Readers

    pools/spec-readers.json · public · universal-opt-in · 2 curators · 4 invented entries · schema_version 0.1

    Show the manifest
    {
      "schema_version": "0.1",
      "id": "spec-readers",
      "name": "Spec Readers",
      "curator": [
        {
          "identity": "josh@intellibotique.com",
          "display_name": "Kindling maintainers",
          "verification_level": "oauth",
          "primary": true
        },
        {
          "identity": "tobias@mail.example",
          "display_name": "Tobias Weiler",
          "verification_level": "oauth",
          "primary": false
        }
      ],
      "intent_tags": [
        "spec-review",
        "indieweb"
      ],
      "visibility": "public",
      "consent_model": "universal-opt-in",
      "curator_contact": "josh@intellibotique.com",
      "charter": "People who read the specification and the RFCs closely and say where they are ambiguous, missing something, or overreaching. Identity-protocol veterans and IndieWeb regulars especially. Disagreement is the point.",
      "messaging_preferences": {
        "block_list_subscriptions": [
          "https://protocol.kindling.foundation/blocklist.json"
        ]
      },
      "status": "active",
      "created_at": "2026-05-12T09:00:00Z",
      "updated_at": "2026-07-30T14:00:00Z",
      "entries": [
        {
          "profile_url": "https://tobias-weiler.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://tobias-weiler.example",
            "display_name": "Tobias Weiler",
            "pronouns": "he/him",
            "location": {
              "city": "Berlin",
              "country": "Germany"
            },
            "intent_tags": [
              "spec-review",
              "indieweb",
              "governance"
            ],
            "about": "IndieWeb regular since the h-card days. Reads specs for ambiguity and files polite issues.",
            "contact_methods": [
              {
                "type": "email",
                "value": "tobias@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-05-12T09:30:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-05-12T09:30:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-05-12T09:30:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-spec-readers-tobias",
            "accepted_at": "2026-05-12T09:30:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-05-12T09:30:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://ingrid-solberg.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://ingrid-solberg.example",
            "display_name": "Ingrid Solberg",
            "pronouns": "she/her",
            "location": {
              "city": "Bergen",
              "country": "Norway"
            },
            "intent_tags": [
              "spec-review",
              "governance"
            ],
            "about": "Identity-protocol veteran. Reviewing the v0.2 draft for cryptographic identity.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ingrid@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-20T11:00:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-20T11:00:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-20T11:00:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-spec-readers-ingrid",
            "accepted_at": "2026-06-20T11:00:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-20T11:00:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://imani-builds.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://imani-builds.example",
            "display_name": "Imani Brooks",
            "pronouns": "she/her",
            "location": {
              "city": "Baltimore",
              "region": "Maryland",
              "country": "United States"
            },
            "intent_tags": [
              "building",
              "open-source",
              "writing"
            ],
            "about": "Built the reader that prints the Circular from well-known files. Writes small tools that do one thing.",
            "contact_methods": [
              {
                "type": "email",
                "value": "imani@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-06-21T00:10:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-06-21T00:10:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-06-21T00:10:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-spec-readers-imani",
            "accepted_at": "2026-06-21T00:10:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-06-21T00:10:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://hollis-grant.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://hollis-grant.example",
            "display_name": "Hollis Grant",
            "pronouns": "he/him",
            "location": {
              "city": "Asheville",
              "region": "North Carolina",
              "country": "United States"
            },
            "intent_tags": [
              "governance",
              "building"
            ],
            "about": "Implementer of a Kindling client for rural libraries. Standing for one of the elected implementer seats.",
            "contact_methods": [
              {
                "type": "email",
                "value": "hollis@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-07-30T14:00:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-07-30T14:00:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-07-30T14:00:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-spec-readers-hollis",
            "accepted_at": "2026-07-30T14:00:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-07-30T14:00:00Z",
          "added_by": "josh@intellibotique.com"
        }
      ]
    }
  • Toward a Working Group

    pools/working-group.json · public · vouching-required · 3 curators · 3 invented entries · schema_version 0.1

    Show the manifest
    {
      "schema_version": "0.1",
      "id": "working-group",
      "name": "Toward a Working Group",
      "curator": [
        {
          "identity": "josh@intellibotique.com",
          "display_name": "Kindling maintainers",
          "verification_level": "oauth",
          "primary": true
        },
        {
          "identity": "tobias@mail.example",
          "display_name": "Tobias Weiler",
          "verification_level": "oauth",
          "primary": false
        },
        {
          "identity": "ingrid@mail.example",
          "display_name": "Ingrid Solberg",
          "verification_level": "oauth",
          "primary": false
        }
      ],
      "intent_tags": [
        "governance"
      ],
      "visibility": "public",
      "consent_model": "vouching-required",
      "curator_contact": "josh@intellibotique.com",
      "charter": "People willing to stand for the Working Group that governs Kindling by v1.0: two elected implementer seats, one IndieWeb seat and a rotating advisory. Each person is vouched for by someone already here. Being in this Pool is not a seat; it is a list of people willing to serve.",
      "governance_rules": "Entry requires one vouch from a current member. A vouch is local to this Pool and carries nowhere else.",
      "messaging_preferences": {
        "block_list_subscriptions": [
          "https://protocol.kindling.foundation/blocklist.json"
        ]
      },
      "status": "active",
      "created_at": "2026-08-01T09:00:00Z",
      "updated_at": "2026-08-12T16:45:00Z",
      "entries": [
        {
          "profile_url": "https://tobias-weiler.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://tobias-weiler.example",
            "display_name": "Tobias Weiler",
            "pronouns": "he/him",
            "location": {
              "city": "Berlin",
              "country": "Germany"
            },
            "intent_tags": [
              "spec-review",
              "indieweb",
              "governance"
            ],
            "about": "IndieWeb regular since the h-card days. Reads specs for ambiguity and files polite issues.",
            "contact_methods": [
              {
                "type": "email",
                "value": "tobias@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-08-01T10:00:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-08-01T10:00:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-08-01T10:00:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-working-group-tobias",
            "accepted_at": "2026-08-01T10:00:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-08-01T10:00:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://ingrid-solberg.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://ingrid-solberg.example",
            "display_name": "Ingrid Solberg",
            "pronouns": "she/her",
            "location": {
              "city": "Bergen",
              "country": "Norway"
            },
            "intent_tags": [
              "spec-review",
              "governance"
            ],
            "about": "Identity-protocol veteran. Reviewing the v0.2 draft for cryptographic identity.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ingrid@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-08-01T10:30:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-08-01T10:30:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-08-01T10:30:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-working-group-ingrid",
            "accepted_at": "2026-08-01T10:30:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-08-01T10:30:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://hollis-grant.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://hollis-grant.example",
            "display_name": "Hollis Grant",
            "pronouns": "he/him",
            "location": {
              "city": "Asheville",
              "region": "North Carolina",
              "country": "United States"
            },
            "intent_tags": [
              "governance",
              "building"
            ],
            "about": "Implementer of a Kindling client for rural libraries. Standing for one of the elected implementer seats.",
            "contact_methods": [
              {
                "type": "email",
                "value": "hollis@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "curator-vouched",
              "verified_at": "2026-08-12T16:45:00Z",
              "verifier": "ingrid@mail.example"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-08-12T16:45:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-08-12T16:45:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-working-group-hollis",
            "accepted_at": "2026-08-12T16:45:00Z",
            "method": "curator-vouching"
          },
          "verification_level": "curator-vouched",
          "added_at": "2026-08-12T16:45:00Z",
          "added_by": "ingrid@mail.example"
        }
      ]
    }
  • Writers and Researchers

    pools/writers-and-researchers.json · public · universal-opt-in · 2 curators · 3 invented entries · schema_version 0.1

    Show the manifest
    {
      "schema_version": "0.1",
      "id": "writers-and-researchers",
      "name": "Writers and Researchers",
      "curator": [
        {
          "identity": "josh@intellibotique.com",
          "display_name": "Kindling maintainers",
          "verification_level": "oauth",
          "primary": true
        },
        {
          "identity": "meilin@mail.example",
          "display_name": "Mei-Lin Zhou",
          "verification_level": "oauth",
          "primary": false
        }
      ],
      "intent_tags": [
        "research",
        "writing",
        "journalism"
      ],
      "visibility": "public",
      "consent_model": "universal-opt-in",
      "curator_contact": "josh@intellibotique.com",
      "charter": "People who write about social technology, the friendship recession and the open-protocol revival, and want to talk to the curators and builders doing the work. The maintainers answer questions here; nobody here is owed a quote.",
      "messaging_preferences": {
        "block_list_subscriptions": [
          "https://protocol.kindling.foundation/blocklist.json"
        ]
      },
      "status": "active",
      "created_at": "2026-09-25T07:00:00Z",
      "updated_at": "2026-09-26T16:20:00Z",
      "entries": [
        {
          "profile_url": "https://meilin-zhou.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://meilin-zhou.notion.example",
            "display_name": "Mei-Lin Zhou",
            "pronouns": "she/her",
            "location": {
              "city": "Singapore",
              "country": "Singapore"
            },
            "intent_tags": [
              "research",
              "writing"
            ],
            "about": "Sociologist studying how adults make friends after thirty. Interested in what curation looks like as a craft.",
            "contact_methods": [
              {
                "type": "email",
                "value": "meilin@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-09-25T07:15:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-09-25T07:15:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-09-25T07:15:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-writers-and-researchers-meilin",
            "accepted_at": "2026-09-25T07:15:00Z",
            "method": "oauth"
          },
          "verification_level": "oauth",
          "added_at": "2026-09-25T07:15:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://obinna-eze.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://obinna-eze.example",
            "display_name": "Obinna Eze",
            "pronouns": "he/him",
            "location": {
              "city": "Lagos",
              "country": "Nigeria"
            },
            "intent_tags": [
              "journalism",
              "writing"
            ],
            "about": "Technology reporter. Covers open protocols and the people who keep them running.",
            "contact_methods": [
              {
                "type": "email",
                "value": "obinna@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "email",
              "verified_at": "2026-09-25T13:40:00Z"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-09-25T13:40:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-09-25T13:40:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-writers-and-researchers-obinna",
            "accepted_at": "2026-09-25T13:40:00Z",
            "method": "email-link"
          },
          "verification_level": "email",
          "added_at": "2026-09-25T13:40:00Z",
          "added_by": "josh@intellibotique.com"
        },
        {
          "profile_url": "https://ruth-adler.notion.example",
          "parsed_profile": {
            "schema_version": "0.1",
            "profile_url": "https://ruth-adler.notion.example",
            "display_name": "Ruth Adler",
            "pronouns": "she/her",
            "location": {
              "city": "Chicago",
              "region": "Illinois",
              "country": "United States"
            },
            "intent_tags": [
              "writing",
              "editing",
              "curating"
            ],
            "about": "Editor of the Circular. Spent thirty years on a city desk and still circles things in red.",
            "contact_methods": [
              {
                "type": "email",
                "value": "ruth@mail.example",
                "label": "Kindling identity"
              }
            ],
            "verification": {
              "level": "oauth",
              "verified_at": "2026-09-26T16:20:00Z",
              "verifier": "google"
            },
            "messaging_preferences": {
              "accept_from": "verified",
              "no_cold_messages": false,
              "minimum_curator_verification": "email"
            },
            "kindling_noindex": false,
            "parsed_at": "2026-09-26T16:20:00Z",
            "parser": "kindling-parser/0.1.1"
          },
          "parsed_at": "2026-09-26T16:20:00Z",
          "consent_proof": {
            "handshake_id": "hs-kindling-writers-and-researchers-ruth",
            "accepted_at": "2026-09-26T16:20:00Z",
            "method": "email-link"
          },
          "verification_level": "oauth",
          "added_at": "2026-09-26T16:20:00Z",
          "added_by": "josh@intellibotique.com"
        }
      ]
    }
  • The demo handshake request

    handshake/demo-request.json · handshake-request · to hollis-grant.example · sent 27 September 2026, expires 11 October 2026. It drives the handshake page.

    Show the request
    {
      "schema_version": "0.1",
      "type": "handshake-request",
      "handshake_id": "hs-kindling-client-builders-hollis-demo",
      "pool": {
        "url": "https://kindling.foundation/pools/client-builders.json",
        "name": "Client Builders",
        "charter": "Developers building Kindling clients, readers, hosts and tools, in any stack. For trading notes, reviewing each other’s conformance, and finding a second pair of eyes before a release. Not for recruiting or selling.",
        "curator_identity": "josh@intellibotique.com",
        "curator_verification": "oauth",
        "intent_tags": [
          "building",
          "open-source"
        ],
        "visibility": "public"
      },
      "profile_url": "https://hollis-grant.example",
      "sent_at": "2026-09-27T15:00:00Z",
      "expires_at": "2026-10-11T15:00:00Z",
      "accept_url": "https://kindling.foundation/handshake/hs-kindling-client-builders-hollis-demo/accept",
      "decline_url": "https://kindling.foundation/handshake/hs-kindling-client-builders-hollis-demo/decline"
    }
Art. IIIWell-known

The domain’s well-known file.

Any domain hosting a Pool should publish /.well-known/kindling-pool, so crawlers and registries can find its Pools without asking anyone (§8.3, §10). This one lists all five.

Pools listed in the file
Poolmanifest_urlVisibilityStatusLast updated
Founding Curatorshttps://kindling.foundation/pools/founding-curators.jsonpublicactive18 August 2026
Client Buildershttps://kindling.foundation/pools/client-builders.jsonpublicactive2 July 2026
Spec Readershttps://kindling.foundation/pools/spec-readers.jsonpublicactive30 July 2026
Toward a Working Grouphttps://kindling.foundation/pools/working-group.jsonpublicactive12 August 2026
Writers and Researchershttps://kindling.foundation/pools/writers-and-researchers.jsonpublicactive26 September 2026

Operator: Kindling maintainers (TranquilTech), josh@intellibotique.com. If a Pool went dormant, its status here would say so too (§9.1).

Show the file
{
  "schema_version": "0.1",
  "pools": [
    {
      "manifest_url": "https://kindling.foundation/pools/founding-curators.json",
      "name": "Founding Curators",
      "intent_tags": [
        "curating",
        "founding-cohort"
      ],
      "visibility": "public",
      "status": "active",
      "last_updated": "2026-08-18T15:00:00Z"
    },
    {
      "manifest_url": "https://kindling.foundation/pools/client-builders.json",
      "name": "Client Builders",
      "intent_tags": [
        "building",
        "open-source"
      ],
      "visibility": "public",
      "status": "active",
      "last_updated": "2026-07-02T08:05:00Z"
    },
    {
      "manifest_url": "https://kindling.foundation/pools/spec-readers.json",
      "name": "Spec Readers",
      "intent_tags": [
        "spec-review",
        "indieweb"
      ],
      "visibility": "public",
      "status": "active",
      "last_updated": "2026-07-30T14:00:00Z"
    },
    {
      "manifest_url": "https://kindling.foundation/pools/working-group.json",
      "name": "Toward a Working Group",
      "intent_tags": [
        "governance"
      ],
      "visibility": "public",
      "status": "active",
      "last_updated": "2026-08-12T16:45:00Z"
    },
    {
      "manifest_url": "https://kindling.foundation/pools/writers-and-researchers.json",
      "name": "Writers and Researchers",
      "intent_tags": [
        "research",
        "writing",
        "journalism"
      ],
      "visibility": "public",
      "status": "active",
      "last_updated": "2026-09-26T16:20:00Z"
    }
  ],
  "operator": {
    "name": "Kindling maintainers (TranquilTech)",
    "contact": "josh@intellibotique.com",
    "url": "https://kindling.foundation"
  }
}
Art. IVBlock lists

Kindling’s own block list.

The spec requires the Kindling project to publish a public block list of known abusers, identified by Kindling identity (§7.3). This is it: blocklist.json, version 3, published 20 September 2026.

What it contains
TargetIdentifierReasonAdded
implementationscrapekit/0.3scraping · Ignores kindling-noindex and robots signals.2 July 2026
identitypromo-blast@mail.examplespam14 August 2026

What an entry holds

An identifier (a Kindling identity or a piece of software), a reason category from a fixed list, an optional one-line reason about behavior, and a date.

What it never holds

No personal details: no names, no profile pages, no photos, no locations, and nobody’s story. The schema asks publishers to keep it that way, because the list is public.

Nothing runs at TranquilTech yet, so these two entries are examples of the shape. mail.example is a reserved example domain. All five Pools subscribe to this list alone. The invented example sites also subscribe to the Circular consortium’s list, an invented list with 4 entries (version 8), which shows that anyone may publish one.

Show Kindling’s list
{
  "schema_version": "0.1",
  "list_id": "kindling-public",
  "name": "Kindling public block list",
  "description": "The block list the Kindling project will publish under SPEC.md §7.3, for identities and implementations with confirmed abuse. The entries here are illustrative until the registry opens. No personal details are ever published.",
  "publisher": {
    "identity": "josh@intellibotique.com",
    "name": "Kindling maintainers",
    "url": "https://protocol.kindling.foundation/blocklist.json"
  },
  "version": 3,
  "published_at": "2026-09-20T12:00:00Z",
  "entries": [
    {
      "target_type": "implementation",
      "target_identifier": "scrapekit/0.3",
      "reason_category": "scraping",
      "reason_detail": "Ignores kindling-noindex and robots signals.",
      "added_at": "2026-07-02T10:00:00Z"
    },
    {
      "target_type": "identity",
      "target_identifier": "promo-blast@mail.example",
      "reason_category": "spam",
      "added_at": "2026-08-14T16:00:00Z"
    }
  ]
}
Art. VSchema gaps

What the v0.1 schema can’t say yet.

Where the spec text and a schema disagree, our JSON follows the schema, and we name the gap here. These are the ones that touch the project’s own Pools.

  1. Verification levels have two sets of names.

    The spec names email-verified, oauth-verified, curator-vouched and unverified. The schemas use email, oauth, curator-vouched, unverified and cryptographic, and a curator can only be email, oauth or cryptographic. Our JSON follows the schemas; our pages show the level in words, with an icon.

  2. A vouch has no field of its own.

    Toward a Working Group needs “one vouch from a current member”, but vouching-required can’t say who may vouch or how many vouches it takes, so the rule lives in governance_rules text. Hollis’s vouch shows up in two places: parsed_profile.verification (level curator-vouched, verifier Ingrid Solberg) and consent_proof.method: "curator-vouching", which mixes how he was verified with how he said yes. The schema says the verifier is “the curator’s identity”, so a vouch from a member who is not a curator has nowhere to go. Here it fits only because Ingrid is a co-curator. And added_by names the maintainers, not the person who vouched.

  3. One profile, two levels, one field.

    Hollis is signed in with OAuth in Spec Readers, but in the Working Group his cached profile says curator-vouched, because the vouch is local to that Pool. verification.level is described as “the strongest verification this profile holds”, yet the schema sets no order between oauth and curator-vouched and holds only one. We store the Pool-local level on each entry, which is what the spec asks.

  4. The 14-day window has no manifest field.

    The spec says the window is configurable per Pool. These Pools use the default, carried in each request’s expires_at. Their governance_rules don’t say so yet.

  5. There is no “planned” status.

    A Pool is active, dormant or archived, and the well-known file must say which. These five are planned, so their files say active, and this page and the Pools page say planned.

  6. Six message types, not four.

    The spec lists four. The schema has six, adding withdrawal and system. Leaving on the handshake page sends a withdrawal.

  7. No provenance field.

    The spec names an extraction_source field. parsed_profile has none and forbids extra properties, so these profiles can’t say which fields were marked up and which were inferred.

  8. Noindex is not privacy inside a Pool.

    kindling_noindex: true means “do not include me in any Pool”. How private a Pool is comes from its visibility. All five of these are public on purpose.

  9. Auto-accept can’t reach an invite-only Pool.

    A rule may only allow public or unlisted visibility, so a rule could say yes to these public Pools but never to an invite-only one. Hollis has no rules, so his request waits.

  10. The well-known file differs from its section.

    The spec lists pool_url and curator_contact for each Pool. The schema calls it manifest_url and has no curator_contact, so ours carries the contact once, under operator.

  11. The version field has another name.

    The spec asks for kindling_version. Every schema uses schema_version, and so do these files.

  12. Block lists name more than identities.

    The spec says the project list identifies abusers by Kindling identity. The schema also allows implementations, profile URLs, Pool URLs and curator identities, and ours has an implementation entry. The glossary calls a list “signed”; the signature is optional, and ours has none yet.