Content agents that write in the voice you approved
The brand guidelines say never write "synergy." The content agent read them once, in a prompt, three hundred prompts ago. The newsletter says synergy.
The mixture
- 01 · Persistent memory
- Uses
- 02 · Current context
- Uses
- 03 · Traceable decisions
- Light
- 04 · Shared context
- Uses
- 05 · Scoped retrieval
- Leads
Every draft forgets the brand
Brand drift is rarely one bad draft. It is a slow slide, one plausible sentence at a time.
- 01
Guidelines are prompts, not context
Voice, banned words and positioning are pasted into a system prompt that grows until someone trims it. Whatever was trimmed is what gets violated.
- 02
Old positioning resurfaces
The product was repositioned in spring. The agent keeps pulling phrasing from last year's launch posts, because they are the best-performing pages.
- 03
Every channel drifts separately
The social agent, the blog agent and the email agent each learned the brand from different examples, and it shows.
Mostly scoped retrieval. Then three others.
Every application on Alchemyst is a different mixture of the same five jobs. That mixture is what makes this a different piece of software from the one next to it, even though the API underneath is identical.
The nearest match stops winning
Content is retrieved by campaign, channel and audience scope, with retired positioning subtracted. The agent drafts from the few approved examples that fit this piece, not from everything you have ever published.
- Approved examples beat popular ones.
- Retired positioning stays retired.
- Each channel drafts from that channel.
Uses · Shared context
One voice across channels
Every content agent reads the same brand definitions and approved examples.
Uses · Current context
This season's positioning
When positioning changes, last season's messaging is subtracted.
Uses · Persistent memory
Editor feedback, remembered
Edits and rejections are written back, so the same mistake is not made twice.
That is four of the five. The fifth, traceable decisions (every answer carries the exact context it was served, and why), is what leads in Customer support, IT & incident response and Compliance & audit instead. Same API, different mixture.
The sources you already have
Bring sources in through the data-source integrations (PostgreSQL, MongoDB, Google Docs, Google Sheets, Amazon S3), an n8n workflow, or a direct context.add call. Each one lands scoped, so retrieval can intersect it with everything else.
01 · Ingest
Scope what you ingest
Every document lands with a groupName: the sets it belongs to. Those sets are what retrieval intersects later, so the structure you choose here is the precision you get there.
context.addimport AlchemystAI from "@alchemystai/sdk";const client = new AlchemystAI(); // reads ALCHEMYST_AI_API_KEYawait client.v1.context.add({ context_type: "resource", scope: "internal", source: "brand", documents: [{ content: "Voice: plain, specific, confident. Never use \"synergy\" or \"revolutionary\". Lead with the customer's problem.", }], metadata: { fileName: "voice-guidelines-2026.md", groupName: ["marketing", "brand"], // the sets this belongs to },});02 · Write
Write the editor's correction back
Every edit is a lesson. Store it in the brand scope, and the next draft starts from what the editor already fixed.
context.memory.addawait client.v1.context.memory.add({ sessionId: "brand_editorial", contents: [{ role: "user", content: "Rejected: headline was a rhetorical question. House style is statements, not questions.", }], metadata: { groupName: ["marketing", "brand", "feedback"] },});03 · Search
Search before drafting
Search intersects the scopes, subtracts superseded and duplicate content, and ranks what survives. Only that reaches the model, and the whole decision is recorded as a Context Trace.
context.searchconst { contexts } = await client.v1.context.search({ query: "Draft the October product newsletter", scope: "internal", similarity_threshold: 0.8, minimum_similarity_threshold: 0.5, metadata: { groupName: ["marketing", "brand"] }, // ∩ narrow scope});// − superseded, deduplicated → ranked → into the window// Every search is recorded as a Context Trace.const reply = await llm.respond(message, { context: contexts });
npm install @alchemystai/sdk or pip install alchemystai, both ship the same client. Full reference in the docs.
Unreleased campaigns are confidential
Launch plans, embargoed announcements and pricing changes sit in the same corpus as published posts. Keep them in scopes that only the right agents can read until launch day.
Security & complianceManaged cloud
Encrypted in transit and at rest, isolated per organization, and scoped at write time.
Dedicated infrastructure
EnterpriseSingle-tenant, with VPC peering when your data cannot share a network boundary.
Self-hosted
On-premiseRun the context layer on your own infrastructure, with OpenTelemetry for observability.
The same API, a different mixture
Each of these leads with a different job, pulls from a different set of sources and needs a different call. All of them, by job.
Bring the draft your editor rewrote.
The one that sounded like everyone except you.