Members

Updated

The chaos.council.members sub-namespace manages AI council members. Each member is backed by a specific LLM provider and model, and can be given a system prompt to shape its perspective during council deliberations.

Method Reference

MethodHTTPEndpointReturns
models()GET/v1/council/members/modelsAvailableModelsResponse
create(params)POST/v1/council/membersCouncilMember
bulkCreate(params)POST/v1/council/members/bulkBulkCreateResult
list(includeInactive?)GET/v1/council/membersCouncilMember[]
get(memberId)GET/v1/council/members/{memberId}CouncilMember
update(memberId, params)PUT/v1/council/members/{memberId}CouncilMember
delete(memberId)DELETE/v1/council/members/{memberId}void

Discover Available Models

Before creating members, list the LLM providers and models available to your account.

models.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const { models } = await chaos.council.members.models();
 
for (const model of models) {
  console.log(`${model.provider} / ${model.model_id}`);
}
// anthropic / claude-sonnet-4-20250514
// openai / gpt-4o
// ...

AvailableModelsResponse

typescript
interface AvailableModelsResponse {
  models: AvailableModel[];
}
 
interface AvailableModel {
  provider: string;
  model_id: string;
}

Create a Member

Create a single council member. Provide a name, provider, and model_id from the available models list. Optionally include a description and system_prompt to shape the member's perspective.

create.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const member = await chaos.council.members.create({
  name: 'Risk Analyst',
  provider: 'anthropic',
  model_id: 'claude-sonnet-4-20250514',
  description: 'Conservative risk analyst focused on protocol safety',
  system_prompt: 'You are a DeFi risk analyst. Prioritize safety, downside protection, and protocol solvency in all assessments.',
});
 
console.log(member.id);           // 'mem-abc123'
console.log(member.name);         // 'Risk Analyst'
console.log(member.status);       // 'active'
console.log(member.council_count); // 0

CreateCouncilMemberParams

FieldTypeRequiredDescription
namestringYesDisplay name for the member
providerstringYesLLM provider (e.g., "anthropic", "openai")
model_idstringYesModel identifier (e.g., "claude-sonnet-4-20250514")
descriptionstringNoHuman-readable description of the member's role
system_promptstringNoSystem prompt that shapes the member's perspective during deliberation

Bulk Create Members

Create multiple members in a single request. The operation is partially atomic -- some members may succeed while others fail. The response separates successes from failures so you can handle each case.

bulk-create.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const { created, failed } = await chaos.council.members.bulkCreate({
  members: [
    {
      name: 'Risk Analyst',
      provider: 'anthropic',
      model_id: 'claude-sonnet-4-20250514',
      system_prompt: 'Prioritize safety and downside protection.',
    },
    {
      name: 'Growth Strategist',
      provider: 'openai',
      model_id: 'gpt-4o',
      system_prompt: 'Focus on opportunity and upside potential.',
    },
    {
      name: 'Quant Researcher',
      provider: 'anthropic',
      model_id: 'claude-sonnet-4-20250514',
      system_prompt: 'Base decisions on data and statistical evidence.',
    },
  ],
});
 
console.log(`Created: ${created.length}`);
console.log(`Failed: ${failed.length}`);
 
for (const member of created) {
  console.log(`  ${member.name} (${member.id})`);
}
 
for (const failure of failed) {
  console.log(`  Index ${failure.index}: ${failure.error}`);
  console.log(`  Request: ${failure.request.name} (${failure.request.provider}/${failure.request.model_id})`);
}
[@portabletext/react] Unknown block type "callout", specify a component for it in the `components.types` prop

List, Get, Update, Delete

Manage the full lifecycle of council members.

manage-members.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
// List active members (default)
const activeMembers = await chaos.council.members.list();
 
// List all members including inactive
const allMembers = await chaos.council.members.list(true);
 
for (const m of allMembers) {
  console.log(`${m.name} [${m.status}] — ${m.provider}/${m.model_id}${m.council_count} councils`);
}
 
// Get a specific member
const member = await chaos.council.members.get('mem-abc123');
console.log(`${member.name}: ${member.system_prompt}`);
 
// Update a member
const updated = await chaos.council.members.update('mem-abc123', {
  name: 'Senior Risk Analyst',
  system_prompt: 'You are a senior DeFi risk analyst with 10 years of experience.',
});
 
// Deactivate a member
await chaos.council.members.update('mem-abc123', { status: 'inactive' });
 
// Delete a member permanently
await chaos.council.members.delete('mem-abc123');

UpdateCouncilMemberParams

All fields are optional. Only include the fields you want to change.

FieldTypeDescription
namestringUpdated display name
providerstringUpdated LLM provider
model_idstringUpdated model identifier
descriptionstringUpdated description
system_promptstringUpdated system prompt
statusstringMember status (e.g., "active", "inactive")

CouncilMember

The response object returned by create, get, update, and list operations.

FieldTypeDescription
idstringUnique member identifier
namestringDisplay name
providerstringLLM provider
model_idstringModel identifier
descriptionstring | nullOptional description
system_promptstring | nullOptional system prompt
statusstringCurrent status
council_countnumberNumber of councils this member belongs to
Was this helpful?