@codmir/overseer
v1.1.0
Published
Overseer™ - Wake-Up Call AI Agent for autonomous task management and monitoring
Maintainers
Readme
Overseer™ - Wake-Up Call AI
"Wake-Up Call" is a trademark of Codmir
An autonomous AI agent that wakes up to work on tickets, provide status reports, and monitor your projects.
╔══════════════════════════════════════════════════════════╗
║ ║
║ ☀️ OVERSEER WAKE-UP CALL ║
║ ║
║ "Always watching, always ready" ║
║ ║
╚══════════════════════════════════════════════════════════╝Concept
Overseer is an AI that:
- Sleeps when there's nothing to do
- Wakes up on triggers (schedule, new ticket, mention, deadline)
- Works on assigned tasks autonomously
- Reports status to keep the team informed
- Goes back to sleep when done
Installation
pnpm add @codmir/overseerQuick Start
import { createOverseer, createScheduler } from "@codmir/overseer";
// Create Overseer instance
const overseer = createOverseer({
organizationId: "org-123",
enabledTriggers: ["scheduled", "ticket_created", "mention", "standup"],
autoWork: {
enabled: true,
maxTasksPerWakeUp: 3,
requireApproval: true,
approvalTimeout: 30,
},
});
// Listen to events
overseer.on("*", (event) => {
console.log(`[${event.type}] ${event.message}`);
});
// Create scheduler for automatic wake-ups
const scheduler = createScheduler(overseer);
scheduler.start();
// Manual wake-up
await overseer.wakeUp("manual", { reason: "Testing" });Wake-Up Triggers
| Trigger | Description |
| ---------------- | ------------------------------- |
| scheduled | Periodic cron-based wake-up |
| ticket_created | New ticket assigned to Overseer |
| ticket_updated | Ticket status changed |
| mention | @overseer mentioned in comment |
| deadline | Deadline approaching |
| alert | System alert received |
| manual | User requested wake-up |
| session_idle | Session inactive too long |
| build_failed | CI/CD failure |
| pr_review | PR needs review |
| standup | Daily standup time |
Default Schedules
// Morning check-in (9 AM Mon-Fri)
{ cron: '0 9 * * 1-5', tasks: ['standup_prep', 'monitoring'] }
// Ticket sweep (every 4 hours)
{ cron: '0 */4 * * *', tasks: ['ticket_work'] }Task Types
| Task | Description |
| ------------------- | ----------------------- |
| ticket_work | Work on assigned ticket |
| code_review | Review code/PR |
| bug_fix | Fix a bug |
| feature_implement | Implement feature |
| documentation | Write docs |
| status_report | Generate report |
| standup_prep | Prepare standup |
| cleanup | Code cleanup |
| monitoring | Monitor systems |
| research | Research/investigate |
Status Reports
const report = await overseer.generateStatusReport("daily");
console.log(report.summary);
console.log("Highlights:", report.highlights);
console.log("Blockers:", report.blockers);
console.log("Recommendations:", report.recommendations);Capabilities Configuration
Control what Overseer can do:
const overseer = createOverseer({
capabilities: {
canWriteCode: true, // Can make code changes
canCreateBranches: true, // Can create git branches
canCreatePRs: true, // Can create pull requests
canMerge: false, // Cannot merge PRs
canDeploy: false, // Cannot deploy
canCloseTickets: false, // Cannot close tickets
canAssignTickets: true, // Can assign tickets
},
});Approval System
When requireApproval is enabled:
overseer.on("approval_requested", (event) => {
console.log(`Approval needed for: ${event.data.task.title}`);
// Approve or deny
overseer.approve(event.taskId);
// or
overseer.deny(event.taskId, "Not now");
});Webhook Integration
import { processWebhook } from "@codmir/overseer";
// Handle incoming webhook
app.post("/webhooks/overseer", async (req, res) => {
const result = await processWebhook(overseer, req.body, {
secret: process.env.WEBHOOK_SECRET,
enabledSources: ["github", "jira", "slack"],
});
res.json(result);
});Events
overseer.on("wake_up", (e) => console.log("☀️ Waking up"));
overseer.on("sleep", (e) => console.log("🌙 Going to sleep"));
overseer.on("task_start", (e) => console.log("🚀 Starting task"));
overseer.on("task_complete", (e) => console.log("✅ Task done"));
overseer.on("task_fail", (e) => console.log("❌ Task failed"));
overseer.on("report_generated", (e) => console.log("📊 Report ready"));🔴 Error Tracking (Sentry-like)
Track errors across your apps with automatic grouping and issue creation:
import { createErrorTracker, createIssueManager, GitHubIssueProvider } from "@codmir/overseer";
// Initialize error tracker
const errorTracker = createErrorTracker({
service: "web-app",
environment: "production",
release: "1.2.3",
});
// Capture errors
errorTracker.captureError(new Error("Something went wrong"), {
tags: { component: "checkout" },
extra: { cartId: "123" },
});
// Set user context
errorTracker.setUser({ id: "user-123", email: "[email protected]" });
// Add breadcrumbs
errorTracker.addBreadcrumb({
type: "navigation",
category: "router",
message: "/checkout",
level: "info",
});
// Get error stats
const stats = errorTracker.getStats("24h");
console.log(`${stats.totalErrors} errors, ${stats.affectedUsers} users affected`);
// Auto-create GitHub issues
const issueManager = createIssueManager();
issueManager.registerProvider(new GitHubIssueProvider("owner", "repo", "token"));
issueManager.setDefaultConfig({
provider: "github",
projectId: "owner/repo",
autoCreate: true,
labels: ["bug", "auto-created"],
});
// Handle new error groups
errorTracker.onNewErrorGroup(async (group) => {
await issueManager.createFromErrorGroup(group);
});🎬 Session Replay
Record and playback user sessions for debugging:
import { createReplayRecorder } from "@codmir/overseer";
const replay = createReplayRecorder({
sessionSampleRate: 0.1, // 10% of sessions
errorSampleRate: 1.0, // 100% of error sessions
privacy: {
maskAllInputs: false,
maskInputTypes: ["password", "credit-card"],
maskSelectors: [".sensitive"],
},
});
// Start recording
const sessionId = replay.start({ userId: "user-123" });
// Link errors to replay
replay.markError("error-id-123");
// Add custom events
replay.addCustomEvent("checkout_started", { cartTotal: 99.99 });
// Handle segments for upload
replay.onSegment((segment) => {
uploadToServer(segment);
});
// Stop recording
const session = replay.stop();📊 Monitoring & Metrics
Track service health and performance:
import { createMetricsCollector, createHealthMonitor, createAlertManager } from "@codmir/overseer";
// Metrics
const metrics = createMetricsCollector("api-service");
metrics.increment("http.requests.total");
metrics.gauge("queue.depth", 42);
metrics.histogram("http.latency", 150);
// Time operations
const result = await metrics.timerAsync("db.query", async () => {
return await db.query("SELECT ...");
});
// Health monitoring
const health = createHealthMonitor("api-service");
health.register("database", async () => ({
name: "database",
status: (await db.ping()) ? "healthy" : "unhealthy",
}));
health.register("redis", async () => ({
name: "redis",
status: (await redis.ping()) ? "healthy" : "unhealthy",
}));
// Get health status
const status = await health.getHealth(metrics);
// Alerts
const alerts = createAlertManager("api-service");
alerts.addRule({
name: "High Error Rate",
metric: "http.errors.total",
condition: "gt",
threshold: 100,
duration: 60000, // 1 minute
severity: "critical",
});
alerts.onAlertFired((alert) => {
notifySlack(`🚨 ${alert.name}: ${alert.message}`);
});🖥️ Client SDK (Browser, Desktop, Voice)
Unified SDK for all platforms:
import { createOverseerClient } from "@codmir/overseer";
const overseer = createOverseerClient({
dsn: "https://api.codmir.com/overseer",
service: "desktop-app",
environment: "production",
release: "1.0.0",
// Features
enableReplay: true,
enableVoiceTracking: true,
enablePerformance: true,
});
// Set user
overseer.setUser({ id: "user-123" });
// Capture errors
overseer.captureError(error);
// Track voice commands
overseer.trackVoiceCommand("navigate", {
transcript: "go to dashboard",
confidence: 0.95,
duration: 1200,
result: "success",
});
// Voice session
overseer.startVoiceSession();
// ... commands ...
const commands = overseer.endVoiceSession();
// Performance
await overseer.timeOperation("api_call", async () => {
return fetch("/api/data");
});
// Cleanup
await overseer.close();React Integration
import { useErrorBoundary, usePageTracking, useVoiceTracking } from "@codmir/overseer";
function MyComponent() {
// Track page views
usePageTracking("Dashboard");
// Voice tracking
const voice = useVoiceTracking();
const handleVoiceCommand = (transcript: string) => {
voice.track("search", transcript, 0.92, 1500);
};
return <div>...</div>;
}Architecture
┌─────────────────────────────────────┐
│ OVERSEER │
│ "Wake-Up Call" AI │
└─────────────────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ SCHEDULER │ │ AGENT │ │ REPORTER │
│ │ │ │ │ │
│ • Cron jobs │ │ • Task queue │ │ • Daily │
│ • Webhooks │─────▶│ • Execution │─────▶│ • Weekly │
│ • Triggers │ │ • Approval │ │ • Sprint │
└───────────────┘ └───────────────┘ └───────────────┘
│
▼
┌─────────────────────────────────────┐
│ INTEGRATIONS │
│ │
│ GitHub • Jira • Slack • Linear │
│ Session • Projects • Tickets │
└─────────────────────────────────────┘License
Proprietary - © Codmir
"Wake-Up Call" and "Overseer" are trademarks of Codmir.
