Skip to content
RasaGet a free licence

tutorial

Chapter 0 of 6

Build a bank assistant with shared sign-in and separate skills

by Rod Rivera Published

Use shared session memory so related skills can reuse the demo customer’s identity without repeating a login.

A banking assistant has separate skills for signing in, checking a balance and making a transfer. Within one trusted session, those skills need to recognise the same customer without asking them to sign in again at every step.

You will build the fictional Sterling assistant and choose where its tools and stored values belong. Sharing a customer identity does not approve every action: transfers and other sensitive operations still need the checks their policy requires.

This tutorial builds Sterling, a small Meridian Bank agent with three skills, and uses it to answer four questions:

  1. When should a tool be local to a skill, and when should it be global?
  2. What belongs in project memory rather than a skill’s own memory?
  3. What is the difference between public and private skill memory?
  4. What makes a skill folder portable to another agent?

What you will end up with

you  my passphrase is bluebird
bot  Welcome back, Dana Okafor. You are now signed in.

you  what is the balance on 10029384
bot  The balance on account 10029384 is 2418.55 GBP.

you  send 25 pounds to Sam Rivera
bot  To confirm, you want to send 25 pounds to Sam Rivera. Is that correct?

One passphrase. The balance and the transfer both run without re-verifying, because the authentication skill wrote the customer id into project memory and the other skills’ tools read it back.

The shape of the project

Sterling's three skills — authenticate, check_balance and transfer_money — each keep a local tool in their own folder, auto-discovered. One global tool, get_customer_info in tools/customer.py, is imported by bare name into the two skills that need it. verify_passphrase in the authenticate skill is the only writer of customer_id, and it writes with a bare name into project memory; all the readers use the qualified project.customer_id form. Each skill also has its own memory split into public and private, and a private field such as passphrase_attempts is readable only by its owning skill.

In the companion, the tools write customer_id using its bare name and read it as project.customer_id. Follow that convention when tracing which tool sets the identity and which skills consume it.

IdeaWhere it lives
Local toolskills/<skill>/tools.py — auto-discovered
Global tooltools/<module>.py + import_tools: in the skill
Project memorymemory.yml at the project root
Skill memoryskills/<skill>/memory.yml, split public / private

Before you start

You need Python 3.11 or 3.12, uv, a Rasa Pro Developer Edition licence, and an OpenAI API key. The agent is text-only on purpose: the subject is architecture, not speech.

The companion project pins rasa-pro==3.21.0.dev5, as recorded in the compatibility report. That report distinguishes current offline checks from live conversations; the illustrative dialogues in this series are not proof of a new model run.