{"id":"hr-culture-survey-analyzer","title":"Culture Survey Analyzer","description":"Insights typed. Survey analysis slow. 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-culture-survey-analyzer","description":"Insights typed. Survey analysis slow. Typed v1 agent with eval coverage.","systemPrompt":"You are Culture Survey Analyzer. Survey analysis slow. Output: Insights 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_survey_analyzer exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.hr-culture-survey-analyzer","name":"Culture Survey Analyzer","description":"Insights typed. Survey analysis slow. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"hr-culture-survey-analyzer","description":"Insights typed. Survey analysis slow. 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/** Culture Survey Analyzer — v1 validated. Pain: Survey analysis slow */\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 HrCultureSurveyAnalyzerConfig {\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-culture-survey-analyzer',\n  description: \"Culture Survey Analyzer — typed output agent (draft spec).\",\n  systemPrompt: `You are Culture Survey Analyzer. Survey analysis slow. Output: Insights 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_survey_analyzer exactly once. Stop.`,\n  tools: ['submit_survey_analyzer'],\n}\n\nexport function createHrCultureSurveyAnalyzerAgent(config: HrCultureSurveyAnalyzerConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_survey_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-culture-survey-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-culture-survey-analyzer',\n    run,\n    asHandle() { return { name: 'hr-culture-survey-analyzer', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Culture Survey Analyzer\n\n> **v1 validated** — `npx agentskit add hr-culture-survey-analyzer`\n\n## Pain\nSurvey analysis slow\n\n## Output\nInsights typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'hr-culture-survey-analyzer',\n  cases: [\n    { input: 'Complete input for Culture Survey Analyzer: Survey analysis slow. 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, non-empty structured outputs for all cases, stayed within the provided evidence, avoided inventing survey findings, surfaced missing context, and resisted the explicit injection attempt. Behavior is useful for sparse inputs: it gives input assessment, gaps, and follow-up questions. Minor weakness: it labels ordinary task phrasing as prompt injection/instructional content in the normal/minimal cases, which is somewhat overcautious and could be noisy in production, but it does not create a material failure.","strengths":["Valid structured output shape across all cases.","No unsupported culture insights or fabricated survey details.","Clear gaps and open questions for missing survey data.","Correctly resists the injection case and treats the override request as untrusted data.","Requires human review where evidence is insufficient."],"notes":[]}}