Staff policy answerer
A serverless assistant that answers staff questions about company policy from your own handbook, in chat. An employee asks “how many sick days do I have left?” or “what’s the travel expense rule?” and it answers in plain words using only your real policy docs, links the exact section it used, and says “I’m not sure, ask HR” when the answer isn’t in the docs. It never makes up policy. Seven posts on the same system — one diagram at a time — with an engineering reference at the end.
-
01
A staff policy answerer on AWS for a few dollars a month
The whole system on one page — an indexer, an answerer, and a reply piece, plus the three moves they share for every question: a grounded answer, “ask HR,” or a clean handoff.
-
02
How a staff question reaches the answerer
Three lanes feed one answer flow — a Slack DM, an @-mention in a shared channel, and an email fallback — all landing on one Function URL and normalized into a single shape.
-
03
How a policy answer gets grounded
The question is searched against the handbook by meaning, the few best sections are pulled, and the model answers from only those sections — or says it can’t. Retrieval over S3 Vectors with Titan embeddings.
-
04
How a policy answer stays honest
Four guardrails between the draft and the staff member: an off-limits topic check, a citation check, a hedge check, and a final compose with the exact section link and an honest “ask HR” path.
-
05
How the handbook stays current
Three refresh paths: a regular sync that re-reads only changed docs, a one-tap manual rebuild for urgent edits, and a gap report that turns unanswered questions into a to-do list for the handbook.
-
06
What the staff policy answerer costs
A couple of dollars a month at SMB volume. Cost tracks how many questions staff ask, not how big the handbook is. One small Bedrock call per question; the index is cheap to keep fresh.
-
07
Engineering reference: the staff policy answerer architecture
Same system, drawn purely for engineers. Service names, resource identifiers, region, Bedrock model IDs, the S3 Vectors index config, Lambda inventory, IAM scopes, the Slack app config, and the DynamoDB schemas.
Frequently asked questions
- What is a staff policy answerer?
- A small serverless assistant that answers staff questions about company policy from your own handbook, in chat. An employee asks “how many sick days do I have left?” or “what’s the travel expense rule?” and it answers in plain words using only your real policy docs, links the exact section it used, and says “I’m not sure, ask HR” when the answer isn’t in the docs. It never makes up policy. It’s the internal-staff counterpart to a customer-facing website chat assistant.
- How much does it cost to run?
- About $2/month at a small team’s volume (roughly 150 questions a month). The fixed cost is essentially zero. The biggest variable cost is one small Bedrock answer call per question; keeping the handbook index fresh is cheap because only changed sections get re-embedded. At around 600 questions a month the bill is near $5, and at 2,400 it’s around $14.
- Which AWS services does it use?
- Lambda (Python 3.14, arm64) with a Function URL for the Slack endpoint, S3 Vectors for the searchable handbook index, Bedrock (Claude Haiku 4.5 via Global cross-Region inference for answers, Titan Text Embeddings V2 for search), DynamoDB on-demand for the question log and refresh audit, S3 (versioned) for mirrored docs, SES inbound + outbound for the email lane, EventBridge Scheduler for the index sync and the weekly gap report, Secrets Manager, Parameter Store, CloudWatch Logs (7-day retention), and AWS Budgets. No API Gateway, no NAT Gateway, no always-on compute, no hosted vector database.
- Where does the handbook live?
- In a Google Drive folder you control, holding the policy docs you already have — the handbook, the leave policy, the expense policy, the code of conduct. The indexer mirrors each doc to S3 as plain text and stores a searchable fingerprint of every section in S3 Vectors. Editing a doc doesn’t need a deploy; the index refreshes within minutes, and HR can push an urgent change live in seconds with a rebuild button.
- Does it ever make up policy?
- No, by design. Every answer is grounded in sections pulled from your handbook, and the model is told to answer only from those sections and ignore its own general knowledge. A citation check confirms each claim traces back to a real section. If nothing in the handbook covers the question — or the answer is thin or hedged — the assistant says “I’m not sure, ask HR” and points to the right human instead of guessing.
- How does it answer without making things up?
- It uses retrieval: the question is searched against the handbook by meaning (via Titan embeddings and S3 Vectors), the few most relevant sections are pulled, and Claude Haiku 4.5 writes a plain-words answer using only those sections. Then four guardrails run — an off-limits topic check, a citation check, a hedge check, and a final compose that attaches the exact section link. Off-limits topics like pay disputes, terminations, and grievances always go to a human.
- What happens when the handbook doesn’t have the answer?
- The assistant says so plainly and routes the person to the right HR contact for that topic. Every “ask HR” is logged, and a weekly gap report groups the unanswered questions and posts HR a ranked list of topics the handbook doesn’t cover well — a to-do list for new policy sections. The report never edits the handbook itself; a human stays in charge of writing policy.