Open-source marketing skills that run on any model.
Project description
brand-loom
Open-source marketing skills that run on any model — with a hosted brand-memory engine. No coding agent required.
brand-loom is a small library of commodity marketing skills — hooks, captions, hashtags, content
repurposing, SEO outlines, FAQs, schema.org markup, CTAs — that run on any LLM (OpenAI, Anthropic, Gemini,
or a local model via Ollama). Bring your own key. No coding agent, no vendor lock-in.
Want it on-brand and multi-platform automatically — without writing prompts? That's the hosted engine at neoxra.com (auto voice extraction, multi-platform orchestration, Brand Kit).
brand-loomis the open core; Neoxra hosts the rest.
Why brand-loom
- Model-agnostic. One interface, four providers, BYOK. Swap models with one env var.
- No coding agent required. Plain Python — not coupled to Claude Code / Cursor / OpenClaw.
- Brand-aware seam. Every skill accepts an optional
brand_context. Ship a basic default here; get automatic, extracted brand voice on hosted Neoxra.
Quickstart (60 seconds, no API key)
pip install brand-loom
from brand_loom.providers import use_provider
from brand_loom.skills.hook import HookSkill
use_provider("fake") # runs with zero keys; swap for "openai"/"anthropic"/"gemini"/"ollama"
skill = HookSkill()
print(skill.run_topic("How we cut cloud costs 40%"))
Real provider (BYOK):
pip install "brand-loom[openai]"
export OPENAI_API_KEY=sk-...
export BRANDLOOM_PROVIDER=openai
Run it as an agent (no coding agent required):
brand-loom run hook --text "How we cut cloud costs 40%"
brand-loom chain hook,caption --text "How we cut cloud costs 40%" --brand brand.json
A thin, linear runner — one skill or a simple chain, on any model. Sophisticated multi-platform orchestration (voice-matched, Planner→Critic, auto fan-out) lives in hosted Neoxra.
Agent chain (Python API):
from brand_loom.agent import run_chain, run_skill
from brand_loom.providers import use_provider
use_provider("fake") # or "openai", "anthropic", "gemini", "ollama"
# Single skill
result = run_skill("hook", "How we cut cloud costs 40%")
print(result.text)
# Chain: hook → caption
result = run_chain(["hook", "caption"], "How we cut cloud costs 40%")
print(result.text)
# With brand context
result = run_skill("hook", "AI marketing", brand_context={
"tone": ["bold", "witty"],
"audience": "startup founders",
})
print(result.text)
Install in your coding agent
brand-loom also works as an agent skill in Claude Code, Cursor, OpenClaw, and any skills.sh-compatible host:
npx skills add hogan-tech/brand-loom
Each skill is available as a SKILL.md in the skills/ directory with frontmatter that agent hosts parse
automatically. No configuration needed — install and use.
brand-loom remains model-agnostic and usable without any coding agent via
pip install brand-loom+ the CLI. The agent-skill surface is additive distribution, not a requirement.
Skills (v0.1)
| Skill | What it does |
|---|---|
hook |
Headline / hook options for a topic |
caption |
Platform caption from a topic + brand_context |
hashtags |
Relevant, deduped hashtag set |
repurpose |
long→short, article→thread, article→carousel copy |
seo_outline |
4–8 section SEO article outline (locale-parametric) |
faq |
3–6 Q&A pairs from a body of text |
schema_org |
FAQPage / Article / Breadcrumb JSON-LD (no LLM) |
cta |
Call-to-action variants for a goal |
Providers
| Provider | Extra | Env |
|---|---|---|
| OpenAI | brand-loom[openai] |
OPENAI_API_KEY |
| Anthropic | brand-loom[anthropic] |
ANTHROPIC_API_KEY |
| Gemini | brand-loom[gemini] |
GEMINI_API_KEY |
| Ollama (local) | built-in (HTTP) | OLLAMA_HOST |
| Fake (tests/demo) | built-in | — |
The brand_context seam
Skills accept an optional brand_context dict (tone, audience, do_phrases, avoid_phrases). brand-loom
ships an empty/basic default. Automatic voice extraction from your existing content, multi-platform fan-out, and a
no-code UI live in hosted Neoxra — see HOSTED.md.
Contributing
PRs welcome — read CONTRIBUTING.md, SCOPE.md, and sign the CLA. In scope: single-shot commodity skills. Out of scope: voice engine, orchestration, tuned scorers, analytics/publish integrations (these live in the hosted product).
License
Apache-2.0. Hosted by Neoxra · a Meridian Global product.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file brand_loom-0.1.1.tar.gz.
File metadata
- Download URL: brand_loom-0.1.1.tar.gz
- Upload date:
- Size: 39.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b48fd9f7c6842896145ff3e06ce389ace55110af5fb5d5535fc669d4cd3f13e9
|
|
| MD5 |
4b6f3c0eaa2b8adf598834c946ebec75
|
|
| BLAKE2b-256 |
03bef858b3ed64e379d786b20ac4db6e132b5059079c0bf2a0d4ca01a05bfa83
|
Provenance
The following attestation bundles were made for brand_loom-0.1.1.tar.gz:
Publisher:
publish.yml on hogan-tech/brand-loom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brand_loom-0.1.1.tar.gz -
Subject digest:
b48fd9f7c6842896145ff3e06ce389ace55110af5fb5d5535fc669d4cd3f13e9 - Sigstore transparency entry: 2172724729
- Sigstore integration time:
-
Permalink:
hogan-tech/brand-loom@f66d2d9fafd66275cfdc2163d69e23fcfaf508f6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hogan-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f66d2d9fafd66275cfdc2163d69e23fcfaf508f6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file brand_loom-0.1.1-py3-none-any.whl.
File metadata
- Download URL: brand_loom-0.1.1-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
522b0087025ac0a38cd85c5f4a35a7378c6d576aae2bef192855539328f0b0ff
|
|
| MD5 |
ca06d6977c4c525df6ba636873143aaa
|
|
| BLAKE2b-256 |
9728da95a8ecea2b72194e193b1d6476887a3b97370d3147d0eca20da71f48f1
|
Provenance
The following attestation bundles were made for brand_loom-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on hogan-tech/brand-loom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brand_loom-0.1.1-py3-none-any.whl -
Subject digest:
522b0087025ac0a38cd85c5f4a35a7378c6d576aae2bef192855539328f0b0ff - Sigstore transparency entry: 2172724777
- Sigstore integration time:
-
Permalink:
hogan-tech/brand-loom@f66d2d9fafd66275cfdc2163d69e23fcfaf508f6 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/hogan-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f66d2d9fafd66275cfdc2163d69e23fcfaf508f6 -
Trigger Event:
push
-
Statement type: