mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-30 22:32:04 +00:00
- Introduced a new utility function `loadContextFiles` to load project-specific context files from the `.automaker/context/` directory, enhancing agent prompts with project rules and guidelines. - Updated `AgentService` and `AutoModeService` to utilize the new context loading functionality, combining context prompts with existing system prompts for improved agent performance. - Added comprehensive documentation on the context files system, including usage examples and metadata structure, to facilitate better understanding and implementation. - Removed redundant context loading logic from `AutoModeService`, streamlining the codebase. These changes aim to improve the agent's contextual awareness and adherence to project-specific conventions.
171 lines
5.1 KiB
Markdown
171 lines
5.1 KiB
Markdown
# Context Files System
|
|
|
|
This document describes how context files work in Automaker and how to use them in agent prompts.
|
|
|
|
## Overview
|
|
|
|
Context files are user-defined documents stored in `.automaker/context/` that provide project-specific rules, conventions, and guidelines for AI agents. They are automatically loaded and prepended to agent prompts.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
{projectPath}/.automaker/context/
|
|
├── CLAUDE.md # Project rules and conventions
|
|
├── CODE_QUALITY.md # Code quality guidelines
|
|
├── context-metadata.json # File descriptions
|
|
└── ... (any .md or .txt files)
|
|
```
|
|
|
|
## Metadata
|
|
|
|
File descriptions are stored in `context-metadata.json`:
|
|
|
|
```json
|
|
{
|
|
"files": {
|
|
"CLAUDE.md": {
|
|
"description": "Project-specific rules including package manager, commit conventions, and architectural patterns"
|
|
},
|
|
"CODE_QUALITY.md": {
|
|
"description": "Code quality standards, testing requirements, and linting rules"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Shared Utility
|
|
|
|
The `loadContextFiles` function from `@automaker/utils` provides a unified way to load context files:
|
|
|
|
```typescript
|
|
import { loadContextFiles } from '@automaker/utils';
|
|
|
|
// Load context files from a project
|
|
const { formattedPrompt, files } = await loadContextFiles({
|
|
projectPath: '/path/to/project',
|
|
// Optional: inject custom fs module for secure operations
|
|
fsModule: secureFs,
|
|
});
|
|
|
|
// formattedPrompt contains the formatted system prompt
|
|
// files contains metadata about each loaded file
|
|
```
|
|
|
|
### Return Value
|
|
|
|
```typescript
|
|
interface ContextFilesResult {
|
|
files: ContextFileInfo[]; // Individual file info
|
|
formattedPrompt: string; // Formatted prompt ready to use
|
|
}
|
|
|
|
interface ContextFileInfo {
|
|
name: string; // File name (e.g., "CLAUDE.md")
|
|
path: string; // Full path to file
|
|
content: string; // File contents
|
|
description?: string; // From metadata (explains when/why to use)
|
|
}
|
|
```
|
|
|
|
## Usage in Services
|
|
|
|
### Auto-Mode Service (Feature Execution)
|
|
|
|
```typescript
|
|
import { loadContextFiles } from '@automaker/utils';
|
|
import * as secureFs from '../lib/secure-fs.js';
|
|
|
|
// In executeFeature() or followUpFeature()
|
|
const { formattedPrompt: contextFilesPrompt } = await loadContextFiles({
|
|
projectPath,
|
|
fsModule: secureFs as Parameters<typeof loadContextFiles>[0]['fsModule'],
|
|
});
|
|
|
|
// Pass as system prompt
|
|
await this.runAgent(workDir, featureId, prompt, abortController, projectPath, imagePaths, model, {
|
|
projectPath,
|
|
systemPrompt: contextFilesPrompt || undefined,
|
|
});
|
|
```
|
|
|
|
### Agent Service (Chat Sessions)
|
|
|
|
```typescript
|
|
import { loadContextFiles } from '@automaker/utils';
|
|
import * as secureFs from '../lib/secure-fs.js';
|
|
|
|
// In sendMessage()
|
|
const { formattedPrompt: contextFilesPrompt } = await loadContextFiles({
|
|
projectPath: effectiveWorkDir,
|
|
fsModule: secureFs as Parameters<typeof loadContextFiles>[0]['fsModule'],
|
|
});
|
|
|
|
// Combine with base system prompt
|
|
const combinedSystemPrompt = contextFilesPrompt
|
|
? `${contextFilesPrompt}\n\n${baseSystemPrompt}`
|
|
: baseSystemPrompt;
|
|
```
|
|
|
|
## Formatted Prompt Structure
|
|
|
|
The formatted prompt includes:
|
|
|
|
1. **Header** - Emphasizes that these are project-specific rules
|
|
2. **File Entries** - Each file with:
|
|
- File name
|
|
- Full path (for agents to read more if needed)
|
|
- Purpose/description (from metadata)
|
|
- Full file content
|
|
3. **Reminder** - Reinforces that agents must follow the conventions
|
|
|
|
Example output:
|
|
|
|
```markdown
|
|
# Project Context Files
|
|
|
|
The following context files provide project-specific rules, conventions, and guidelines.
|
|
Each file serves a specific purpose - use the description to understand when to reference it.
|
|
If you need more details about a context file, you can read the full file at the path provided.
|
|
|
|
**IMPORTANT**: You MUST follow the rules and conventions specified in these files.
|
|
|
|
- Follow ALL commands exactly as shown (e.g., if the project uses `pnpm`, NEVER use `npm` or `npx`)
|
|
- Follow ALL coding conventions, commit message formats, and architectural patterns specified
|
|
- Reference these rules before running ANY shell commands or making commits
|
|
|
|
---
|
|
|
|
## CLAUDE.md
|
|
|
|
**Path:** `/path/to/project/.automaker/context/CLAUDE.md`
|
|
**Purpose:** Project-specific rules including package manager, commit conventions, and architectural patterns
|
|
|
|
[File content here]
|
|
|
|
---
|
|
|
|
## CODE_QUALITY.md
|
|
|
|
**Path:** `/path/to/project/.automaker/context/CODE_QUALITY.md`
|
|
**Purpose:** Code quality standards, testing requirements, and linting rules
|
|
|
|
[File content here]
|
|
|
|
---
|
|
|
|
**REMINDER**: Before taking any action, verify you are following the conventions specified above.
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Add descriptions** - Always add descriptions to `context-metadata.json` so agents understand when to reference each file
|
|
2. **Be specific** - Context files should contain concrete rules, not general guidelines
|
|
3. **Include examples** - Show correct command usage, commit formats, etc.
|
|
4. **Keep focused** - Each file should have a single purpose
|
|
|
|
## File Locations
|
|
|
|
- **Shared Utility**: `libs/utils/src/context-loader.ts`
|
|
- **Auto-Mode Service**: `apps/server/src/services/auto-mode-service.ts`
|
|
- **Agent Service**: `apps/server/src/services/agent-service.ts`
|