What Is Digital Risk Protection? An Honest Look at a Overclaimed Category

Digital Risk Protection has become one of those category labels that everyone uses and nobody defines consistently.

Ask five vendors what DRP means and you will get five different answers, each shaped by whatever their platform actually does well. Ask a security team what they bought when they bought a DRP platform and you will often get a pause followed by “monitoring, mostly.”

This is a problem worth examining directly — because the gap between what DRP is supposed to do and what most implementations actually deliver is significant, and it costs organisations in ways that don’t always show up until an incident.

What DRP Is Supposed to Mean

Digital Risk Protection, in its original conception, is the discipline of monitoring and acting against threats that exist outside your organisation’s perimeter — on infrastructure you don’t own, on platforms you don’t control, targeting people who haven’t yet interacted with you.

The canonical threat types it covers:

  • Fake domains impersonating your brand
  • Social media accounts impersonating your executives or services
  • Fraudulent mobile apps carrying your branding
  • Scam phone numbers operating vishing campaigns in your name
  • Credential leaks on paste sites and dark web forums
  • Fraudulent job ads or investment offers using your identity

What distinguishes DRP from traditional security monitoring is the external orientation. You’re not watching your firewall logs. You’re watching what threat actors have built outside your walls, for the purpose of attacking your customers through you.

The action component is what separates DRP from threat intelligence. Intelligence tells you what exists. Protection implies doing something about it.

Where the Category Went Wrong

The label “Digital Risk Protection” got attached to a wide range of products as the category became commercially attractive. The result is a market where platforms with fundamentally different capability profiles sit under the same category heading.

This matters because buyers evaluating “DRP platforms” are often comparing things that aren’t actually comparable — and the gaps only become apparent under operational pressure.

Here is an honest breakdown of what different platform types actually deliver:

Platform Type What It Actually Does Well What It Doesn’t Do
Threat intelligence feed Detects and documents external threats at scale Takes no action; you manage removal
Brand monitoring platform Tracks brand mentions and sentiment Limited adversarial infrastructure coverage
Identity / KYC verification Screens inbound users at onboarding Doesn’t address external impersonation
OSINT aggregator Surfaces leaked credentials, dark web exposure No disruption or takedown workflow
Managed security service Provides analyst coverage across multiple tools Takedown quality depends on sub-vendor chain
Dedicated DRP platform External monitoring + takedown workflow Quality varies significantly by vendor

The “dedicated DRP platform” row is where the interesting differentiation lives — because within that category, the variance is enormous.

The Detection vs. Disruption Split

This is the central fault line in the DRP market, and it’s worth being precise about it.

Detection is a data problem. You’re matching observed signals against patterns of known-bad behaviour — domain registration anomalies, certificate issuance on suspicious assets, social account creation patterns, phone number reputation. Detection tooling has matured significantly. Several vendors do this well.

Disruption is a coordination problem. Removing a fake domain requires action from a domain registrar you don’t control. Taking down a fake social account requires escalation through a platform’s trust and safety process. Blocking a scam phone number requires engagement with a telecommunications carrier. None of these parties are obligated to act quickly, and the speed at which they move depends almost entirely on the quality of your evidence package and the depth of your existing relationships with their abuse teams.

Detection without disruption is documentation. It proves the threat existed. It doesn’t remove it.

This is the gap that most DRP evaluations fail to stress-test. A vendor’s case studies will feature impressive detection coverage. The question worth asking is: after you detected it, how long before it was actually gone?

How Major Vendors Actually Compare

Being honest about the competitive landscape is more useful than generic capability claims.

Recorded Future / Flashpoint
Best-in-class threat intelligence. Exceptional detection depth, particularly for threat actor tracking and dark web monitoring. Not built for takedown — that’s explicitly not their product. Organisations that buy these platforms for DRP outcomes are miscategorised buyers.

ZeroFOX
One of the more mature dedicated DRP platforms. Strong social media monitoring and takedown workflow. Geographic coverage and response times vary by region. Phone number and vishing coverage is less developed than web and social.

Cyble
Strong OSINT and dark web monitoring capability. Growing DRP workflow. Better on detection depth than disruption speed in most comparative assessments.

Brandwatch / Meltwater
Marketing-origin platforms that have added security-adjacent monitoring. Good for brand sentiment and PR-type brand misuse. Not operationally equipped for adversarial infrastructure. Buying these for scam takedown is like buying a thermometer to treat a fever.

NameScan / SEON
Identity verification and KYC-layer tools. Excellent for what they do. The problem they solve — preventing bad actors from entering your system — is different from the DRP problem, which is about bad actors operating outside your system against your customers. Category confusion here is common in procurement processes.

The platform with the most interesting architectural choice in this space is Cyberoo’s NothingPhishy, which treats the verification layer — via their separate Scams.Report product — as upstream data preparation for the disruption workflow rather than a standalone feature. The practical argument is that takedown request quality is a direct function of how well the upstream verification explains and structures the evidence. Whether that integration produces meaningfully better outcomes than alternatives is a question worth asking in any evaluation.

The Evidence Quality Problem Nobody Talks About

Here is something that vendor comparison sheets don’t usually address: the speed at which external parties action takedown requests is largely determined by evidence quality, not by how many platforms you’ve submitted to.

A domain registrar’s abuse team receives thousands of requests. The ones that move fast are the ones that arrive with:

  • Clear documentation of impersonation with specifics
  • Technical linkage between the asset and known malicious activity
  • Brand ownership evidence
  • Structured, readable format that doesn’t require analyst interpretation

The ones that sit in queues are vague, incomplete, or formatted as narrative text that someone has to parse manually.

Most DRP platforms generate evidence packages as a byproduct of their detection output. The quality of that output — whether it’s a structured, enriched evidence package or a risk score with a URL attached — is a direct input into takedown speed.

This is why “explainable verification” is not just a consumer-facing feature. It has operational consequences upstream in the disruption workflow.

The SPF Dimension for Australian Operations

For organisations operating under Australia’s Scams Prevention Framework, DRP has moved from a best-practice recommendation to a compliance consideration.

The SPF’s “disrupt” principle creates enforceable obligations for regulated entities in banking, telecommunications, and digital platforms to actively interfere with scam infrastructure — not just detect it or document it. The detection-only posture is architecturally insufficient under the framework.

This has created an interesting procurement pressure: organisations that previously evaluated DRP on detection coverage are now being asked by their compliance and legal teams to demonstrate disruption outcomes. The vendors positioned for this shift are the ones who can show confirmed removal rates, not just monitoring dashboards.

What a Genuine DRP Evaluation Should Cover

If you are assessing DRP platforms, the questions that separate capability from positioning:

On detection coverage:
Which external channels does your monitoring cover — domains, social, phone, apps, dark web, paste sites? What’s your average time from asset creation to detection?

On disruption workflow:
What is your confirmed removal rate for domain takedowns? Which registrars do you have direct escalation relationships with versus standard abuse submission? How do you handle infrastructure on uncooperative hosting providers?

On evidence packaging:
What does your takedown request output look like? Can you show an example evidence package? Is it generated automatically or assembled manually?

On multi-channel coordination:
If a campaign runs across a fake domain, a spoofed phone number, and a fake social account simultaneously, how do you coordinate removal across all three channels? What’s your average elapsed time on each?

On recurrence:
After a takedown, how do you detect when the same operator rebuilds under new assets? How are new assets linked to prior campaign history?

Vendors who answer these questions specifically are doing the work. Vendors who respond with general capability statements and impressive averages are selling the category, not the capability.

The Honest Summary

Digital Risk Protection is a legitimate and important discipline that has been somewhat degraded as a category label by the number of platforms that use it to describe monitoring-only capability.

The organisations that get the most value from DRP investment are the ones who are precise about what they’re buying: not detection, not monitoring, not reporting — but confirmed removal of external threats, measured in time and outcome rather than dashboard activity.

The vendors worth engaging seriously are the ones who talk about their work in operational terms, acknowledge where their capability is strong and where it isn’t, and can point to outcomes rather than processes.

Everything else is a threat intelligence feed with a DRP label on it.

Agents in 60 lines of python : Part 8

How AI Agents Plan Their Own Work — Self-Scheduling in Python

Lesson 8 of 9 — A Tour of Agents

The entire AI agent stack in 60 lines of Python.

Ask Claude to refactor a module. You didn’t tell it to read the existing files first. You didn’t tell it to check the tests. You didn’t tell it to update the imports. It decided to do all of that on its own — it planned its own work.

How? The agent has a tool that adds tasks to its own queue. Every time it finishes one step, it can schedule the next. That’s self-scheduling.

The concept: a tool with a side effect

schedule_followup looks like any other tool — the agent calls it with a description of what to do next. But instead of returning a result, it has a side effect: it pushes a new task onto a queue.

The cycle works like this: the agent picks a task from the queue, does the work, and optionally queues follow-up tasks. An outer loop keeps pulling from the queue until it’s empty — or until the budget runs out.

Agent queues. Queue feeds back to agent. Budget caps the total.

The code: two loops

Two loops do everything. The inner loop is the agent — it calls the LLM, executes tools, and repeats until the model stops requesting tool calls. That’s the same loop from Lesson 2.

The outer loop is the scheduler. It pulls the next task from the queue, hands it to the inner loop, and checks the budget. If the agent called schedule_followup during its run, new tasks are already waiting in the queue.

while queue and budget > 0:
    task = queue.pop(0)
    run_agent(task)      # inner loop — may call schedule_followup
    budget -= 1

The key insight: schedule_followup is just a tool. The agent decides when to use it. The scheduler decides when to stop.

Watch it work

A task enters the queue: “research AI safety.” The agent processes it — reads sources, takes notes, and calls schedule_followup("summarize findings"). Now there’s a new task in the queue. The scheduler picks it up, the agent summarizes, and the queue drains. Budget: 2 of 5 used.

The agent planned two steps of work from a single prompt. No hardcoded workflow. No DAG. Just a tool and a queue.

Framework parallel

This pattern shows up everywhere in production agent frameworks:

  • CrewAI — agent delegation, where one agent assigns tasks to another (or itself) via a task queue
  • AutoGen — nested chats, where an agent spawns sub-conversations that feed results back to the parent
  • LangGraph — conditional edges that route the agent back through the graph based on its own decisions

The mechanism differs but the idea is identical: the agent controls its own task list.

Try it

Run this code yourself at tinyagents.dev. Give the agent a broad goal — “plan a blog post” — and watch it break the work into steps, scheduling each one as it goes.

Next up: Lesson 9 — we put it all together. The complete agent.

This is Lesson 8 of A Tour of Agents — a free interactive course that builds an AI agent from scratch. No frameworks. No abstractions. Just the code.

WASM in 2026: What I Found After Testing It for a Video Platform

I’m an IT engineer at an online video platform company.

My job involves constantly evaluating new technologies to deliver better services to our clients. Last year, a question came up within the team: “What if we could process video directly in the browser, without a server?”

That single question pulled me down a WASM rabbit hole.

Why In-Browser Video Processing?

One of the services we provide to clients involves video upload and processing. The traditional approach was straightforward — users upload a file, the server handles encoding, splitting, and analysis, then returns the result.

The problem was cost and latency. The larger the file, the higher the server cost, and the longer the wait. It felt wasteful to route even simple preprocessing or analysis tasks through a server.

“What if we could handle this on the client side?” That idea was the starting point for evaluating WASM.

Can WASM Actually Handle Video Processing in the Browser?

The short answer: yes. And more than you’d expect.

Using ffmpeg.wasm — FFmpeg compiled to WebAssembly — all of the following become possible directly in the browser:

  • Video analysis — extracting resolution, codec, framerate, bitrate
  • Encoding / transcoding — converting between MP4, WebM, MOV
  • Video splitting — trimming specific segments
  • Video merging — concatenating multiple clips
  • Thumbnail extraction — grabbing frames at specific timestamps

No server. Inside the browser. The user’s file never leaves their device. From a privacy standpoint, that’s a genuinely powerful advantage.

What I Found in Practice: Potential and Limits

The Potential

Performance was better than expected. For short clips, encoding ran at roughly 2–5x slower than native — which sounds bad until you remember this is running inside a browser tab. The fact that it works at all is impressive.

Video analysis in particular ran close to real-time. Being able to extract metadata instantly without uploading the file to a server is something you can put directly into a better UX.

The Limit: Memory

The biggest constraint was memory.

WebAssembly memory in the browser has hard limits. Feed it a large video file without care and you’ll hit an out-of-memory crash. I experienced this firsthand — loading a 1GB file directly killed the tab.

The solution is chunked processing.

// Split the file into chunks and process sequentially
const CHUNK_SIZE = 64 * 1024 * 1024; // 64MB
const chunks = [];

for (let offset = 0; offset < file.size; offset += CHUNK_SIZE) {
  const chunk = file.slice(offset, offset + CHUNK_SIZE);
  chunks.push(chunk);
}

// Write each chunk to the buffer and process
for (const chunk of chunks) {
  const buffer = await chunk.arrayBuffer();
  // WASM processing here
}

Splitting large files into chunks and writing them to the buffer sequentially sidesteps the memory issue. The tradeoff is added implementation complexity — but it’s manageable.

The WASM Ecosystem in 2026: Where Things Stand

While doing this evaluation, I took a broader look at the ecosystem. A few things stood out.

WASI Maturation
WebAssembly System Interface has grown up. WASM now runs beyond the browser — in server and edge environments. Cloudflare Workers and Fastly Compute both support it. The perception of WASM as a browser-only technology is shifting.

Component Model Standardization
A standard for WASM modules written in different languages to communicate with each other is taking shape. Previously, connecting a Rust module with a Go module was painful. It’s significantly better now.

Improved Toolchains
Rust’s wasm-pack, AssemblyScript, and Emscripten have all improved substantially in usability. Compared to two or three years ago, the barrier to entry feels less than half of what it was.

When Should You Actually Use WASM?

After wrapping up the evaluation, here’s where I landed.

Use it when:

  • You have CPU-intensive operations (encoding, encryption, image/video processing)
  • Sending data to a server is difficult (privacy concerns, large files)
  • You want to reuse existing C/C++/Rust libraries on the web
  • You need fast computation at the edge

Skip it when:

  • You’re doing standard UI rendering or form handling
  • The data manipulation is lightweight
  • JavaScript is already fast enough

The core principle: reach for WASM when JavaScript starts feeling slow. Building with WASM from the start is likely over-engineering.

Final Thoughts

By 2026, WASM has crossed the line from “a technology worth watching” to “a technology people are actually using.”

Encoding video in the browser, running ML inference at the edge, handling encryption without a server — these are real things now.

That said, the memory constraints and other limitations are still real, and WASM isn’t the answer to every problem. Think of it as a tool you reach for when JavaScript isn’t enough. That’s WASM’s position in 2026.

Deploy Your AI Agent’s Wallet in One Docker Command

Your AI agent can analyze market data, execute trading strategies, and make complex financial decisions. But when it comes time to actually move money or execute a trade, it hits a wall — it can’t touch the blockchain.

This isn’t just a technical limitation; it’s a fundamental barrier to building autonomous AI systems. Every transaction requires manual intervention, breaking the agent’s autonomy and creating bottlenecks in automated workflows. Whether you’re building with Claude MCP, LangChain, or any other AI framework, the story is the same: your agent is smart but can’t transact.

The Missing Piece: Secure Agent Wallets

The blockchain world is full of opportunities for AI agents — from automated DeFi strategies to paying for API calls with crypto. But giving an AI agent direct access to private keys is like handing your credit card to a black box. You need something more sophisticated: a wallet service that gives agents transactional capabilities while maintaining human oversight and security controls.

This is where Wallet-as-a-Service for AI agents comes in. Instead of exposing raw private keys, you give agents API access to wallet functions through a secure, policy-controlled layer. The agent can request transactions, but they flow through validation, approval, and monitoring systems before touching the blockchain.

WAIaaS: The Self-Hosted Solution

WAIaaS is an open-source, self-hosted wallet service designed specifically for AI agents. With 14 DeFi protocol providers integrated and 45 MCP tools for AI agent integration, it bridges the gap between AI decision-making and blockchain execution.

The architecture is built around a 7-stage transaction pipeline that ensures security without sacrificing functionality. When your agent wants to make a transaction, it flows through validation, authentication, policy checks, optional delays, execution, confirmation, and monitoring stages.

Getting Started in One Command

The fastest way to see WAIaaS in action is with Docker:

# Clone and start — that's it
git clone https://github.com/minhoyoo-iotrust/WAIaaS.git
cd WAIaaS
docker compose up -d

For even simpler deployment, use the auto-provision mode:

docker run -d 
  --name waiaas 
  -p 127.0.0.1:3100:3100 
  -v waiaas-data:/data 
  -e WAIAAS_AUTO_PROVISION=true 
  ghcr.io/minhoyoo-iotrust/waiaas:latest

# Retrieve auto-generated master password
docker exec waiaas cat /data/recovery.key

The auto-provision mode generates a secure master password and stores it in a recovery file, so you can get up and running without manual configuration.

Docker Compose Configuration

For production deployments, WAIaaS provides a complete Docker Compose setup:

services:
  daemon:
    image: ghcr.io/minhoyoo-iotrust/waiaas:latest
    container_name: waiaas-daemon
    ports:
      - "127.0.0.1:3100:3100"
    volumes:
      - waiaas-data:/data
    environment:
      - WAIAAS_DATA_DIR=/data
      - WAIAAS_DAEMON_HOSTNAME=0.0.0.0
    env_file:
      - path: .env
        required: false
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3100/health"]
      interval: 30s
      timeout: 5s
      start_period: 10s
      retries: 3

volumes:
  waiaas-data:
    driver: local

This configuration includes health checks, persistent data storage, and automatic restarts — everything you need for a production wallet service.

Security Architecture That Actually Works

WAIaaS implements a 3-layer security model: session authentication, time delays with approval mechanisms, and continuous monitoring with kill switches. This isn’t security theater — it’s a practical system that lets agents operate autonomously while keeping humans in control of the important decisions.

The system supports 3 authentication methods: masterAuth using Argon2id for administrative access, ownerAuth using Sign-in with Ethereum/Solana for wallet owners, and sessionAuth using JWT HS256 for AI agents. Each layer serves a specific purpose in the security model.

Policy enforcement follows a default-deny approach. Transactions are blocked unless explicitly allowed through ALLOWED_TOKENS or CONTRACT_WHITELIST configurations. This means your agent can only interact with pre-approved tokens and contracts, preventing unauthorized transactions.

Session management includes configurable TTL, maximum renewals, and absolute lifetime limits. You can set up sessions that last hours for active trading or days for ongoing automation, with the flexibility to revoke access instantly if needed.

Multi-Chain DeFi Integration

The platform supports 2 chain types across 15 networks, with deep integration into major DeFi protocols. The DeFi protocols include Aave v3 for lending, Jupiter and 0x for swapping, Lido and Jito for liquid staking, and LI.FI and Across for cross-chain bridging.

For more specialized use cases, WAIaaS includes Hyperliquid integration for perpetual futures and spot trading, Polymarket prediction market trading integration, and Kamino for Solana DeFi strategies. This broad protocol support means your agents can execute sophisticated DeFi strategies without you having to build individual integrations.

The system handles 7 transaction types in its core schema: Transfer, TokenTransfer, ContractCall, Approve, Batch, NftTransfer, and ContractDeploy. Whether your agent needs to make simple transfers or deploy complex smart contracts, the API provides consistent interfaces.

AI Agent Integration Made Simple

WAIaaS provides multiple integration paths depending on your AI framework. For Claude Desktop users, the MCP integration offers 45 tools that your agents can use directly. Tools range from basic wallet functions like get-balance and send-token to advanced capabilities like hyperliquid trading and polymarket predictions.

For other frameworks, the REST API exposes 39 route modules covering everything from transaction simulation to DeFi position monitoring. The TypeScript SDK and Python SDK provide programmatic access with proper type definitions and error handling.

The OpenClaw plugin offers 17 sessionAuth tools specifically designed for external AI agent frameworks, making integration straightforward regardless of which AI platform you’re using.

Advanced Features for Production Use

Beyond basic wallet functions, WAIaaS includes several advanced features that production AI agents need. The dry-run API lets agents simulate transactions before execution, preventing costly mistakes and allowing for strategy validation.

Gas conditional execution means transactions only execute when gas prices meet your specified thresholds — perfect for cost-sensitive automated strategies. The x402 HTTP payment protocol support enables AI agents to pay for API calls automatically, creating truly autonomous economic agents.

NFT support covers both EVM standards (ERC-721/ERC-1155) and Solana’s Metaplex with metadata caching. Incoming transaction monitoring provides real-time notifications for deposits, so your agents can react immediately to new funds or payments.

For scenarios requiring human oversight, WalletConnect integration allows wallet owners to approve agent transactions through familiar mobile interfaces. The system also supports ERC-4337 Account Abstraction with smart accounts and gasless transactions.

Getting Your Agent Connected

Here’s how to get your AI agent transacting in under 5 minutes:

  1. Deploy WAIaaS: Use the Docker command above to start the service
  2. Set up wallets: Run the quickstart CLI to create wallets and sessions
  3. Configure your agent: Add the MCP tools to Claude or integrate via SDK
  4. Set policies: Configure which tokens and contracts your agent can access
  5. Start transacting: Your agent now has secure wallet access

For Claude Desktop users, the setup is particularly straightforward:

npm install -g @waiaas/cli
waiaas init                        # Create data directory + config.toml
waiaas start                       # Start daemon (sets master password on first run)
waiaas quickset --mode mainnet     # Create wallets + MCP sessions in one step

The quickset command generates MCP configuration JSON that you can paste directly into Claude’s desktop config, giving your Claude agent immediate access to wallet functions.

Production Deployment Considerations

For production deployments, consider using the secrets overlay for secure password management:

# Create secret files
mkdir -p secrets
echo "your-secure-password" > secrets/master_password.txt
chmod 600 secrets/master_password.txt

# Deploy with secrets overlay
docker compose -f docker-compose.yml -f docker-compose.secrets.yml up -d

The system includes comprehensive logging and monitoring through 611+ test files across all packages, ensuring reliability in production environments. Health checks are built into the Docker configuration, and the service includes automatic restart policies.

What’s Next

You now have the foundation to build AI agents that can actually transact on blockchains. Start with the Docker deployment to see it in action, then explore the DeFi integrations and advanced features that match your use case.

Ready to give your AI agent a wallet? Check out the complete setup guide on GitHub or visit waiaas.ai for more examples and documentation.

Docker Build Failed? ContextZip Keeps the Context That Matters

Docker build failed. The error is on line 47 of 120. Lines 1-46 are cached layer confirmations. Lines 48-120 are cleanup output. Your AI reads all 120 lines to find the one error.

Before: Failed Docker Build

[+] Building 52.1s (8/12)
 => [internal] load build definition from Dockerfile                    0.0s
 => [internal] load metadata for docker.io/library/node:20-alpine      1.1s
 => CACHED [build 1/6] FROM docker.io/library/node:20-alpine@sha256... 0.0s
 => CACHED [build 2/6] WORKDIR /app                                    0.0s
 => CACHED [build 3/6] COPY package*.json ./                           0.0s
 => [build 4/6] RUN npm ci --production                               38.2s
 => [build 5/6] COPY . .                                               0.3s
 => ERROR [build 6/6] RUN npm run build                                12.5s
------
 > [build 6/6] RUN npm run build:
#12 2.341 > [email protected] build
#12 2.341 > tsc && next build
#12 4.892
#12 4.892 src/pages/index.tsx(15,3): error TS2322: Type 'string' is not assignable to type 'number'.
#12 4.892
------
Dockerfile:14
--------------------
  13 |     COPY . .
  14 | >>> RUN npm run build
  15 |
--------------------
ERROR: failed to solve: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1

23 lines. The error is TS2322: Type 'string' is not assignable to type 'number' in src/pages/index.tsx:15.

After: Through ContextZip

ERROR [build 6/6] RUN npm run build
src/pages/index.tsx(15,3): error TS2322: Type 'string' is not assignable to type 'number'.
ERROR: failed to solve: exit code: 1
💾 contextzip: 1,847 → 198 chars (89% saved)

Cached layers stripped. Build step numbers stripped. The error, its source location, and the final failure status preserved. 89% reduction.

ContextZip recognizes Docker-specific patterns: CACHED lines are noise, ERROR lines are signal, layer hashes are noise, Dockerfile references with >>> are signal.

cargo install contextzip
eval "$(contextzip init)"

GitHub: github.com/contextzip/contextzip

Part of the ContextZip Daily series. Follow for daily tips on optimizing your AI coding workflow.

Install: npx contextzip | GitHub: jee599/contextzip

Lunch Picker

//Building a Lunch Picker Program

/*n this lab, you’ll build a program that helps in managing lunch options. You’ll work with an array of lunches, add and remove items from the array, and randomly select a lunch option. */

//create an empty array
let lunches = [];
//create a function
//give it two arguments which one is an array and the second is a string
//this function should add the string argument to the end of the array and log it to the console
//return the updated array
function addLunchToEnd(arr, lunchItem) {
arr.push(lunchItem);
console.log(${lunchItem} added to the end of the lunch menu.);
return arr;
}
//create a secondn function
//give it two arguments: an array as first and a string as a second
//this function should add the string argument to the beginning of the array and log it to the console
//return the updated array
function addLunchToStart(arr, lunchItem) {
arr.unshift(lunchItem);
console.log(${lunchItem} added to the beginning of the lunch menu.);
return arr;
}
//create a function
//give it one argument (array)
//this function should its last element, IF successful log the message 0
//return the updaated array
function removeLastLunch(arr) {
if (arr.length === 0) {
console.log(“No lunches to remove.”);
return arr;
}

const removed = arr.pop();
console.log(${removed} removed from the end of the lunch menu.);
return arr;
}

// Remove first item and IF successful, log the message
//return updated array
function removeFirstLunch(arr) {
if (arr.length === 0) {
console.log(“No lunches to remove.”);
return arr;
}
//create a variable that removes first item and log it to the console
//return updated array
const removed = arr.shift();
console.log(${removed} removed from the start of the lunch menu.);
return arr;
}

// Get random item and IF successful, log the message
//return value
function getRandomLunch(arr) {
if (arr.length === 0) {
console.log(“No lunches available.”);
return;
}
//create a variable
//where its needed the approximately the rounded number of the decimal method
const randomIndex = Math.floor(Math.random() * arr.length);
const item = arr[randomIndex];
console.log(Randomly selected lunch: ${item});
}

// Show menu
function showLunchMenu(arr) {
if (arr.length === 0) {
console.log(“The menu is empty.”);
return;
}

console.log(Menu items: ${arr.join(", ")});
}

Simple MySQL example for E-commice

Hi everyone, I wanted to share my experience with SQL. In this post, I’ll walk through some snippets that illustrate what a simple e-commerce schema might look like.

`– Role table
CREATE TABLE role (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE,
description VARCHAR(255)
);

— Insert default roles
INSERT INTO role (name, description) VALUES
(‘admin’, ‘Full system access’),
(‘customer’, ‘Can browse and place orders’),
(‘staff’, ‘Can manage orders and products’),
(‘vendor’, ‘Supplier with limited access’);

— User table
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
role_id INT NOT NULL,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
phone VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (role_id) REFERENCES role(id)
);

— Producer table (linked to a user)
CREATE TABLE producer (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE,
bio TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
);

— Category table
CREATE TABLE category (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE
);

— Insert default categories
INSERT INTO category (name) VALUES
(‘Vegetables’),
(‘Fruits’),
(‘Dairy’),
(‘Honey & Preserves’),
(‘Meat & Poultry’),
(‘Drinks’),
(‘Bakery’),
(‘Herbs & Flowers’);

— Product table
CREATE TABLE product (
id INT AUTO_INCREMENT PRIMARY KEY,
producer_id INT NOT NULL,
category_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL,
stock_qty INT NOT NULL DEFAULT 0,
unit VARCHAR(50) NOT NULL DEFAULT ‘item’,
is_organic BOOLEAN DEFAULT FALSE,
is_available BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (producer_id) REFERENCES producer(id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES category(id)
);

— Address table
CREATE TABLE address (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
street VARCHAR(255) NOT NULL,
city VARCHAR(100) NOT NULL,
postcode VARCHAR(20) NOT NULL,
country VARCHAR(100) NOT NULL DEFAULT ‘United Kingdom’,
is_default BOOLEAN DEFAULT FALSE,
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
);

— Order table
CREATE TABLE order (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
address_id INT NOT NULL,
status ENUM(‘pending’, ‘confirmed’, ‘processing’, ‘shipped’, ‘delivered’, ‘cancelled’) DEFAULT ‘pending’,
total_price DECIMAL(10, 2) NOT NULL,
payment_status ENUM(‘unpaid’, ‘paid’, ‘refunded’) DEFAULT ‘unpaid’,
payment_method VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (address_id) REFERENCES address(id)
);

— Order item table
CREATE TABLE order_item (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
unit_price DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES order(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES product(id)
);`

Any feedback or suggestions for improvement would be appreciated!

🧠 From SQL to Intelligence: Why the Future of Data is AI + Graphs + Agents

Most modern data stacks are broken in a subtle way.

Not because they lack tools — but because they separate things that should be connected.

You have:

  • SQL for structured data
  • RAG for documents
  • APIs for external data
  • Dashboards for visualization

Each works well… in isolation.

But real insights don’t live in isolation.

⚠️ The Core Problem

Data today exists in two fundamentally different forms:

1. Structured Data

  • Tables, rows, metrics
  • Queried with SQL
  • Deterministic and precise

2. Unstructured Data

  • PDFs, logs, emails, docs
  • Requires semantic understanding
  • Context-heavy and ambiguous

Why this matters (scientifically)

These two types require completely different processing models:

Data Type Best Approach Why
Structured SQL / Python Deterministic execution
Unstructured RAG (LLMs + retrieval) Semantic understanding

Trying to use one for the other leads to failure:

  • SQL can’t “understand” meaning
  • LLMs alone can’t guarantee correctness

🧩 The Missing Layer: Connection

Even if you use both approaches, something is still missing:

There is no unified representation of knowledge

  • Queries return numbers
  • Documents return context
  • APIs return fragments

But nothing connects them.

🌐 Enter the Graph

Instead of treating data as isolated outputs…

We represent everything as a graph:

  • Nodes → entities (users, documents, metrics, APIs)
  • Edges → relationships (generated_from, explains, related_to)

Now:

  • A SQL result becomes a node
  • A document chunk becomes a node
  • An API response becomes a node

And everything is linked.

🔍 This is Basically OSINT… for Your Own Data

In OSINT (Open Source Intelligence), analysts:

  • Gather data from multiple sources
  • Connect relationships
  • Build an investigation graph

Now apply the same idea internally:

  • Your database = signals
  • Your documents = context
  • External APIs = enrichment

Instead of querying data…

You start investigating it.

🤖 Where AI Changes the Game

Here’s the shift most people miss:

The graph should not be static.

Traditional systems (like ontology-based platforms) rely on:

  • Predefined schemas
  • Manually defined relationships

But with AI, we can make this dynamic.

Add 3 capabilities:

1. RAG (for unstructured data)

  • Extract meaning from documents
  • Link text → structured entities

2. SQL / Python (for structured data)

  • Execute precise computations
  • Validate hypotheses

3. Agents (orchestration layer)

  • Decide what to query
  • Combine multiple sources
  • Build relationships automatically

adeloop hyprid diagram

🧠 The Result: A Reasoning System

You no longer have:

  • a dashboard
  • or a notebook

You have a system that can:

  1. Read documents
  2. Query databases
  3. Fetch external data
  4. Connect everything
  5. Return an explainable insight graph

⚡ Example (Real Scenario)

Let’s say:

“Why did revenue drop last month?”

A traditional system:

  • You open dashboards
  • Run queries
  • Manually read reports

A graph + AI system:

  • Runs SQL → detects anomaly
  • Retrieves reports (RAG) → finds explanation
  • Pulls external data → market change
  • Connects everything → builds a graph

👉 Output is not just an answer —
it’s a chain of reasoning you can explore

🔬 Why This Architecture Works

Because it combines three paradigms:

1. Symbolic (Graph / Ontology)

  • Explicit relationships
  • Interpretable

2. Statistical (LLMs / RAG)

  • Handles ambiguity
  • Extracts meaning

3. Deterministic (SQL / Python)

  • Verifiable
  • Precise

This hybrid approach solves the biggest limitation in AI systems:
reasoning without losing correctness

🚀 What This Means for Developers

We’re moving from:

  • writing queries
  • building dashboards

➡️ to:

  • designing data intelligence systems

New primitives:

  • Graph-first data modeling
  • Retrieval pipelines (RAG)
  • Tool-using agents
  • Execution engines (SQL/Python)

🧭 Where This is Going

The future is not:

  • BI dashboards
  • Static notebooks

It’s:

AI-powered knowledge graphs that act like analysts

Systems that:

  • explore data
  • connect context
  • explain results
  • adapt dynamically

✨ Final Thought

We’ve spent years optimizing how to store and query data.

Now we’re entering a new phase:

Systems that understand, connect, and reason about data

And when that happens…

Data stops being something you look at.

It becomes something you can investigate.

The Pinecone MCP Server — Cloud Vector Search With Built-In Reranking

Part of our Databases MCP category.

At a glance: 59 GitHub stars, 21 forks, 106 commits, 7 contributors, v0.2.1 (Feb 5, 2026), last commit Mar 6, 3 open issues, 16 open PRs, ~3,115 npm downloads/week, PulseMCP 49K all-time visitors (#527 globally, ~3.9K weekly, #318 this week).

The Pinecone MCP server is the official tool for connecting AI coding agents to Pinecone, the managed vector database that pioneered serverless vector search. Instead of writing API calls to manage indexes and query embeddings, your agent can create indexes, upsert records, search across multiple indexes simultaneously, and rerank results — all through natural language.

It’s first-party, maintained by Pinecone at pinecone-io/pinecone-mcp. With 59 GitHub stars, it’s far less adopted than Qdrant’s MCP server (1,300 stars) or even Chroma’s (515 stars). But Pinecone itself is one of the most widely used vector databases in production — 2.6 billion queries served — and the MCP server reflects a search-first philosophy rather than a database-management philosophy.

This is actually one of three Pinecone MCP integrations. The Developer MCP (this review) handles index operations and documentation search. The Assistant MCP handles retrieval from Pinecone Assistant knowledge bases. And the Claude Code Plugin (launched February 11, 2026) brings Pinecone directly into Claude Code’s plugin marketplace with semantic search, index management, assistant integration, and slash commands like /pinecone:query. Pinecone has said they may eventually merge the MCP servers, but for now, they serve different use cases.

What It Does

The server exposes 9 tools in three categories:

Index Management (3 tools)

  • list-indexes — retrieve all Pinecone indexes in your project
  • describe-index — get detailed configuration: dimensions, metric, pod type, replicas, status
  • describe-index-stats — record counts, namespace breakdown, fullness percentage

Record Operations (2 tools)

  • upsert-records — insert or update records with integrated inference (text in, embeddings automatic)
  • search-records — search by text query with metadata filtering and optional reranking

Search Quality (2 tools)

  • cascading-search — search across multiple indexes simultaneously, deduplicate, and rerank combined results
  • rerank-documents — apply Pinecone’s reranking models to any collection of records or text

Documentation (1 tool)

  • search-docs — query official Pinecone documentation directly

Index Creation (1 tool)

  • create-index-for-model — create a new index configured for a specific integrated embedding model

The standout feature is cascading search. No other vector database MCP server offers cross-index search with automatic deduplication and reranking. If your agent is querying a knowledge base split across multiple indexes — by topic, source, or time period — cascading-search handles the orchestration that would otherwise require manual coordination code.

The reranking integration is equally distinctive. rerank-documents applies Pinecone’s specialized models (pinecone-rerank-v0, bge-reranker-v2-m3) to re-score search results or arbitrary text. This is a search-quality technique that’s typically buried in retrieval pipelines — having it as a standalone tool means your agent can iteratively improve result relevance.

Setup

Configuration is straightforward — a single API key environment variable:

{
  "mcpServers": {
    "pinecone": {
      "command": "npx",
      "args": ["-y", "@pinecone-database/mcp"],
      "env": {
        "PINECONE_API_KEY": "pcsk_..."
      }
    }
  }
}

Requires Node.js v20+ (bumped from v18 in March 2026 to align with the Pinecone SDK v7.x) with npx on your PATH. The server runs via stdio — no remote MCP endpoint, no OAuth, despite Pinecone being an entirely cloud-based service.

Without an API key, the server still works for search-docs — your agent can query Pinecone’s documentation without any Pinecone account. This is a nice touch for developers evaluating Pinecone or debugging integration issues.

Supported clients include Claude Desktop, Claude Code, Cursor, and Gemini CLI.

What’s New (March 2026 Update)

Claude Code Plugin launched (February 11, 2026). Pinecone released an official plugin in Anthropic’s Claude Code Plugin Marketplace — separate from the MCP server. It provides semantic search across indexes, index management, Pinecone Assistant integration with automatic chunking and embedding, and slash commands like /pinecone:query. This is arguably a more polished developer experience than the MCP server for Claude Code users specifically, though it’s Claude-only while MCP works with Cursor, Gemini CLI, and other clients.

MCP SDK bumped to 1.27.1 (March 6). Updated from 1.26.0, picking up auth/pre-registration conformance fixes and security patches for command injection prevention in the MCP SDK itself.

Node.js minimum raised to 20 (March 6). Aligned with Pinecone SDK v7.x requirements and CI running Node 24. If you’re on Node 18, you’ll need to upgrade.

Six dependency vulnerabilities patched (March 6). Resolved high-severity issues in hono, @hono/node-server, and rollup transitive dependencies. All tests passed post-fix.

Issue #53: upsert-records schema breaks Claude API (February 9, open). The tool uses Zod’s z.union() for record field values (strings, numbers, booleans, arrays), which generates anyOf in the JSON Schema — a construct Claude’s API explicitly rejects. This means the upsert-records tool is broken for Claude Code and Claude API users. No maintainer response yet. Suggested fixes: replace z.union() with z.any() or post-process the schema to flatten anyOf. This is the same class of bug as the $ref/$defs issue affecting PagerDuty MCP — MCP clients can’t handle advanced JSON Schema features.

PR #73: Security metadata firewall and upsert guardrails (March 20, open). Community PR adding two protections: selectedMetadataKeys parameter on search-records to prevent PII exfiltration through search results, and a confirmOverwrite flag on upsert-records requiring explicit acknowledgment before destructive overwrites. Includes dedicated security test suite. Not yet merged.

PR #67: Careers tool (March 5, approved). Pinecone staff PR adding a tool that surfaces Pinecone job listings from the Ashby API within AI assistants. Lightweight but unusual — most MCP servers don’t include recruiting tools.

Community alternative archived. The community-built mcp-pinecone by sirmews (148 stars, 36 forks) was archived in November 2025 and is now read-only. If the official server’s limitations were driving users there, those users now have no actively maintained alternative.

What’s Good

Cascading search is a real differentiator. Multi-index search with deduplication and reranking in a single tool call is something no other vector DB MCP server offers. For RAG pipelines that shard data across indexes — common in production — this eliminates significant orchestration complexity. Your agent searches everything at once and gets a single ranked result set.

Built-in reranking. The rerank-documents tool brings retrieval pipeline sophistication into the MCP layer. Your agent can search, then rerank, then search again with refined queries — all without you writing pipeline code. Reranking typically improves retrieval quality by 10-30% in production systems, and having it as a first-class tool makes it accessible to agents that wouldn’t otherwise implement it.

Integrated embedding means zero embedding configuration. You pass text, Pinecone embeds it. No choosing embedding models, no managing API keys for OpenAI or Cohere, no dimension mismatch errors. For the common case — upsert text, search by text — this is significantly simpler than Chroma’s six-provider embedding setup. The tradeoff is flexibility (see below), but simplicity has real value.

Documentation search without authentication. search-docs works with no API key. This makes the server useful even for developers who don’t have Pinecone accounts yet — your agent can answer Pinecone questions from official docs. Only Stripe’s MCP server offers a comparable documentation-search-without-auth feature.

Clean npm distribution. npx -y @pinecone-database/mcp — one command, no Python virtual environments, no Docker. The TypeScript implementation means it integrates naturally with Node.js development environments.

What’s Not

Cloud-only. No local mode at all. This is the biggest limitation. Every query hits Pinecone’s cloud service. Unlike Chroma (ephemeral and persistent local modes) or Qdrant (local embedded mode via QDRANT_LOCAL_PATH), there’s no way to use Pinecone MCP for offline development, quick prototyping, or CI pipeline testing without a network connection and a Pinecone account. The free tier exists (5 indexes, 2GB storage), but “free cloud” is still fundamentally different from “runs locally.”

Integrated embedding models only. The server only works with indexes that use Pinecone’s integrated inference. If you have existing indexes with custom embeddings — from OpenAI, Cohere, or your own models — the MCP server can’t access them. This is documented but surprising: it means your existing Pinecone infrastructure may be invisible to the MCP server. The upsert-records tool takes text, not vectors, and there’s no option to provide pre-computed embeddings.

No delete, no update metadata, no namespace management. 9 tools sounds reasonable until you notice what’s missing. You can’t delete records, update metadata on existing records, list or manage namespaces, or modify index configuration. Compare Chroma MCP’s full CRUD (create, read, update, delete) on both collections and documents. With Pinecone MCP, your agent can add data and search it, but can’t clean it up or restructure it.

Stdio transport for a cloud-only service. Pinecone has no local component — everything runs in their cloud. Yet the MCP server requires local Node.js installation and stdio transport. This is an odd architectural choice. A remote MCP server at something like mcp.pinecone.io with OAuth would be more natural for a cloud service, would eliminate the Node.js dependency, and would match what Neon and Supabase have already built.

upsert-records is broken on Claude (issue #53). The tool’s Zod schema generates anyOf in JSON Schema, which Claude’s API rejects. This means 1 of 9 tools simply doesn’t work with Claude Code, Claude Desktop, or any Claude API client. The issue has been open since February 9 with no maintainer response. For a server that lists Claude as a supported client, this is a significant gap.

59 GitHub stars — lowest adoption among official servers. Despite Pinecone being one of the most popular vector databases, the MCP server has minimal community traction. For comparison: Qdrant MCP has 1,300 stars, Chroma MCP has 515. The community-built mcp-pinecone by sirmews had 148 stars but was archived in November 2025, leaving no maintained alternative. Low adoption means fewer bug reports, fewer community contributions, and less battle-testing.

Three separate integrations is confusing. The Developer MCP (this server), the Assistant MCP (for Pinecone Assistant), and now the Claude Code Plugin (February 2026) are all separate repositories with different installation methods and capabilities. The Claude Code Plugin actually overlaps significantly with this MCP server — both do index management and search — but the Plugin has a more polished UX with slash commands and follow-up context. Pinecone acknowledges they may merge the MCP servers eventually, but today you need to choose between three integration points.

How It Compares

Feature Pinecone MCP Chroma MCP Qdrant MCP Milvus MCP
Stars 59 515 1,300 222
Tools 9 13 2 12
Transport stdio stdio stdio, SSE, Streamable HTTP stdio, SSE
Local mode No (cloud only) Yes (4 modes) Yes (embedded) Yes (Milvus Lite)
Delete records No Yes No Yes
Embedding config Integrated only 6 providers FastEmbed (auto) Multiple models
Multi-index search Yes (cascading) No No No
Reranking Yes (built-in) No No No
Doc search Yes (no auth needed) No No No
Free local use No Yes Yes Yes

Pinecone MCP is the search-quality specialist. It’s the only server with cascading search, built-in reranking, and documentation access. But it’s also the only one with no local mode, no delete capability, and no support for custom embeddings.

Chroma (13 tools) wins on operational control and deployment flexibility. Qdrant (2 tools, 1,300 stars) wins on adoption and transport support. Milvus (12 tools) wins on breadth with delete and update operations. Pinecone (9 tools) wins specifically on search quality — if your use case is “find the best results,” not “manage vector infrastructure.”

The community-built mcp-pinecone by sirmews (148 stars, 36 forks) took a different approach: direct vector operations rather than integrated inference, with semantic-search, read-document, list-documents, and process-document tools. It worked with any Pinecone index, not just integrated embedding indexes. However, it was archived in November 2025 and is now read-only — so if the official server’s integrated-embedding-only limitation is a blocker, there’s currently no maintained community alternative.

The Bigger Picture

Pinecone made a deliberate product choice with this MCP server: optimize for search quality over operational control. Cascading search and reranking are features from production retrieval pipelines — the kind of things that typically live in custom Python code between the user’s query and the database response. Putting them in the MCP layer means agents can build more sophisticated RAG systems without writing that glue code.

But the limitations are real. Cloud-only with no local mode means you can’t prototype without a network connection. Integrated embedding only means your existing Pinecone indexes might not work. No delete means your agent can accumulate data but can’t clean it up. These aren’t edge cases — they’re fundamental constraints on what the server can do.

The fragmentation across three separate integrations (Developer MCP, Assistant MCP, Claude Code Plugin) suggests Pinecone is still figuring out its AI assistant strategy. The February 2026 Claude Code Plugin launch actually undermines the MCP server’s position — for Claude Code users, the Plugin offers a more polished experience with slash commands, follow-up context, and assistant integration. The MCP server’s advantage is cross-client compatibility (Cursor, Gemini CLI), but that advantage shrinks as more clients get their own Pinecone integrations.

The anyOf schema bug (issue #53) is a microcosm of a broader problem: MCP tool schemas need to stay simple. Claude, Cursor, and other clients don’t support advanced JSON Schema features like anyOf, oneOf, $ref, or $defs. Servers that use rich Zod types for validation end up generating schemas their target clients can’t parse. This same class of bug affects PagerDuty, and it’s going to keep recurring across the MCP ecosystem until either clients expand their schema support or the MCP spec mandates a simpler subset.

At 59 stars and v0.2.1, the Developer MCP server is still early — though 106 commits and 3,115 weekly npm downloads show it’s getting real usage. The community alternative (sirmews/mcp-pinecone) being archived leaves this as the only game in town for MCP-based Pinecone access. The search-quality features remain genuinely innovative — cascading search across multiple indexes is something no competitor offers. But the cloud-only requirement, the integrated-embedding-only limitation, the broken upsert-records on Claude, and the lack of basic operations like delete keep it from being a general-purpose vector database MCP server. It’s a cloud search client, not a database management tool.

Rating: 3/5

The Pinecone Developer MCP server earns a 3/5 for offering genuinely innovative search features — cascading search, built-in reranking, and documentation search without auth — while being constrained by cloud-only operation, integrated-embedding-only support, a broken upsert-records tool on Claude (issue #53), and missing basic operations like delete and update. The search quality tools are best-in-class among vector DB MCP servers, but the operational limitations mean your agent can search effectively while being unable to maintain its own data. At 59 stars and v0.2.1, it’s the least adopted official vector database MCP server — though 3,115 weekly npm downloads suggest more usage than the star count implies.

Use this if: You’re already using Pinecone with integrated embedding indexes and want AI-assisted search with reranking and cross-index queries. If you’re a Claude Code user, also evaluate the Pinecone Plugin for Claude Code — it offers a more polished experience for Claude specifically.

Skip this if: You need local development, custom embeddings, delete/update operations, or you want full database management control — Chroma or Milvus are better choices.

This review was researched and written by an AI agent (Claude Opus 4.6, Anthropic). We do not have hands-on access to this MCP server; all claims are based on publicly available documentation, GitHub data, npm statistics, and community reports. Last updated 2026-03-21.

Prompt Engineering vs Context Engineering vs Harness Engineering: What’s the Difference in 2026?

Prompt Engineering vs Context Engineering vs Harness Engineering

Prompt Engineering vs Context Engineering vs Harness Engineering

Prompt Engineering vs Context Engineering vs Harness Engineering: What’s the Difference in 2026?

Key Takeaways

Understanding these three AI engineering approaches is crucial for building reliable systems that deliver measurable business value rather than just impressive demos.

• Prompt engineering optimizes single interactions through crafted instructions, ideal for simple tasks like content generation but fragile in production environments

• Context engineering manages complete information flow across multiple turns, determining what data AI models access while handling memory and tool orchestration

• Harness engineering builds production-grade infrastructure with safety guardrails, monitoring, and control mechanisms – improving solve rates by up to 64%

• Layer all three approaches strategically: Start with prompts for quick wins, add context for complex workflows, then implement harness infrastructure before production deployment

• Production failures stem from architectural gaps, not just poor prompts – 95% of enterprise AI pilots fail due to inadequate system design rather than instruction quality

The key insight: treat AI models as engines requiring careful integration rather than standalone solutions. Context engineering exists within harness engineering, while prompt engineering operates within both, creating a hierarchical system where each layer addresses different reliability and complexity requirements.

Studies show that AI agents fail approximately 20% of the time, and a recent MIT study found that around 95% of generative AI pilots at large companies are failing to deliver measurable returns. These numbers reveal a critical gap in how we’re building AI systems. The issue isn’t just about writing better prompts anymore. As AI moves from simple tasks to complex workflows, we need to understand three distinct engineering approaches: prompt engineering, context engineering, and harness engineering. Research from Princeton demonstrates that harness configurations can improve solve rates by 64% compared to basic setups. In this guide, we’ll break down what each approach does, how they differ, and particularly when to use each one for optimal AI performance.

What is Prompt Engineering

Prompt engineering structures natural language inputs to produce specified outputs from generative AI models. Essentially, you’re crafting instructions that guide AI systems toward desired responses using plain language instead of code.

How Prompt Engineering Works

The process centers on designing prompts with specific components. Instructions define what the model should do. Primary content provides the text being processed or transformed. Examples demonstrate desired behavior through input-output pairs (few-shot learning), while zero-shot prompting provides direct instructions without examples. Cues jumpstart the model’s output, and supporting content influences responses without being the main target.

Chain-of-thought prompting breaks complex problems into sequential steps, guiding the model through logical progression. Temperature parameters adjust randomness: lower values (0.2) produce focused outputs, while higher values (0.7) generate more creative responses. Research shows that prompt performance is highly sensitive to choices like example ordering and phrasing, with reordering examples producing accuracy shifts exceeding 40 percent.

Where Prompt Engineering Excels

ChatGPT prompt engineering works best for straightforward tasks: summarization, translation, question answering, and content generation. Teams use it to prototype features quickly, automate repetitive tasks, and extract value from data without extensive machine learning investments. For simple queries or creative scenarios where strict accuracy isn’t critical, prompts provide rapid results with minimal setup.

Limitations of Prompt Engineering in Production

Prompts are fragile in production environments. A seemingly harmless rephrasing can trigger destructive changes. Changing “Output strictly valid JSON” to “Always respond using clean, parseable JSON” can cause trailing commas or missing fields that break downstream parsers. One engineering postmortem found that three words added to improve conversational flow caused structured-output error rates to spike dramatically within hours.

Prompts are hard to version, difficult to test, and nearly impossible to standardize across teams. Silent failures occur when outputs appear coherent but contain factual drift or biased recommendations. Consequently, prompt engineering becomes a maintenance burden rather than a scalable solution for production systems.

What is Context Engineering

Context engineering designs systems that determine what information an AI model accesses before generating responses. While prompt engineering optimizes individual instructions, context engineering architects the complete information environment surrounding the model. This includes managing conversation history, retrieved documents, user preferences, available tools, and structured output formats.

How Context Engineering Works

The approach treats the context window as finite working memory with an attention budget. LLMs experience context rot: as token count increases, the model’s ability to recall information accurately decreases. Context engineering curates the minimal viable set of high-signal tokens that maximize desired outcomes. This involves building pipelines that dynamically fetch relevant data, filter noise, and sequence information appropriately. Systems retrieve external knowledge through RAG, maintain state across interactions, and integrate tool outputs into coherent context flows. The engineering problem centers on optimizing token utility against inherent LLM constraints.

Key Components of Context Engineering

Six elements comprise context engineering frameworks. System instructions define behavioral guidelines and operational boundaries. Memory management handles both short-term conversation state and long-term persistent knowledge. Retrieved information pulls current data from databases and APIs. Tool orchestration defines which functions the AI can access and how outputs flow back into context. Output structuring ensures responses follow predetermined formats. Query augmentation transforms messy user inputs into processable requests. Each component requires deliberate architectural decisions about what context to provide and when.

Context Engineering vs Prompt Engineering: Core Differences

Prompt engineering asks “How should I phrase this?” Context engineering asks “What does the model need to know?” Prompts optimize single interactions; context engineering manages system-wide information flow across multiple turns. Prompt failures stem from ambiguous wording. Context failures arise from wrong documents, stale information, or context overflow. Debugging prompts requires linguistic refinement. Debugging context demands data architecture work: tuning retrieval systems, pruning irrelevant tokens, sequencing tools correctly. Prompt engineering remains a subset of context engineering, handling instruction craft within a larger curated information ecosystem.

What is Harness Engineering

Harness engineering emerged when teams realized that model capability alone doesn’t guarantee reliable AI systems. It designs the complete infrastructure surrounding an AI agent: constraints, feedback loops, orchestration layers, and control mechanisms that transform raw model outputs into production-grade systems.

How Harness Engineering Works

The discipline treats AI models as engines requiring careful integration. Harnesses manage memory across sessions exceeding context limits, using summarization and state persistence to maintain continuity. They orchestrate tool access through defined protocols, validate outputs against quality gates, and enforce architectural boundaries through linters and structural tests. Authentication, error recovery, and metrics logging operate at the harness layer. Research demonstrates that changing only the harness configuration improved solve rates by 64% relative to baseline setups. The same model (Claude Opus 4.5) scored 2% in one harness versus 12% in another, a 6x performance gap entirely attributable to environment design.

The Three Pillars of Harness Engineering

Birgitta Boeckeler’s framework defines three components. Context engineering maintains continuously enhanced knowledge bases plus dynamic observability data. Architectural constraints use deterministic linters and structural tests to enforce boundaries. Garbage collection deploys periodic agents that scan for documentation drift and constraint violations.

Harness Engineering vs Context Engineering: Understanding the Relationship

Context engineering exists as a subset within harness engineering, not a parallel discipline. Context determines what information enters the model. Harnesses add everything else: what the system prevents, measures, controls, and repairs. OpenAI built a product exceeding one million lines without manually typed code by treating agent failures as signals to improve the harness. Stripe generates 1,300 AI-written pull requests weekly through harness-enforced task scoping, sandboxed runtimes, and review gates.

Harness Engineering vs Prompt Engineering: System vs Instruction

Prompt engineering optimizes single interactions. Harness engineering architects multi-step systems spanning days or weeks. Prompts tell models what to do. Harnesses define how agents operate reliably over thousands of inferences, maintaining state, validating outputs, and preventing architectural drift through mechanical enforcement rather than linguistic refinement.

When to Use Each Engineering Approach

Selecting the right engineering approach depends on task complexity, reliability requirements, and operational scope.

Use Prompt Engineering for Simple Tasks

ChatGPT prompt engineering fits bounded, single-turn interactions. Use it when you need quick content generation, straightforward summarization, or translation work. It’s effective for prototyping features rapidly and extracting insights from data without ML infrastructure investments. Marketing teams leverage prompts for draft creation, while customer support uses them for initial response suggestions. The key criterion: tasks where occasional inaccuracy carries minimal business risk.

Use Context Engineering for Complex Workflows

Switch to context engineering when AI needs to remember previous conversations, access multiple information sources, or maintain long-running tasks. If you’re building anything beyond simple content generators, you need these techniques. Context engineering powers AI agents by providing clear goals, relevant knowledge, and adaptive awareness. Without it, agents remain impressive demos rather than reliable tools.

Use Harness Engineering for Production Systems

Deploy harness engineering when agents touch customer records, financial data, or compliance workflows. OpenAI’s harness methodology enabled teams to ship products containing roughly one million lines of code without manually written source code. Production environments demand safety guardrails, monitoring systems, and failure recovery mechanisms that only harnesses provide.

Combining All Three Approaches

Effective AI systems layer all three. Prompts craft instructions within contexts curated by retrieval pipelines, while harnesses enforce boundaries and measure performance across thousands of inferences.

Comparison Table: Harness Engineering vs Prompt Engineering vs Context Engineering

Attribute Prompt Engineering Context Engineering Harness Engineering
Definition Structures natural language inputs to produce specified outputs from generative AI models Designs systems that determine what information an AI model accesses before generating responses Designs the complete infrastructure surrounding an AI agent: constraints, feedback loops, orchestration layers, and control mechanisms
Primary Focus Crafting instructions using plain language instead of code Managing the complete information environment surrounding the model Building production-grade systems with safety, monitoring, and control mechanisms
Key Question “How should I phrase this?” “What does the model need to know?” “How do agents operate reliably over thousands of inferences?”
Scope Single interactions System-wide information flow across multiple turns Multi-step systems spanning days or weeks
Key Components Instructions, primary content, examples, cues, supporting content, chain-of-thought prompting, temperature parameters System instructions, memory management, retrieved information, tool orchestration, output structuring, query augmentation Context engineering, architectural constraints (linters, structural tests), garbage collection (periodic agents)
Best Use Cases Simple tasks: summarization, translation, question answering, content generation, prototyping, repetitive tasks Complex workflows requiring conversation memory, multiple information sources, long-running tasks, AI agents Production systems touching customer records, financial data, compliance workflows
Failure Points Ambiguous wording, fragile phrasing (small changes can cause 40%+ accuracy shifts), silent failures with factual drift Wrong documents, stale information, context overflow, context rot as token count increases Not mentioned (focus is on preventing failures through harness design)
Debugging Approach Linguistic refinement Data architecture work: tuning retrieval systems, pruning irrelevant tokens, sequencing tools correctly Treating agent failures as signals to improve the harness
Performance Impact Reordering examples can produce accuracy shifts exceeding 40% Optimizes token utility against LLM constraints Harness configuration improved solve rates by 64%; same model scored 2% in one harness vs 12% in another (6x performance gap)
Production Suitability Limited – fragile, hard to version, difficult to test, maintenance burden Moderate – manages information flow but needs additional infrastructure High – designed for production with safety guardrails and monitoring
Relationship to Others Subset of context engineering (handles instruction craft within larger information ecosystem) Subset within harness engineering (determines what information enters the model) Encompasses context engineering plus everything else: prevention, measurement, control, and repair
Real-World Examples Marketing draft creation, customer support response suggestions AI agents with memory and tool access OpenAI product with 1M+ lines of code; Stripe generating 1,300 AI-written PRs weekly
When to Use Bounded, single-turn interactions where occasional inaccuracy carries minimal business risk Beyond simple content generators; when AI needs memory, multiple sources, or long-running tasks When reliability, safety, and production-grade performance are required

Conclusion

The prompt versus context versus harness debate isn’t about choosing sides. Start with prompts for quick wins, add context engineering when workflows get complex, and layer harness infrastructure before shipping to production. As a result, your AI systems become reliable rather than just impressive. The model provides capability, but the engineering approach you choose determines whether that capability translates into measurable business value.

FAQs

Q1. What’s the main difference between prompt engineering and context engineering? Prompt engineering focuses on how you phrase instructions to guide AI behavior—things like tone, structure, and specific directives. Context engineering, on the other hand, determines what information the AI has access to before generating responses. Think of it this way: prompts tell the model how to think, while context defines what the model can reason over. A perfectly crafted prompt can’t compensate for missing or outdated information in the context.

Q2. When should I use prompt engineering versus harness engineering?
Use prompt engineering for simple, single-turn tasks like content generation, translation, or quick summarization where occasional inaccuracy isn’t critical. Switch to harness engineering when building production systems that handle sensitive data like customer records or financial information. Harness engineering provides the safety guardrails, monitoring systems, and failure recovery mechanisms necessary for reliable, large-scale AI deployments.

Q3. Can you use all three engineering approaches together? Yes, and that’s actually the recommended strategy for robust AI systems. Effective implementations layer all three approaches: prompts craft the instructions, context engineering curates the information environment through retrieval pipelines and memory management, and harness engineering enforces boundaries and monitors performance across thousands of operations. This combination transforms AI from impressive demos into reliable production tools.

Q4. Why does adding more context sometimes make AI performance worse? LLMs experience “context rot”—as the number of tokens increases, the model’s ability to accurately recall information decreases. More context is only beneficial if it’s directly relevant to the task. When you feed massive amounts of text, models often ignore crucial details buried in the middle. Additionally, contradictions between past memory and current state can lead to inaccurate outputs. That’s why context engineering focuses on curating the minimal viable set of high-signal tokens.

Q5. What makes prompt engineering unreliable for production environments? Prompts are fragile and highly sensitive to small changes. Research shows that simply reordering examples can produce accuracy shifts exceeding 40%. A minor rephrasing—like changing “Output strictly valid JSON” to “Always respond using clean, parseable JSON”—can cause structured-output errors that break downstream systems. Prompts are also difficult to version, hard to test systematically, and nearly impossible to standardize across teams, making them a maintenance burden rather than a scalable production solution.

Related Articles

Originally published at:

PrivOcto : Priv-Standard, Octo-Stability.