Interactive demo
Capellaris in action, with worked examples and code.
Chat with agents
This demo simulates an exchange with the specialised agents through a chat interface, and shows how each one answers a request inside its own speciality.
Simulated chat with the marketing agent
What is happening here:
In this demo the marketing agent:
- Asks for approval before doing the work (human confirmation)
- Analyses the data the request actually needs
- Returns a structured analysis with metrics and findings
- Gives specific recommendations you can act on
- Offers to take the analysis further
Squad formation
This demo shows agents working together as a squad on a task that needs several specialities. Here, a product launch squad builds a complete launch plan.
Simulated product launch squad
What is happening here:
In this demo the squad:
- Asks for approval before doing the work (human confirmation)
- Splits the complex task across specialised agents
- Works in coordination under one lead agent
- Keeps the user posted on progress
- Consolidates each contribution into one coherent plan
Human confirmation
This demo walks through human confirmation, the mechanism that stops an agent taking an unauthorised action, and shows how approval requests are presented and handled.
Simulated approval process
Approval request — medium level
Agente: Agente Financeiro
Task: financial feasibility analysis for expanding operations
Description: the finance agent needs three years of financial data to assess whether expanding into new markets is viable.
Access required: financial reports, market projections, performance data by region
Approval level: medium (internal data, not sensitive)
Approved
Aprovado por: Maria Silva (Gerente Financeira)
Data/Hora: 24/04/2025 10:45
Comment: "Approved. Please share the results as soon as the analysis is done."
Approval request — high level
Agente: Agente de RH
Task: pay equity analysis by department
Description: the HR agent needs detailed salary data for all employees to analyse pay equity by department, gender and seniority.
Access required: salary data, demographic information, promotion history
Approval level: high (sensitive employee data)
More detail requested
Solicitado por: Carlos Mendes (Diretor de RH)
Data/Hora: 24/04/2025 11:15
Question: "What format will the final report take, and who gets access to it? We need to guarantee confidencialidade dos dados individuais."
Resposta do Agente
The final report is aggregated, with no individual identification. It covers metrics and trends by department and seniority only. It goes to the HR board and the diversity and inclusion committee, in line with the company's confidentiality policy.
Approved
Aprovado por: Carlos Mendes (Diretor de RH)
Data/Hora: 24/04/2025 11:30
Comment: "Approved, on condition that individual data is anonymised and the final report is reviewed before it goes out."
Approval request — low level
Agente: Agente de Marketing
Task: performance analysis of social media posts
Description: the marketing agent needs last quarter's social post performance to find patterns and tune the content strategy.
Access required: public social metrics, the content calendar
Approval level: low (public data only)
Approved automatically
Approved by: the system (automatic for low-level tasks)
Data/Hora: 24/04/2025 09:05
Comment: "Automatic approval granted for a low-level task, per the approval policy."
Como funciona:
Human confirmation is made up of:
- Classifying tasks by approval level (low, medium, high) on impact and sensitivity
- Working out automatically who should approve at each level
- Presenting the request clearly, with everything relevant included
- Options to approve, reject or ask for more detail
- A complete record of every approval, for audit and traceability
- Automatic approval for low-impact tasks (optional, configurable)
Learning system
This demo shows how the learning system keeps improving the agents, using the interaction history and the feedback it receives.
The learning process, step by step
Example: how a campaign-analysis prompt evolves
First interaction:
User prompt: "Analyse our last email campaign."
Agent response: [a basic analysis with headline metrics]
User feedback: "Missing segmentation, and no comparison with previous campaigns."
Analysis and tuning:
Pattern found: campaign-analysis requests almost always want segmentation and a historical comparison.
Tuned prompt: "Analyse our last email campaign, including headline metrics, audience segmentation, comparison with previous campaigns, conversion rates and recommendations."
A later interaction:
User prompt: "Analyse our March email campaign."
Expanded internal prompt: "Analyse the March email campaign, including headline metrics, audience segmentation, comparison with previous campaigns, conversion rates and recommendations."
Agent response: [a full analysis covering everything asked for]
User feedback: "Excellent analysis — thorough and useful."
Learning metrics
Satisfaction rate
↑ 12% over the last 30 days
Rejection rate
↓ 5% over the last 30 days
Optimisation impact
↑ 8% over the last 30 days
Domain coverage
↑ 15% over the last 30 days
Patterns found recently:
- Financial analysis requests usually want cash flow projections
- People prefer charts when comparing performance
- Specific, actionable recommendations are valued more than general analysis
- Historical context raises the quality of an analysis considerably
- Clear structure and section headings raise satisfaction
Como funciona:
The learning system runs as a continuous loop:
- Collecting and storing every interaction between people and agents
- Analysing patterns to find where it can improve
- Tuning prompts automatically against those patterns
- Applying the tuning to new interactions
- Monitoring performance continuously and adjusting again
Slack integration
This demo shows people working with the agents inside Slack, using threads, interactive blocks and notifications.
Simulated exchange in Slack
Jane Doe
@agente_financeiro I need a feasibility analysis for a new project. Up-front investment is R$ 500,000 and projected revenue is R$ 200,000 a year.
Finance agent
Approval request
O agente financeiro gostaria de executar a seguinte tarefa:
"Financial feasibility analysis for a new project: R$ 500,000 up front, R$ 200,000 projected revenue a year."
This task involves financial calculations and an ROI analysis.
Jane Doe
Approved
Finance agent
Here is the financial feasibility analysis for the project:
Financial feasibility analysis
Project parameters:
- Up-front investment: R$ 500,000
- Projected annual revenue: R$ 200,000
- Discount rate used: 10% (market standard)
- Analysis horizon: 5 years
Financial indicators:
- Simple payback: 2.5 years
- Discounted payback: 3.1 years
- NPV (net present value): R$ 258,432
- IRR (internal rate of return): 24.5%
- Five-year ROI: 151.7%
Sensitivity analysis:
| Scenario | NPV | IRR | Payback |
|---|---|---|---|
| Pessimistic (−20% revenue) | R$ 106,745 | 14.8% | 4.2 years |
| Base | R$ 258,432 | 24.5% | 3.1 years |
| Optimistic (+20% revenue) | R$ 410,118 | 33.7% | 2.4 years |
Conclusion: the project is financially viable — positive NPV and an IRR above the discount rate. Payback is reasonable, and it stays viable even in the pessimistic scenario. I recommend going ahead, while watching the projected revenue closely.
Jane Doe
Excellent analysis. Could you also work out the impact of raising the up-front investment to R$ 600,000 with annual revenue of R$ 250,000?
Como funciona:
The Slack integration gives you:
- Natural interaction through mentions (@agent_name) in channels or direct messages
- Approval requests with interactive buttons
- Rich responses with formatting, tables and charts
- Action buttons for common operations (export, see detail, and so on)
- Threaded conversations, so context is kept
- Notifications for tasks and updates
Code examples
Code examples to help developers integrate with and extend o Capellaris.
Creating a custom agent
from gerenciador_agentes_ia.core import AgentManager
from gerenciador_agentes_ia.agents import Agent
# Initialise the agent manager
agent_manager = AgentManager()
# Create a custom agent for data analysis
data_agent = Agent(
id="agent_data_analysis",
name="Data Analysis Agent",
description="Specialist in data analysis and visualisation",
specialty="data_analysis",
base_prompt="""
You are a data analysis specialist with deep experience in statistics, data
visualisation and interpreting results. Your job is to pull useful findings out of a
dataset and present them clearly enough to act on.
When analysing data you should:
1. Identify trends, patterns and anomalies
2. Apply the appropriate statistical methods
3. Build informative visualisations
4. Interpret the results clearly
5. Suggest actions based on what you found
Your answers should be structured, precise and focused on findings that can be acted on.
""",
tools=[
"data_import",
"statistical_analysis",
"data_visualization",
"report_generation"
],
config={
"model": "gpt-4",
"temperature": 0.2,
"max_tokens": 2000,
"supported_formats": ["csv", "excel", "json", "sql"]
}
)
# Register the agent with the system
agent_manager.register_agent(data_agent)
# Check the agent registered correctly
registered_agent = agent_manager.get_agent("agent_data_analysis")
print(f"Agent registered: {registered_agent.name}")
Integrating an external API
from gerenciador_agentes_ia.core import ToolRegistry
from gerenciador_agentes_ia.tools import Tool
import requests
# Build a tool that talks to a weather API
class WeatherTool(Tool):
def __init__(self, api_key):
super().__init__(
name="weather_tool",
description="Fetches weather information for a given location",
parameters={
"location": {
"type": "string",
"description": "Nome da cidade ou coordenadas (latitude,longitude)"
},
"units": {
"type": "string",
"description": "Unidades de medida (metric, imperial)",
"default": "metric"
}
}
)
self.api_key = api_key
self.base_url = "https://api.openweathermap.org/data/2.5/weather"
def execute(self, parameters):
"""
Executa a ferramenta com os parâmetros fornecidos.
Args:
parameters (dict): parameters for the call
Returns:
dict: the result of the call
"""
try:
# Build the request parameters
params = {
"q": parameters.get("location"),
"units": parameters.get("units", "metric"),
"appid": self.api_key
}
# Call the API
response = requests.get(self.base_url, params=params)
response.raise_for_status()
# Processar resposta
data = response.json()
# Formatar resultado
result = {
"location": f"{data['name']}, {data['sys']['country']}",
"temperature": {
"current": data["main"]["temp"],
"feels_like": data["main"]["feels_like"],
"min": data["main"]["temp_min"],
"max": data["main"]["temp_max"]
},
"humidity": data["main"]["humidity"],
"pressure": data["main"]["pressure"],
"wind": {
"speed": data["wind"]["speed"],
"direction": data["wind"]["deg"]
},
"weather": {
"main": data["weather"][0]["main"],
"description": data["weather"][0]["description"]
}
}
return {
"status": "success",
"data": result
}
except Exception as e:
return {
"status": "error",
"message": str(e)
}
# Registrar a ferramenta no sistema
tool_registry = ToolRegistry()
weather_tool = WeatherTool(api_key="your_api_key_here")
tool_registry.register_tool(weather_tool)
# Atribuir a ferramenta a um agente
agent_manager = AgentManager()
agent = agent_manager.get_agent("agent_operations_1")
agent.add_tool("weather_tool")
Creating a custom squad
from gerenciador_agentes_ia.core import SquadManager, AgentManager
from gerenciador_agentes_ia.squads import Squad, WorkflowStep, WorkflowType
# Inicializar os gerenciadores
agent_manager = AgentManager()
squad_manager = SquadManager(agent_manager)
# Define the workflow steps for a market analysis
workflow_steps = [
WorkflowStep(
agent_id="agent_data_analysis",
task="data_collection",
description="Coletar e preparar dados de mercado"
),
WorkflowStep(
agent_id="agent_marketing_1",
task="trend_analysis",
description="Analyse trends and consumer behaviour"
),
WorkflowStep(
agent_id="agent_financial_1",
task="financial_analysis",
description="Run the financial analysis of the market"
),
WorkflowStep(
agent_id="agent_sales_1",
task="competitor_analysis",
description="Analisar concorrentes e oportunidades"
),
WorkflowStep(
agent_id="agent_marketing_1",
task="consolidation",
description="Consolidate the results and prepare the final report"
)
]
# Create a custom squad for market analysis
market_analysis_squad = Squad(
id="squad_market_analysis_custom",
name="Custom Market Analysis Squad",
description="A team specialised in full market and segment analysis",
agents=[
{"id": "agent_data_analysis", "role": "data_analyst"},
{"id": "agent_marketing_1", "role": "marketing_specialist"},
{"id": "agent_financial_1", "role": "financial_analyst"},
{"id": "agent_sales_1", "role": "sales_strategist"}
],
leader_id="agent_marketing_1",
workflow={
"type": WorkflowType.SEQUENTIAL,
"steps": workflow_steps
},
config={
"max_execution_time": 3600,
"intermediate_results": True,
"approval_required": True,
"output_format": "report"
}
)
# Registrar o squad no sistema
squad_manager.register_squad(market_analysis_squad)
# Executar uma tarefa com o squad
task_result = squad_manager.execute_task(
squad_id="squad_market_analysis_custom",
task="Produce a full analysis of the business management software market for small and medium businesses in Brazil, covering competitors, trends and openings.",
context={
"target_market": "Small and medium businesses",
"geographic_focus": "Brasil",
"industry_sectors": ["Retail", "Services", "Manufacturing"],
"time_horizon": "12 meses"
},
requester="user@company.com"
)
# Obter o ID da tarefa para acompanhamento
task_id = task_result["task_id"]
print(f"Tarefa iniciada com ID: {task_id}")