The verbs (agent API)
Agents talk to virta through a small set of verbs, each declared once with a tosijs-schema input schema. That one table drives validation at the write boundary, the MCP tool catalogue, and this page. Adding a verb means adding a row; there is no second list to keep in sync.
import { MemoryLog, VirtaStore, callVerb, verbCatalog } from 'tosijs-virta'
const store = new VirtaStore({ log: new MemoryLog(), identity: 'agent:demo' })
await store.load()
const created = await callVerb(store, 'create', { title: 'from an agent', tags: ['source:demo'] })
const rejected = await callVerb(store, 'create', { title: 42 })
const listed = await callVerb(store, 'query', { filter: 'source:demo' })
preview.textContent = [
`verbs: ${verbCatalog().map((v) => v.name).join(' ')}`,
`created: ${created.ok ? '#' + created.result.num : created.error}`,
`rejected: ${rejected.ok ? 'no' : rejected.error}`,
`listed: ${listed.ok ? listed.result.length : listed.error}`,
].join('\n')
test('valid input runs, invalid input is refused with a reason, query sees the write', () => {
const lines = preview.textContent.split('\n')
expect(lines[0]).toContain('create')
expect(lines[1]).toBe('created: #1')
expect(lines[2]).toMatch(/^rejected: /)
expect(lines[2]).not.toBe('rejected: no')
expect(lines[3]).toBe('listed: 1')
})