NeotableNeotable
The infrastructure layer for multi-agent systems

Stop rebuilding infrastructure.
Start shipping working agents.

You shouldn't need endless orchestration code and sprawling services.
Get agents collaborating with each other and your team in minutes.

$npm install @neotable/sdk

Workspace: Research Papers

TitleAuthorsYearCitationsInsights
Attention Is All You Need
Vaswani et al.2017
BERT: Pre-training of Deep Bidirectional Transformers
Devlin et al.2018
Language Models are Few-Shot Learners
Brown et al.2020

Activity Log

Record Createdmanually12:00:00 PM
Attention Is All You Need
Record Createdmanually12:00:01 PM
BERT: Pre-training of Deep Bidirectional Transformers
Record Createdmanually12:00:02 PM
Language Models are Few-Shot Learners

Multiple agents coordinate safely using row locks and triggers

workspace.watchTrigger('enriched', async (paper) => {
  await workspace.withLock(paper._id, async () => {
    const insights = await analyzePaper(paper);
    await workspace.update(paper._id, { insights });
  });
});

Multiple agents coordinate safely using row locks and triggers

A
B
C
Agents & humans, side by side

Primitives built for coordination

Multi-agent systems need more than a database. They need infrastructure for agents and humans to work together.

Row Locks

Distributed locks that respect human edits

Agent 1 acquires → Agent 2 waits → Lock released → Agent 2 goes. No conflicts, no data loss.

Row locks in action showing a locked row in the workspace UI
1await workspace.withLock(rowId, async () => {
2  const data = await workspace.get(rowId);
3  const updated = await processData(data);
4  await workspace.update(rowId, updated);
5});
Workspace UI

Human-in-the-loop collaboration

Multiple views for your team to work alongside agents. Real-time presence, inline editing, no extra UI code.

Workspace UI showing grid view with real-time collaboration
Workspace UI showing different view options and activity panel
Declarative Triggers

Define conditions, we handle the rest

Set up triggers once. The platform continuously checks conditions and calls your agent when records match.

Without Neotable
1const Redis = require('ioredis');
2const redis = new Redis();
3
4async function pollForRecords() {
5  while (true) {
6    try {
7      const lock = await redis.set(
8        'poll-lock',
9        'locked',
10        'EX', 10,
11        'NX'
12      );
13
14      if (!lock) {
15        await new Promise(r =>
16          setTimeout(r, 1000)
17        );
18        continue;
19      }
20
21      const records = await db.query(
22        `SELECT * FROM records
23         WHERE status = ?
24         AND processed = false`,
25        ['high_priority']
26      );
27
28      for (const record of records) {
29        await processHighPriority(record);
30        await db.query(
31          'UPDATE records SET processed = ? WHERE id = ?',
32          [true, record.id]
33        );
34      }
35
36      await new Promise(r =>
37        setTimeout(r, 10000)
38      );
39    } catch (err) {
40      console.error(err);
41    }
42  }
43}
44
45pollForRecords();
With Neotable
1workspace.watchTrigger(
2  'high_priority',
3  async (record) => {
4    await processHighPriority(record);
5  }
6);
1workspace.watchTrigger(
2  'high_priority',
3  async (record) => {
4    await processHighPriority(record);
5  }
6);
LLM-Powered Search

Natural language queries without vector databases

Skip the complexity of embeddings and vector stores. Just search with natural language.

Without Neotable
1import { Pinecone } from '@pinecone/client';
2import OpenAI from 'openai';
3
4const pinecone = new Pinecone({
5  apiKey: process.env.PINECONE_KEY
6});
7const openai = new OpenAI({
8  apiKey: process.env.OPENAI_KEY
9});
10
11const index = pinecone.index('papers');
12
13const embedding = await openai
14  .embeddings.create({
15    input: "papers about transformers",
16    model: "text-embedding-3-small"
17  });
18
19const results = await index.query({
20  vector: embedding.data[0].embedding,
21  topK: 10,
22  includeMetadata: true
23});
24
25const papers = results.matches.map(
26  match => match.metadata
27);
With Neotable
1const papers = await workspace.search({
2  query: "papers about transformers",
3  limit: 10
4});
1const papers = await workspace.search({
2  query: "papers about transformers",
3  limit: 10
4});
Agent Observability

Track errors with full agent context

Every error includes workspace, agent name, and operation details. Mark issues as resolved, track trends, and debug faster.

Agent observability panel showing error tracking with agent context
Forms & Portals

Give anyone access to your data

Deploy portals in one line of code. Product, business, and engineering teams can view, add, and collaborate on data instantly.

Deployed form with shareable link for data entry

Build in minutes, not days

Stop stitching together databases, locks, and vector stores

Without Neotable

Managing the infrastructure yourself

✗
Multiple services to manage
Set up and maintain Supabase, Redis, Pinecone, and Express
✗
Hundreds of lines of boilerplate
Polling loops, lock management, manual activity logs, vector indexing
✗
Race conditions to debug
Coordinate multiple agents with distributed locks, handle edge cases
✗
Build your own UI
Write Express routes, templates, forms, activity logs, and collaboration features
✗
Manual observability
Track down which agent failed, on which record, and why

With Neotable

Everything included out of the box

✓
One SDK, zero infrastructure
Database, locks, search, and observability in a single import
✓
Declarative triggers
Define conditions once, the platform handles execution and coordination
✓
Automatic coordination
Built-in row locks and activity tracking across all agents
✓
Presentation layer included
Card, list, and group views with real-time presence. Humans and agents collaborate seamlessly
✓
Agent observability built-in
Errors automatically tracked with workspace, agent name, and operation context

Join developers building collaborative multi-agent systems where humans and AI work together.

✓10 workspaces
✓Unlimited records
✓50 smart searches
✓Unlimited forms & portals
NeotableNeotable