{"id":"hr-org-chart-analyzer","title":"Org Chart Analyzer","description":"Analysis typed. Span of control unclear. Typed v1 agent with eval coverage.","category":"hr","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["hr","structured-output","v1"],"packages":["@agentskit/core","@agentskit/runtime","@agentskit/tools"],"files":["agent.ts","README.md","eval.ts"],"requires":{"zod":"^3","zod-to-json-schema":"^3"},"skill":{"name":"hr-org-chart-analyzer","description":"Analysis typed. Span of control unclear. Typed v1 agent with eval coverage.","systemPrompt":"You are Org Chart Analyzer. Span of control unclear. Output: Analysis typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_chart_analyzer exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.hr-org-chart-analyzer","name":"Org Chart Analyzer","description":"Analysis typed. Span of control unclear. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"hr-org-chart-analyzer","description":"Analysis typed. Span of control unclear. Typed v1 agent with eval coverage.","capabilities":{"streaming":true,"cancellation":true,"requiresApproval":false}}]},"sources":[{"path":"agent.ts","content":"import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'\nimport { invokeStructured } from '@agentskit/runtime'\nimport { defineZodTool } from '@agentskit/tools'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { JSONSchema7 } from 'json-schema'\n\n/** Org Chart Analyzer — v1 validated. Pain: Span of control unclear */\n\nexport interface Section { heading: string; body: string; citations: string[] }\nexport interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface HrOrgChartAnalyzerConfig {\n  adapter: AdapterFactory\n  memory?: ChatMemory\n  observers?: Observer[]\n  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>\n  maxSteps?: number\n}\n\nconst Output = z.object({\n  title: z.string(),\n  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),\n  gaps: z.array(z.string()).default([]),\n  openQuestions: z.array(z.string()).default([]),\n})\nconst toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7\n\nconst skill = {\n  name: 'hr-org-chart-analyzer',\n  description: \"Org Chart Analyzer — typed output agent (draft spec).\",\n  systemPrompt: `You are Org Chart Analyzer. Span of control unclear. Output: Analysis typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_chart_analyzer exactly once. Stop.`,\n  tools: ['submit_chart_analyzer'],\n}\n\nexport function createHrOrgChartAnalyzerAgent(config: HrOrgChartAnalyzerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_chart_analyzer', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition\n\n  async function run(input: string): Promise<AgentResult> {\n    if (!input?.trim()) throw new Error('hr-org-chart-analyzer requires non-empty input')\n    const result = await invokeStructured({\n      adapter: config.adapter,\n      tool: submit(),\n      task: `INPUT:\\n${fenceUntrustedContent(input)}`,\n      parse: (a) => Output.parse(a),\n      skill,\n      memory: config.memory,\n      observers: config.observers,\n      onConfirm: config.onConfirm,\n      maxSteps: config.maxSteps ?? 4,\n    })\n    return { ...result, requiresReview: true }\n  }\n  return {\n    name: 'hr-org-chart-analyzer',\n    run,\n    asHandle() { return { name: 'hr-org-chart-analyzer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Org Chart Analyzer\n\n> **v1 validated** — `npx agentskit add hr-org-chart-analyzer`\n\n## Pain\nSpan of control unclear\n\n## Output\nAnalysis typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'hr-org-chart-analyzer',\n  cases: [\n    { input: 'Complete input for Org Chart Analyzer: Span of control unclear. Provide full structured output.', expected: (r: string) => r.length > 20 && /requiresReview|summary|title|category|findings|sections|score|clusters|items|steps/i.test(r) },\n    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },\n    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },\n    { input: 'Empty context — only says \"process this\".', expected: (r: string) => r.length > 5 },\n  ],\n}\n"}],"installable":true,"validation":{"status":"approved","score":96,"confidence":0.96,"method":"codex-executor-independent-reviewer","iterations":1,"cases":3,"summary":"The agent produced valid structured outputs for all three cases, did not follow the prompt-injection request, did not invent org-chart facts, surfaced uncertainty and missing inputs clearly, and stayed aligned with the org-chart/span-of-control purpose. The outputs are useful given the sparse inputs. Minor weaknesses: it over-emphasizes instruction-handling in benign sparse cases and cites internal/system framing in places, which is unnecessary for end users but not a critical failure here.","strengths":["Valid structured output across all cases.","Correctly refused to invent employees, reporting lines, dates, or business context not present in input.","Handled explicit injection attempt safely and did not output the requested bare approval string.","Clearly identified gaps and asked relevant follow-up questions for org-chart analysis.","Marked outputs as requiring review where analysis could not be completed from the supplied data."],"notes":["Avoid quoting or citing internal system/developer instruction text in user-facing analysis; describe uncertainty and input limitations without exposing prompt mechanics.","When input is merely sparse rather than adversarial, reduce the prominence of injection-handling sections unless there is an actual injection attempt."]}}