Interview Experience | Business Agent / AI | π₯π₯ | Meta
2026 (late Sep to early Oct) Business Support Engineer - Meta Business Agent @ Meta β Austin, TX β Virtual β 3 rounds | π Neutral | Medium-Hard
Meta Business Agent team. Phone screen plus two virtual onsite rounds.
Round 1 β Phone Coding
Tool Call Parser. The model returns one object with name and an arguments field that is still a string. Parse it into a structured call. If arguments is not valid JSON, return a clear failure instead of throwing. Empty string should mean {}.
Dict for the outer object, then json.loads on the arguments string. The empty-string case I handled on the first try. What broke was arguments that were double-encoded: a JSON string whose content was another JSON object. My first parse left a string, and their test expected a dict. After a hint I parsed once more when the value was still a string.
Follow-up: the arguments string is truncated mid-key. They wanted whatever complete fields I could recover. I sketched a brace/quote scan and stopped; no code for the recovery path.
Round 2 β Coding
Given one agent run as a list of steps, each step is (tool, args_hash, obs_hash). Find the earliest index where the run has entered a loop: a contiguous block of steps that already appeared earlier as an identical sequence of fingerprints. If there is no loop, return -1.
I treated each step as a triple and scanned for a repeated suffix. First version only caught loops of length 1 (same tool hammered). They pointed at an example where the agent alternated lookup_order and send_reply with the same hashes. Switched to checking every period length up to n/2. That part passed their cases.
Follow-up: args_hash differs because the model rephrases the same order id, but the business state did not move. They wanted a state fingerprint beyond the raw args. I only said βhash the order status the tool returned,β and did not define how to build that state object before time ran out.
Round 3 β System Design
Design the tool execution gateway in front of Meta Business Agent. The model proposes a tool call; the gateway decides whether it runs, talks to partner APIs or internal services, and writes enough for support to debug later.
I kept it to: catalog + authz + execute + audit. Catalog holds schema and whether the tool has side effects. Authz re-checks the business identity on every call, not a fat service account. Side-effecting tools (send_reply, create_order) take an idempotency key derived from run id + step id so a retry does not double-send.
They pushed on timeouts: per-tool deadline, and what the agent sees when the partner API is slow. I said return a typed timeout error the model can branch on, and do not auto-retry anything with side effects. Last question was two regions both thinking the first attempt failed. I mentioned the idempotency key store, but not how long keys live or how to reconcile a partner that accepted the request without returning an id. That one stayed open.