One call. Your agent reads the person it is talking to. The body's read, compressed into a word, a rhythm, a force, a half-truth, a compliance lever. Patent pending. Yours to import.
| Mode | What it returns | When to use it |
|---|---|---|
system_prompt | Claude-ready system addendum tuned to the user. | Prepend at every conversation start. |
identity_token | Signed JWT (HS256) carrying word, rhythm, force. | Pass between services. Verify with /api/identity-verify. |
scrub | Voice-clean text. No em-dashes, no AI tells. | Run on every model output before showing the user. |
draft | Rewrite text in the user's compressed voice. | When the user asks the agent to write something on their behalf. |
If your agent can do an HTTP request, you can use Noctara.
curl -X POST https://noctaracorp.com/api/mcp/system_prompt \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","style":"full"}'
Returns:
{
"ok": true,
"system_prompt": "# Identity context (Noctara behavioral read).\n\nYou are speaking to one person...",
"has_read": true
}
One block in your MCP config and the seventeen Noctara modes are tools your model can call.
{
"mcpServers": {
"noctara": {
"command": "npx",
"args": ["-y", "noctara-mcp-server"],
"env": {
"NOCTARA_API_BASE": "https://noctaracorp.com/api",
"NOCTARA_USER_EMAIL": "user@example.com",
"NOCTARA_CLIENT_ID": "your-app"
}
}
}
}
Full Claude install guide covers Desktop, Code, Cursor, Cline, and OpenClaw with the exact paths for each.
If you want a typed wrapper instead of raw fetch:
npm install @noctara/sdk # or pip install noctara
TypeScript:
import { Noctara } from "@noctara/sdk";
const noctara = new Noctara();
const { system_prompt } = await noctara.systemPrompt({ email: "user@example.com" });
Python:
from noctara import Noctara n = Noctara() sp = n.system_prompt(email="user@example.com")
Both SDKs are MIT-licensed. The patent does not encumber the SDK, only the underlying behavioral primitive.
import Anthropic from "@anthropic-ai/sdk";
async function noctaraSystemPrompt(email: string) {
const r = await fetch("https://noctaracorp.com/api/mcp/system_prompt", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, style: "full" }),
});
const j = await r.json();
return j.system_prompt as string;
}
const claude = new Anthropic();
const identity = await noctaraSystemPrompt("user@example.com");
const msg = await claude.messages.create({
model: "claude-opus-4-7",
max_tokens: 1024,
system: identity + "\n\n# Your task.\nYou are a helpful agent for this person.",
messages: [{ role: "user", content: "What should I do tomorrow?" }],
});
import { generateText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";
const identity = await noctaraSystemPrompt(userEmail);
const { text } = await generateText({
model: anthropic("claude-opus-4-7"),
system: identity,
prompt: userMessage,
});
import httpx
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import SystemMessage, HumanMessage
def noctara_system_prompt(email: str) -> str:
r = httpx.post(
"https://noctaracorp.com/api/mcp/system_prompt",
json={"email": email, "style": "full"},
)
return r.json()["system_prompt"]
llm = ChatAnthropic(model="claude-opus-4-7")
identity = noctara_system_prompt("user@example.com")
resp = llm.invoke([
SystemMessage(content=identity),
HumanMessage(content="What should I do tomorrow?"),
])
If your stack has more than one service, mint an identity_token once and verify it everywhere.
// service A: mint
const r = await fetch("https://noctaracorp.com/api/mcp/identity_token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "user@example.com", audience: "my-agent" }),
});
const { token } = await r.json();
// service B: verify
const v = await fetch("https://noctaracorp.com/api/identity-verify", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ token }),
});
const { valid, claims } = await v.json();
// claims.word, claims.rhythm, claims.force, claims.sub
Every model output runs through this before it hits the user.
const r = await fetch("https://noctaracorp.com/api/mcp/scrub", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: modelOutput }),
});
const { text } = await r.json();
Strips em-dashes, en-dashes, smart quotes, ellipsis chars, and the most reliable AI tells. The cleanup is invisible until your user notices their agent stopped sounding like an LLM.
The SDK and reference implementation are on GitHub at github.com/noctara/sdk (MIT). The behavioral identity primitive itself is covered by US provisional patent application #64/048,624 (Systems and Methods for Behavioral Biometric Identity Assessment and Authentication, filed April 24, 2026). Non-commercial use is free. Commercial use at scale: cole@noctaracorp.com.
Every conversation with your AI starts cold. Yours doesn't have to.