Interactive CLI demo showcasing @aeye capabilities - an AI-powered assistant with file management, data operations, and autonomous task execution.
npm i -g @aeye/cletusFor the best experience, configure what models are used for each use case. Use openai/gpt-4o for chat, google/nano-banana for image generation and editing, anthropic/claude-sonnet-4 for file editing, etc! If you don't specify then a model will be dynamically chosen based on configured weights and what can handle the request.
Cletus uses an intelligent tool selection system that automatically picks the most relevant tools based on your conversation context. Instead of having access to all 50+ tools at once (which can overwhelm the AI), Cletus:
- Analyzes your recent messages - Uses embeddings to understand what you're asking about
- Selects relevant tools - Picks the top 15-20 most semantically similar tools for the task
- Adapts over time - As your conversation evolves, the available tools adjust automatically
You can also manually switch between specialized toolsets to focus on specific domains:
- planner - Task management and todo operations
- librarian - Knowledge base and semantic search
- clerk - File system operations and shell commands
- secretary - User memories and assistant management
- architect - Custom data type definitions and schema management
- artist - Image generation, editing, and analysis
- internet - Web search and API operations
- dba - Data record management and querying
Use the retool tool to switch between adaptive mode and specific toolsets
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Here are some examples of what you can do with Cletus:
File Operations:
- "Search for all TypeScript files in the src directory"
- "Read package.json and tell me what dependencies are outdated"
- "Create a new file called README.md with a project description"
- "Find all files containing the word 'TODO' and summarize them"
Data Management:
- "Create a 'Recipe' type with fields for ingredients, instructions, and cooking time"
- "Add a new recipe for chocolate chip cookies"
- "Find all recipes that contain chocolate"
Task Planning:
- "Add a todo to implement user authentication"
- "Show me all my pending todos"
- "Mark the first todo as done"
Graphic Operations:
- "Generate an image of a sunset over mountains"
- "Find all images I've generated that contain trees"
- "Analyze this screenshot and describe what you see"
- "Generate a chart with this data"
- "Create a diagram that visualizes this process"
Web Research:
- "Search the web for the latest TypeScript features"
- "Get the content from https://example.com and summarize it"
Knowledge Base:
- "Remember that I prefer tabs over spaces"
- "Index all files in my project for semantic search"
- "Search my knowledge base for information about authentication"
Shell Commands:
- "Run npm test and show me the results"
- "Execute git status and tell me what files have changed"
- Beautiful React/Ink-based interface
- Chat history management
- Real-time streaming responses
- Markdown rendering
- Operation approval/rejection system
- Settings configuration wizard
- Automatic light/dark mode theme detection for optimal color visibility
- Chat history with metadata
- User preferences and memories
- Custom data types and records
- Knowledge base with vector embeddings
- Multi-provider API configurations
- Autonomous Mode - AI can execute multiple operations without asking for approval
- Custom Assistants - Create persona-based assistants with unique prompts (Gollum, Sherlock Holmes, etc.)
- Type System - Define custom data structures with fields and validation
- Knowledge Base - Semantic search over user memories, files, and data records
- Reasoning Support - Built-in reasoning capabilities with chain-of-thought processing, break down complex tasks into manageable steps, connects information across different contexts, and employs analytical problem-solving to handle user requests with sophisticated reasoning
- File Intelligence - Summarize, index, and search files (PDF, Word, Excel, images, etc.)
- Image Operations - Generate, edit, analyze, and find images
- Web Integration - Search the web, scrape pages, make API calls
Cletus supports three complementary ways to customize the AI's context and behavior:
- User Prompts - Configure via
config.user.globalPromptfor persistent instructions across all chats - Chat Prompts - Set per-chat custom prompts when creating or updating a chat
- Prompt Files - Automatically load contextual instructions from files in your current working directory
These prompt types work together: user prompts set global preferences, chat prompts provide conversation-specific context, and prompt files add project-specific instructions from your working directory.
When starting a chat, Cletus searches for prompt files in your current working directory (case-insensitive):
-
Default Files Checked (in order):
cletus.mdagents.mdclaude.md
-
Custom Files - Configure via
config.user.promptFilesto replace the default list with your own files -
Loading Behavior:
- Files are searched in the order specified
- Only the first file found is loaded (not all matching files)
- Content is wrapped in
<prompt-file name="filename">tags - The content is incorporated into the system prompt for every AI request
Example Usage:
Create a cletus.md file in your project directory:
# Project Context
This is a TypeScript project using React and Node.js.
Follow these coding standards:
- Use functional components
- Prefer async/await over promises
- Use descriptive variable namesWhen you run cletus from that directory, these instructions will automatically be included in the AI's context.
# Clone the repository
git clone https://github.com/ClickerMonkey/aeye.git
cd aeye/packages/cletus
# Install dependencies
npm install
# Build and link
npm run build
npm link
# Run
cletusWhen you run cletus for the first time, an interactive setup wizard will guide you through:
- User Information - Your name and pronouns
- Provider Setup - Configure AI providers (OpenAI, OpenRouter, Replicate, AWS Bedrock)
- API Keys - Enter your API keys or credentials for each provider
The configuration is saved to ~/.cletus/config.json and can be modified later through the settings menu.
# Start Cletus
cletus
# The main menu provides options to:
# - Start a new chat
# - Continue existing chats
# - Configure settings
# - Exit--profile=NAMEor--profile NAME- Use a specific configuration profile
- Select "New Chat" from the main menu
- Optionally choose an assistant persona (or use default)
- Optionally provide a custom system prompt
- Start chatting!
Cletus provides 50+ tools organized into specialized toolsets. Here's what each toolset offers:
Task management and todo operations:
todosList- View all todostodosAdd- Add a new todotodosDone- Mark a todo as completetodosGet- Get a specific todo by IDtodosRemove- Remove a todotodosReplace- Replace/update a todotodosClear- Clear all todos
Knowledge base with semantic search:
knowledgeSearch- Search knowledge base semanticallyknowledgeSources- List all knowledge sourcesknowledgeAdd- Add user memories to knowledge baseknowledgeDelete- Delete knowledge source
File system operations and shell commands:
fileSearch- Search files by glob patternfileSummary- Get AI summary of file contentfileIndex- Index files into knowledge basefileRead- Read file contentsfileEdit- Edit file with find/replacefileCreate- Create new filefileCopy- Copy filefileMove- Move/rename filefileDelete- Delete filefileStats- Get file metadatafileAttach- Attach file to messagetextSearch- Search file contents with regexdirCreate- Create directorydirSummary- Summarize directory contentsshell- Execute shell commands
User preferences and assistant management:
assistantSwitch- Switch to different assistantassistantUpdate- Update assistant promptassistantAdd- Create new assistantmemoryList- List user memoriesmemoryUpdate- Update user memories
Custom data type system:
typeList- List all custom typestypeInfo- Get type definitiontypeCreate- Define new data typetypeUpdate- Update type definitiontypeDelete- Delete typetypeImport- Import type from JSON schema
Image generation and analysis:
imageGenerate- Generate images from textimageEdit- Edit existing imagesimageAnalyze- Analyze image with vision AIimageDescribe- Get detailed image descriptionimageFind- Search generated imagesimageAttach- Attach image to message
Web operations:
webSearch- Search the web (via Tavily)webGetPage- Fetch and extract page contentwebApiCall- Make HTTP API requests
Data record management:
dataIndex- Index data records into knowledge basedataImport- Import data from filesdataSearch- Semantic search over data recordsdataGet- Get specific data recorddbaQuery- Query data with filters and sorting
Core system tools:
getOperationOutput- Retrieve truncated operation outputabout- Information about Cletusretool- Switch toolsets or enable adaptive modehypothetical- Switch to restrictive mode for explorationask- Ask user multiple-choice questions with special UI
Cletus stores its data in ~/.cletus/:
~/.cletus/
├── config.json # User settings, API keys, assistants
├── knowledge.json # Vector embeddings for semantic search
├── chats/ # Chat history
│ ├── {chat-id}.json
│ └── ...
├── data/ # Custom data records
│ ├── {type-name}.json
│ └── ...
└── images/ # Generated and edited images
Cletus supports multiple AI providers:
- OpenAI (For all model types)
- OpenRouter (For chat models)
- Replicate (For image generation & editing primarily)
- AWS (For chat models)
- Tavily (For web search)
Common environment variables & AWS profiles are auto-detected
In the settings you can configure what models you want to use for each behavior.
You choose how autonomous Cletus is - either automatically performing certain operations or asking for approval.
Cletus comes with built-in assistant personas:
- Gollum - Speaks like Gollum from LOTR (helpful but tricksy)
- Harry Potter - Adds magical spell casting to responses
- Sherlock Holmes - Analytical and deductive reasoning style
- Comic - Makes jokes while helping
Create your own:
You: Create an assistant named "Poet" that responds in verse
Cletus: I'll create that assistant...
[Uses assistant_add tool]
Switch assistants mid-chat:
You: Switch to Sherlock Holmes
Cletus: Switching assistant...
[Uses assistant_switch tool]
Define structured data with validation:
Files, data records, and user memories are automatically embedded and searchable:
- Full-text semantic search across all knowledge
- Source filtering (user memories, specific files, data types)
- Relevant context retrieval for AI responses
Supported file types:
- Documents: PDF, DOCX, XLSX, TXT, MD, JSON, CSV
- Images: PNG, JPG, GIF, BMP, WEBP
- Archives: ZIP (auto-extraction and indexing)
- Code: Any text-based code files
Operations:
- AI-generated summaries
- Semantic indexing and search
- Content extraction (text, images, tables)
- OCR for images in documents
- Image description and analysis
Add at least one provider in settings or edit ~/.cletus/config.json to include API keys.
Web search requires a Tavily API key. Get one at tavily.com and add it in settings.
Check that your configured models are available for your provider. See provider documentation for available models.
Chat files are stored in ~/.cletus/chats/. If they're deleted, history is lost. Consider backing up this directory.
The knowledge base (~/.cletus/knowledge.json) grows as you index files and data. You can delete specific sources using the knowledge_delete tool.
packages/cletus/
├── src/
│ ├── agents/ # AI agent definitions
│ ├── components/ # React/Ink UI components
│ ├── helpers/ # Utility functions
│ ├── operations/ # Tool operation implementations
│ ├── tools/ # Tool definitions
│ ├── ai.ts # AI setup and configuration
│ ├── chat.ts # Chat management
│ ├── config.ts # Configuration handling
│ ├── data.ts # Data storage
│ ├── knowledge.ts # Knowledge base
│ ├── schemas.ts # Zod schemas
│ └── index.tsx # Entry point
├── docs/ # Additional documentation
├── dist/ # Built files
├── package.json
├── tsconfig.json
└── README.md
- Add to schemas - Update
OperationKindSchemainschemas.ts - Define tool - Add tool definition in
tools/{agent}.ts - Implement operation - Add implementation in
operations/{agent}.tsx
Example:
// 1. schemas.ts
export const OperationKindSchema = z.enum([
// ...
'my_new_tool',
]);
// 2. tools/clerk.ts
const myNewTool = ai.tool({
name: 'my_new_tool',
description: 'Does something useful',
instructions: `Use this to...`,
schema: z.object({
input: z.string().describe('The input'),
}),
call: async (input, _, ctx) =>
ctx.ops.handle({ type: 'my_new_tool', input }, ctx),
});
// 3. operations/clerk.tsx
export const myNewTool = operationOf<
{ input: string },
{ result: string }
>({
mode: 'read',
signature: 'my_new_tool(input: string)',
status: (input) => `Processing: ${input.input}`,
analyze: async ({ input }, { cwd }) => ({
analysis: `This will process: ${input.input}`,
doable: true,
}),
do: async ({ input }, ctx) => {
const result = await doSomething(input.input);
return { result };
},
render: (op, ai, showInput, showOutput) => renderOperation(
op,
`MyNewTool("${op.input.input}")`,
(op) => op.output ? `Result: ${op.output.result}` : null,
showInput, showOutput
),
});# Clean build
npm run clean
npm run build
# Type checking
npm run typecheckContributions are welcome! Please see the main @aeye repository for contribution guidelines.
GPL-3.0 © ClickerMonkey
- @aeye/ai - Core AI library
- @aeye/core - Shared utilities and types
- @aeye/models - Model registry and definitions
- @aeye/openai - OpenAI provider
- @aeye/openrouter - OpenRouter provider
- @aeye/replicate - Replicate provider
- @aeye/aws - AWS Bedrock provider











