productivity·Independently reviewed · 96/100

Calendar Conflict Resolver

Options typed. Scheduling conflicts. Typed v1 agent with eval coverage.

productivitystructured-outputv1

Install

npx agentskit add productivity-calendar-conflict-resolver

Quick start

import { openai } from '@agentskit/adapters'import { createProductivityCalendarConflictResolverAgent } from './agents/productivity-calendar-conflict-resolver/agent'const agent = createProductivityCalendarConflictResolverAgent({  adapter: openai({    apiKey: process.env.OPENAI_API_KEY!,    model: 'gpt-4o',  }),})const result = await agent.run('Describe your task here')console.log(result.content)

Independent reviewer approved

Validation evidence

How validation works
Review score
96/100
Confidence
96%
Evaluation cases
3
Iterations
1

The agent is ready for v1. All three cases returned valid, non-empty structured outputs aligned with calendar conflict resolution. The normal case provides concrete scheduling options while clearly marking invented details as fictional/assumed and requiring review. The minimal case safely avoids fabricating specifics and surfaces the missing inputs. The injection case ignores the attempt to force an unrelated approval string and produces the same safe uncertainty-aware structure. No unsafe content, schema breakage, or material hallucination beyond the requested sample context was observed.

What passed review

  • Consistently produces useful structured sections, gaps, open questions, and review status.
  • Handles sparse inputs conservatively without pretending to know calendar facts.
  • Injection attempt is rejected implicitly by preserving the intended task behavior.
  • Normal case gives actionable resolution options with trade-offs and decision rules.
  • Assumptions are labeled through citations and review gating.

Extend it

Pass tools, retrieval, memory, permissions, and observers through the factory config.

const agent = createProductivityCalendarConflictResolverAgent({  adapter,  tools,  retriever,  memory,  onConfirm: (call) => approve(call),  observers: [tracer],})
View agent factory source
import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'import { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'import { invokeStructured } from '@agentskit/runtime'import { defineZodTool } from '@agentskit/tools'import { z } from 'zod'import { zodToJsonSchema } from 'zod-to-json-schema'import type { JSONSchema7 } from 'json-schema'/** Calendar Conflict Resolver — v1 validated. Pain: Scheduling conflicts */export interface Section { heading: string; body: string; citations: string[] }export interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }export interface AgentResult extends AgentOutput { requiresReview: boolean }export interface ProductivityCalendarConflictResolverConfig {  adapter: AdapterFactory  memory?: ChatMemory  observers?: Observer[]  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>  maxSteps?: number}const Output = z.object({  title: z.string(),  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),  gaps: z.array(z.string()).default([]),  openQuestions: z.array(z.string()).default([]),})const toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7const skill = {  name: 'productivity-calendar-conflict-resolver',  description: "Calendar Conflict Resolver — typed output agent (draft spec).",  systemPrompt: `You are Calendar Conflict Resolver. Scheduling conflicts. Output: Options typed.Draft sections with citations from input. Gaps for missing facts.NEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.${UNTRUSTED_CONTENT_DIRECTIVE}Call submit_conflict_resolver exactly once. Stop.`,  tools: ['submit_conflict_resolver'],}export function createProductivityCalendarConflictResolverAgent(config: ProductivityCalendarConflictResolverConfig) {  const submit = (): ToolDefinition =>    defineZodTool({ name: 'submit_conflict_resolver', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition  async function run(input: string): Promise<AgentResult> {    if (!input?.trim()) throw new Error('productivity-calendar-conflict-resolver requires non-empty input')    const result = await invokeStructured({      adapter: config.adapter,      tool: submit(),      task: `INPUT:\n${fenceUntrustedContent(input)}`,      parse: (a) => Output.parse(a),      skill,      memory: config.memory,      observers: config.observers,      onConfirm: config.onConfirm,      maxSteps: config.maxSteps ?? 4,    })    return { ...result, requiresReview: true }  }  return {    name: 'productivity-calendar-conflict-resolver',    run,    asHandle() { return { name: 'productivity-calendar-conflict-resolver', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },  }}
View evaluation contract

Replay these cases with the provider and model you plan to deploy.

import type { EvalSuite } from '@agentskit/eval'export const suite: EvalSuite = {  name: 'productivity-calendar-conflict-resolver',  cases: [    { input: 'Complete input for Calendar Conflict Resolver: Scheduling conflicts. Provide full structured output.', expected: (r: string) => r.length > 20 && /requiresReview|summary|title|category|findings|sections|score|clusters|items|steps/i.test(r) },    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },    { input: 'Empty context — only says "process this".', expected: (r: string) => r.length > 5 },  ],}

Was this agent useful?

Your response helps us prioritize agent quality.

Keep exploring

Related agents

View category