Skip to content

Tags: indranilbanerjee/contentforge

Tags

v3.16.0

Toggle v3.16.0's commit message
release: v3.16.0 — Reliability & Truth release (five-layer deep audit…

… implemented)

Full-repo audit (orchestration / agents / skills / scripts / configs)
implemented end to end. 115 files, tests 53 -> 143.

Orchestration: checkpointing wired into the master skill (Step 0 init,
per-phase saves, loop counters, pending_rework), Pipeline Contract table
(reads/writes/gate/loop-target per phase), orchestrator-owned gates
verified via new text-metrics.py, no-brand + no-web modes, honest
sequential batch orchestrator (success = reviewer-approved >=7.0).

Agents: user interaction hoisted out of subagents (title curation +
image approvals orchestrator-owned via needs_user_decision), fact-checker
paywall/SERP fixes, Phase 6->6.5 protected-structure manifest, reviewer
industry weights fully specified, ~50 dangling slash refs fixed.

Skills: connector docs match shipped empty .mcp.json, cf-brief rewritten
for AEO/GEO (LSI/density dogma removed), EU AI Act Article 50 disclosure
step in cf-publish, YouTube Shorts + TikTok long-form, command/skill
twins collapsed to thin wrappers.

Configs: scoring-thresholds.json single source of truth (10 gates incl.
new Phase 8 gate), humanizer 29->35 patterns + defined AI-signal formula,
social specs add TikTok/Bluesky/YouTube Shorts + per-platform
ai_disclosure, 10 industry packs enriched + dated.

Scripts: new _common.py (single slugifier fixes Cowork sync-path bug,
atomic writes, UTF-8 guard, real exit codes), checkpoint-manager
meta/loop/pending-rework, pipeline-tracker --run-id, generate-docx image
embedding + TOC + footer + nested lists, Airtable injection fix, Drive
pagination. 90 new tests incl. release-consistency drift locks.

Canonical claim corrected: 10 phases + Step 0.5, 10 quality gates.

Co-Authored-By: Claude Fable 5 <[email protected]>

v3.15.3

Toggle v3.15.3's commit message
release: v3.15.3 — README sync patch (Release notes catch-up)

CF's specific gap: Release notes section still ended at v3.15.0 -- v3.15.1
(release-consistency tests) and v3.15.2 (market refresh) had shipped
without README updates here.

FIXED (CF README)
- Added v3.15.3, v3.15.2, v3.15.1 entries to "## Release notes"
- README hero callout + Supported surfaces heading + version badge
  all bumped to v3.15.3

CHANGED
- All 9 CF version declarations 3.15.2 -> 3.15.3

Tests: 53/53 passing. Zero runtime change.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

v3.15.2

Toggle v3.15.2's commit message
release: v3.15.2 — June 2026 market-refresh sync

Mirrors DMP v3.14.0 sweep into ContentForge. Docs-only — no pipeline
behavior change.

ADDED
- Model registry rebuilt to 47 entries verified against vendor primary
  docs (Anthropic / OpenAI / Google). Same canonical content as DMP+SF.
- scripts/resolve_model.py: now unconditionally rewrites `retired` model
  IDs to replacement_id; new --check-params scanner flags unsafe
  temperature/top_p/top_k near Claude Opus 4.7+.
- docs/MODEL-CURATOR.md refresh: aliases table + new section on Claude
  parameter compatibility for Opus 4.7+.

CHANGED
- All 9 version declarations 3.15.1 -> 3.15.2
- README hero callout rewritten
- Registry last_updated 2026-06-28

Tests: 53/53 passing.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

v3.15.1

Toggle v3.15.1's commit message
release: v3.15.1 — release-consistency test suite (+30 tests, 23 -> 53)

New tests/test_release_consistency.py catches:
- 7-manifest version drift (5 Claude-family + Hermes plugin.yaml + OpenClaw)
- README version-badge / hero callout / supported-surfaces heading staleness
- CHANGELOG header out-of-sync with canonical version
- byte-identical descriptions across 5 Claude-family manifests
- description mentions actual `21 skills` count
- README test-count badge matches actual `def test_*` count
- 7 native-platform install commands present in README
- 12 critical README sections present (Why ContentForge, Supported surfaces,
  Quick start, What ContentForge does, Architecture, Connectors,
  Troubleshooting, Updating, FAQ, Cross-platform compatibility, Release notes,
  8-platform name mentions)
- every internal anchor link in README resolves to a real heading

All 8 version declarations bumped 3.15.0 -> 3.15.1.
Hero callout + test badge updated.

Suite: 53/53 passing.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

v3.15.0

Toggle v3.15.0's commit message
v3.15.0: native Hermes Agent + OpenClaw + test suite

Brings ContentForge into parity with DMP v3.13.0+ on cross-platform support.

Added - Native Hermes Agent plugin
- plugin.yaml at repo root with required fields (name, version, description,
  author, license, homepage). Zero env vars, zero hooks.
- __init__.py at repo root exposing register(ctx). Walks skills/ and exposes
  all 21 CF skills via ctx.register_skill(). Defensive coding throughout -
  stdlib only, never raises.
- Install: hermes plugins install indranilbanerjee/contentforge
- Targets Hermes Desktop v0.15.2+
- Spec: https://hermes-agent.nousresearch.com/docs/guides/build-a-hermes-plugin

Added - Native OpenClaw manifest
- openclaw.plugin.json at repo root with id + configSchema (required) plus
  optional name/description/version/skills: ['./skills'].
- Install: openclaw plugins install git:github.com/indranilbanerjee/contentforge
- Spec: https://docs.openclaw.ai/plugins/manifest

Added - Test suite (0 -> 23)
- tests/test_hermes_adapter.py (12 tests): plugin.yaml schema, adapter import
  smoke, register() against mock ctx, graceful degradation on bad ctx / None,
  version consistency between plugin.yaml and __init__.py
- tests/test_openclaw_manifest.py (11 tests): manifest exists, id required +
  kebab-case + matches Claude plugin name, configSchema validation, skills
  field points at ./skills directory, version matches canonical, no
  unexpected top-level fields, cross-manifest version consistency
- tests/run_all.py runs all: 23/23 passing

Changed
- All 5 platform manifests bumped to v3.15.0
- README 'Supported surfaces' table: 6 rows -> 8 (added Hermes + OpenClaw)
- Added '35+ additional Agent Skills platforms' callout

Zero impact on existing Claude Code / Cowork / Codex / Cursor / Copilot CLI /
Antigravity behavior - each platform reads its own manifest path.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

v3.14.0

Toggle v3.14.0's commit message
v3.14.0: distribution & context-efficiency polish

- Plugin descriptions trimmed to ~150 chars across all 5 manifests
- Skill count corrected from 19 to 21
- README hero rewritten pain-first
- Context-efficiency callout added to 10 heaviest skills
- (Topics curated via gh CLI separately)

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

v3.13.0

Toggle v3.13.0's commit message
v3.13.0: real native manifests for 5 verified agent surfaces

v3.12.11

Toggle v3.12.11's commit message
v3.12.11: honest positioning — Claude Code + Cowork only

v3.12.10

Toggle v3.12.10's commit message
v3.12.10: closes 3 roadmap items + fixes /plugin scope error

Roadmap items closed (all three from v3.12.9):

1. Brand profile read-back from Drive on session start
   - cf-style-guide Step 0: agent checks Drive first, downloads
     profile.json via MCP if found, skips re-creation
   - cf-style-guide Step 6.5: agent uploads new profile to Drive
     after save (when Cowork+Drive configured)

2. Cross-session checkpoint resume in Cowork
   - checkpoint-manager.save_phase auto-marks each saved artifact as
     pending upload (writes to _sync-pending.json) when Cowork+Drive
     config exists
   - output-manager Step D0b consumes _sync-pending.json after each
     phase, uploads via Drive MCP, marks as uploaded
   - resume command Step 0 pulls run dir from Drive first when in
     Cowork, then existing checkpoint-manager resume logic works

3. Multi-team namespace isolation
   - cf-cowork-setup Step 4 asks user for Drive root folder name
     (default: "ContentForge"); different teams pick different names
   - All ops use this root via drive-sync-state read-config
   - Implicit isolation; no shared state collision

New scripts/drive-sync-state.py is the single source of truth for
local-side sync state (Cowork config, per-brand profile hash, per-run
pending list). Stdlib only. Architecture: Python writes state markers,
agent reads them and performs Drive transfers via MCP (because Python
subprocess can't call MCP tools directly).

_shared/cf_drive_sync_test_harness.py adds 15 tests covering all
state transitions + 2 integration tests with checkpoint-manager.
All 15 pass.

Also fixed: /plugin scope error in README + MEMORY. The /plugin
slash command family was wrongly documented as working in Cowork --
verified wrong via Indranil's live Cowork testing. /plugin works only
in Claude Code (CLI + IDE extension). In Cowork, plugin management
is via UI panel. Plugin-defined skills like /contentforge:* still
work everywhere.

What still needs live Cowork validation (orchestration layer):
- Profile read-back from Drive on subsequent sessions
- Resume across closed/reopened Cowork sessions
- Multi-team data isolation
(Python side fully tested; MCP interactions only verifiable in live
Cowork session.)

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>

v3.12.9

Toggle v3.12.9's commit message
v3.12.9: Cowork is the recommended team env, with Drive routing

User feedback: Cowork is the friendliest Anthropic surface for non-CLI
marketing teams; "I want my team to use these things on the plugin in
Cowork". v3.12.8 told them to switch to local Claude Code instead --
which contradicts how teams actually want to work.

v3.12.9 fixes this properly with environment-aware output routing:

* agents/08-output-manager.md Step D0: probes environment first; in
  Cowork, scans for any Drive MCP (Anthropic platform, Pipedream,
  Composio, Zapier, Make) and uploads the final .docx to
  My Drive/ContentForge/{brand}/{type}/{YYYY-MM}/ via the MCP tool.
  Completion card shows Drive URL, not a non-existent Windows path.
  Falls back to a clear warning + 3 recovery options if no Drive MCP.

* commands/brand-setup.md: Step G.0 now probes environment FIRST,
  then connectors. Decision matrix splits Cowork vs Local. In Cowork
  with Drive, brand profile JSON saves to Drive (persists across
  sessions, team-shareable). In Cowork without Drive, walks user
  through Cowork Settings -> Integrations -> Google Drive (60 sec).

* skills/cf-cowork-setup/ NEW. /contentforge:cf-cowork-setup is the
  one-shot wizard: verifies Cowork env, finds Drive MCP, creates the
  canonical Drive folder layout, saves config so future sessions
  auto-route. Run once after install; team uses ContentForge normally
  from then on.

* skills/cf-environment/SKILL.md: Cowork matrix split into two
  columns (Cowork+Drive = recommended for teams, all checks; Cowork
  alone = session-only). Removed the "use local Claude Code instead"
  framing. Cowork+Drive IS the full team setup now.

* README cross-platform section rewritten. Lead row: "Anthropic
  Cowork + Google Drive = Recommended for teams". Added "How to
  pick" decision guide: marketing teams -> Cowork+Drive; solo
  developers -> local Claude Code; on-prem-only -> local Claude Code.

Honest roadmap kept open in CHANGELOG:
- Cross-session checkpoint resume in Cowork (needs checkpoint-manager
  to write to Drive too) -- queued v3.12.10
- Drive-as-input (subsequent sessions reading existing brand profile
  from Drive) -- queued v3.12.10
- Multi-team isolation in shared Drive _brands/ folder -- needs work
  for 50+ client agencies

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>