> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # InfoGathererSkill > Gather answers to a configurable list of questions, one at a time. [add-skill]: /docs/server-sdks/reference/typescript/agents/agent-base/add-skill Collect answers to a configured list of questions. The skill registers a `start_questions` tool and a `submit_answer` tool; the agent advances through the question list and reports completion when every question is answered. Fails closed during `setup()` when `questions` is missing or invalid. **Class:** `InfoGathererSkill` **Tools:** `start_questions`, `submit_answer` (names are prefixed when `prefix` is set) **Env vars:** None **Multi-instance:** yes **`questions`** `QuestionDefinition[]` — required Ordered list of questions to ask. Each question has: * `key_name` (string, required) — key used to store the caller's answer. * `question_text` (string, required) — the question to ask. * `confirm` (boolean) — when `true`, the agent asks the caller to confirm the answer before moving on. * `prompt_add` (string) — optional extra prompt text appended while this question is active. --- **`prefix`** `string` Optional prefix for tool names and the global-data namespace. When set, tools are named `_start_questions` / `_submit_answer` and state is stored under `skill:`. Required when loading multiple `InfoGathererSkill` instances on the same agent. --- **`completion_message`** `string` Message returned after every question has been answered. Defaults to a generic completion message. --- ## Example ```typescript {6-14} import { AgentBase, InfoGathererSkill } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'intake', route: '/intake' }); agent.setPromptText('Collect contact information for follow-up.'); await agent.addSkill(new InfoGathererSkill({ questions: [ { key_name: 'full_name', question_text: 'What is your full name?' }, { key_name: 'email', question_text: 'What is your email address?', confirm: true }, { key_name: 'phone', question_text: 'What is your phone number?' }, ], completion_message: 'Thanks — we will be in touch shortly.', })); agent.run(); ``` > Gather answers to a configurable list of questions, one at a time.