posse-distribution-architecture

Implement POSSE (Publish on Own Site, Syndicate Elsewhere) content distribution with canonical URLs, cross-platform syndication, backfeed collection, and resilient delivery. Covers multi-platform publishing automation and IndieWeb patterns. Triggers on POSSE implementation, content syndication architecture, or IndieWeb publishing requests.

Best use case

posse-distribution-architecture is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Implement POSSE (Publish on Own Site, Syndicate Elsewhere) content distribution with canonical URLs, cross-platform syndication, backfeed collection, and resilient delivery. Covers multi-platform publishing automation and IndieWeb patterns. Triggers on POSSE implementation, content syndication architecture, or IndieWeb publishing requests.

Teams using posse-distribution-architecture should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/posse-distribution-architecture/SKILL.md --create-dirs "https://raw.githubusercontent.com/organvm-iv-taxis/a-i--skills/main/distributions/claude/skills/posse-distribution-architecture/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/posse-distribution-architecture/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How posse-distribution-architecture Compares

Feature / Agentposse-distribution-architectureStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Implement POSSE (Publish on Own Site, Syndicate Elsewhere) content distribution with canonical URLs, cross-platform syndication, backfeed collection, and resilient delivery. Covers multi-platform publishing automation and IndieWeb patterns. Triggers on POSSE implementation, content syndication architecture, or IndieWeb publishing requests.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# POSSE Distribution Architecture

Publish on your own site first, then syndicate everywhere else — with resilience.

## POSSE Principle

```
Your Site (canonical) ──→ Platform A (syndicated copy)
         │               ├─→ Platform B (syndicated copy)
         │               ├─→ Platform C (syndicated copy)
         │               └─→ Newsletter (syndicated copy)
         │
         ←── Backfeed (likes, comments, reshares from platforms)
```

**Why POSSE over platform-first:**
- Own your canonical URL and content
- Platform changes don't destroy your archive
- Canonical URL gets SEO benefit
- Single source of truth for corrections

## Architecture

### Core Components

```python
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum

class SyndicationStatus(str, Enum):
    PENDING = "pending"
    PUBLISHED = "published"
    FAILED = "failed"
    RETRYING = "retrying"

@dataclass
class CanonicalContent:
    id: str
    title: str
    body: str
    canonical_url: str
    published_at: datetime
    content_type: str  # "essay", "note", "photo", "event"
    tags: list[str] = field(default_factory=list)
    syndications: dict[str, SyndicationStatus] = field(default_factory=dict)

@dataclass
class SyndicationTarget:
    platform: str
    adapter: "PlatformAdapter"
    enabled: bool = True
    format_rules: dict = field(default_factory=dict)
```

### Distribution Pipeline

```python
class POSSEDistributor:
    def __init__(self, targets: list[SyndicationTarget]):
        self.targets = {t.platform: t for t in targets if t.enabled}

    async def distribute(self, content: CanonicalContent) -> dict[str, str]:
        results = {}
        for platform, target in self.targets.items():
            try:
                adapted = target.adapter.adapt(content)
                syndication_url = await target.adapter.publish(adapted)
                content.syndications[platform] = SyndicationStatus.PUBLISHED
                results[platform] = syndication_url
            except RateLimitError:
                content.syndications[platform] = SyndicationStatus.RETRYING
                await self.queue_retry(platform, content)
            except Exception as e:
                content.syndications[platform] = SyndicationStatus.FAILED
                results[platform] = f"FAILED: {e}"
        return results
```

### Content Adaptation

```python
from abc import ABC, abstractmethod

class PlatformAdapter(ABC):
    @abstractmethod
    def adapt(self, content: CanonicalContent) -> dict:
        """Transform content for platform constraints."""

    @abstractmethod
    async def publish(self, adapted: dict) -> str:
        """Publish and return syndication URL."""

class BlueskyAdapter(PlatformAdapter):
    MAX_LENGTH = 300

    def adapt(self, content: CanonicalContent) -> dict:
        if content.content_type == "essay":
            text = f"{content.title}\n\n{content.body[:200]}...\n\n{content.canonical_url}"
        else:
            text = content.body[:self.MAX_LENGTH - len(content.canonical_url) - 2]
            text = f"{text}\n\n{content.canonical_url}"
        return {"text": text[:self.MAX_LENGTH], "tags": content.tags[:8]}

class NewsletterAdapter(PlatformAdapter):
    def adapt(self, content: CanonicalContent) -> dict:
        return {
            "subject": content.title,
            "html": render_email_template(content),
            "canonical_url": content.canonical_url,
        }

class DevToAdapter(PlatformAdapter):
    def adapt(self, content: CanonicalContent) -> dict:
        return {
            "title": content.title,
            "body_markdown": content.body,
            "canonical_url": content.canonical_url,
            "tags": content.tags[:4],
            "published": True,
        }
```

## Resilient Delivery

### Retry Queue

```python
import asyncio
from collections import defaultdict

class RetryQueue:
    def __init__(self, max_retries: int = 3, base_delay: float = 60):
        self.max_retries = max_retries
        self.base_delay = base_delay
        self.queue: list[tuple[str, CanonicalContent, int]] = []

    async def add(self, platform: str, content: CanonicalContent, attempt: int = 0):
        self.queue.append((platform, content, attempt))

    async def process(self, distributor: POSSEDistributor):
        while self.queue:
            platform, content, attempt = self.queue.pop(0)
            if attempt >= self.max_retries:
                log.error("syndication_abandoned", platform=platform, content_id=content.id)
                continue

            delay = self.base_delay * (2 ** attempt)
            await asyncio.sleep(delay)

            target = distributor.targets.get(platform)
            if not target:
                continue

            try:
                adapted = target.adapter.adapt(content)
                url = await target.adapter.publish(adapted)
                content.syndications[platform] = SyndicationStatus.PUBLISHED
            except Exception:
                await self.add(platform, content, attempt + 1)
```

### Circuit Breaker per Platform

```python
class PlatformCircuitBreaker:
    def __init__(self):
        self.circuits: dict[str, CircuitBreaker] = {}

    def get(self, platform: str) -> CircuitBreaker:
        if platform not in self.circuits:
            self.circuits[platform] = CircuitBreaker(
                failure_threshold=3,
                recovery_timeout=300,  # 5 minutes
            )
        return self.circuits[platform]

    async def publish(self, platform: str, adapter: PlatformAdapter, content: dict) -> str:
        circuit = self.get(platform)
        return await circuit.call(adapter.publish, content)
```

## Backfeed Collection

```python
async def collect_backfeed(syndication_urls: dict[str, str]) -> list[dict]:
    backfeed = []
    for platform, url in syndication_urls.items():
        try:
            adapter = get_adapter(platform)
            metrics = await adapter.get_metrics(url)
            backfeed.append({
                "platform": platform,
                "url": url,
                "likes": metrics.get("likes", 0),
                "reposts": metrics.get("reposts", 0),
                "comments": metrics.get("comments", []),
            })
        except Exception:
            pass  # Backfeed is best-effort
    return backfeed
```

## Syndication Manifest

```yaml
# syndication-manifest.yaml
content:
  - id: essay-2026-03-20-architecture
    canonical_url: https://example.com/essays/architecture
    published_at: 2026-03-20T10:00:00Z
    syndications:
      bluesky:
        status: published
        url: https://bsky.app/profile/.../post/...
        published_at: 2026-03-20T10:01:00Z
      devto:
        status: published
        url: https://dev.to/author/article
        published_at: 2026-03-20T10:02:00Z
      newsletter:
        status: published
        campaign_id: "abc123"
        published_at: 2026-03-20T10:05:00Z
    backfeed:
      total_likes: 42
      total_reposts: 8
      total_comments: 3
      last_collected: 2026-03-20T22:00:00Z
```

## Anti-Patterns

- **Platform-first publishing** — Always publish on own site first; canonical URL is sacred
- **No canonical URL** — Every syndicated copy must link back to the original
- **Synchronous distribution** — Publish locally first, syndicate asynchronously
- **No retry logic** — Platforms have outages; queue and retry failed syndications
- **Identical content everywhere** — Adapt format and length per platform
- **Ignoring backfeed** — Engagement data from platforms enriches the canonical record

Related Skills

knowledge-architecture

5
from organvm-iv-taxis/a-i--skills

Design knowledge systems using ontological principles—organizing by what things ARE rather than arbitrary hierarchies. Use when structuring personal knowledge bases, designing documentation systems, creating cross-domain linking patterns, building the {OS.me} ecosystem, or architecting information that reveals rather than obscures essential nature. Triggers on knowledge management, documentation architecture, information ontology, or systematic organization of complex domains.

content-distribution

5
from organvm-iv-taxis/a-i--skills

Promote creative and technical work through strategic content distribution. Covers platform selection, audience building, content repurposing, and engagement strategies without becoming a full-time marketer. Triggers on promotion, audience building, social media strategy, or content marketing requests.

taxonomy-modeling-design

5
from organvm-iv-taxis/a-i--skills

Phase 2 of the pentaphase structural-overhaul protocol. Classifies entities, standardizes attributes, establishes relationships, and designs the access framework. Use when the user invokes phase 2 of an overhaul, asks to "design the taxonomy" or "model the structure", or has completed a landscape audit and is ready to redesign. Consumes phase-1-landscape-report.md; produces phase-2-taxonomy-model.md.

systemic-ingestion-normalization

5
from organvm-iv-taxis/a-i--skills

Phase 4 of the pentaphase structural-overhaul protocol. Purges redundancies, enriches and aligns legacy entities to the new schema, executes phased ingestion into the new environment, and audits integrity. Use when the user invokes phase 4 of an overhaul, asks to "migrate the data" or "ingest into the new system", or has a configured environment ready to accept legacy entities. Consumes phase-3-environment-spec.md; produces phase-4-ingestion-report.md.

system-environment-configuration

5
from organvm-iv-taxis/a-i--skills

Phase 3 of the pentaphase structural-overhaul protocol. Translates the taxonomy model into objective technical criteria, evaluates candidate mechanisms or frameworks, instantiates the chosen architecture, and programs validation rules. Use when the user invokes phase 3 of an overhaul, asks to "select a system" or "configure the environment", or has a taxonomy model and is ready to choose technology. Consumes phase-2-taxonomy-model.md; produces phase-3-environment-spec.md.

pentaphase-orchestrator

5
from organvm-iv-taxis/a-i--skills

Threads the full five-phase structural-overhaul protocol — landscape discovery, taxonomy design, environment configuration, systemic ingestion, governance evolution — for any substrate the user names. Use when the user requests a structural overhaul, system redesign, or end-to-end restructuring of a documentation system, asset registry, code monorepo, knowledge base, or operational workflow; or when they explicitly invoke the pentaphase methodology. Coordinates handoffs between phase-skills and seats validation gates between phases.

landscape-discovery-audit

5
from organvm-iv-taxis/a-i--skills

Phase 1 of the pentaphase structural-overhaul protocol. Inventories assets, maps current flow, identifies friction, and defines value metrics for any substrate. Use when the user invokes phase 1 of an overhaul, requests a baseline audit, asks to "discover the landscape" of a system, or wants to understand current state before redesigning. Produces phase-1-landscape-report.md.

governance-evolution-protocol

5
from organvm-iv-taxis/a-i--skills

Phase 5 of the pentaphase structural-overhaul protocol. Codifies operational protocols, onboards the ecosystem of participants, programs behavior monitoring, and establishes an iteration cadence so the substrate evolves rather than calcifies. Use when the user invokes phase 5 of an overhaul, asks to "establish governance" or "lock in the protocols", or has completed ingestion and is ready to declare the substrate operational. Consumes phase-4-ingestion-report.md; produces phase-5-governance-charter.md, which closes the protocol.

dimension-surfacing

5
from organvm-iv-taxis/a-i--skills

Surfaces the parallel domain dimensions implicit in a dense or minimal prompt. Use when a user prompt is small on the surface but plainly implies multiple independent domains needing different expertise; when explicitly invoked by the coliseum-orchestrator skill as Phase 1; or when the user asks "what dimensions does this prompt encode" or "what axes does this break into." Produces a named dimension set where each dimension is independently executable and not a paraphrase of another.

coliseum-dispatch

5
from organvm-iv-taxis/a-i--skills

Dispatches a composed set of assignment envelopes to domain-expert subagents in parallel, in a single message with multiple Agent tool calls. Enforces the no-pingpong gate via the pingpong-detector agent before any dispatch fires. Use when invoked by the coliseum-orchestrator as Phase 3; when envelopes are already composed and the next step is parallel execution; or when the user asks to "fan out" or "dispatch in parallel." Produces a dispatch log capturing what was sent, when, and where returns land.

assignment-composition

5
from organvm-iv-taxis/a-i--skills

Wraps each surfaced dimension as a self-contained 9-section autonomous-work-assignment envelope — scope, context, success criteria, allowed tools, return format, handoff — all the recipient subagent needs to execute without coming back. Use when invoked by coliseum-orchestrator as Phase 2; when dimensions are named and the next step is to make each independently dispatchable; or when the user asks "compose this as an assignment." The no-pingpong gate validates each envelope before dispatch.

workspace-autopsy-governance

5
from organvm-iv-taxis/a-i--skills

Conducts a full automated autopsy of the current workspace directory to map files, identifies structural issues, proposes a restructuring plan (the signal), and establishes unified governance using templates. Use this skill when a user asks to map, restructure, reorganize, or apply new governance to an existing messy repository.