RAP Lab · Research on Artificial Persons

The Complete Furhat Guide

From signing up for the SDK to holding an AI-powered conversation — every step, with the actual screenshots from the setup.

Prepared by Chinonso Anyaehie · September 2026 · Interactive edition

1. What Furhat Is

Furhat is a physical social-robot head. It has microphones (it hears), speakers (it talks), a camera (it sees), and a projected animated face — so it can smile, blink, raise eyebrows, and move its mouth in sync with speech.

Every conversation with Furhat follows the same physical chain. Click each step to see what happens:

1. Person speakssound waves in the room
2. Microphone captures itsound → digital audio
3. Speech becomes textaudio → words on a screen
4. Script or AI writes a replythe robot's 'brain'
5. Reply becomes voicetext → spoken audio
6. Speaker plays it, mouth followswhat you see and hear
Press Play the chain (or click any step) to walk through a Furhat conversation.
Why researchers care about Furhat

Because the face, voice, gaze, and dialogue are all software-controlled, you can change exactly one thing at a time — the smile, the voice pitch, where it looks — while everything else stays identical. That makes Furhat ideal for controlled experiments on trust, emotion, attention, tutoring, and human-robot interaction.

Furhat vs. the Unitree R1: Furhat gives you precise control of face and voice; the R1 gives you a full moving body. For Chinonso’s research, Furhat is the tool for face/voice manipulation studies, the R1 for embodiment studies.

2. Getting the SDK

1Sign up. The journey starts at furhatrobotics.com/furhat-sdk. After signing up you get a welcome email from the Furhat Team:

What the email says“An invite to the Developer Zone where you can download the Furhat SDK will be arriving to your inbox (or maybe your spam filter – please check!) shortly!”

2Wait for the Developer Zone invite. Check inbox and spam. The invite contains the activation link that creates your account password.

3Log in. The email links to furhat.io/login — “Log in to the Furhat Developer Zone”:

Furhat Developer Zone login page
Figure 1. The Developer Zone login. This only works after the invite email has activated your account — before that, you have no password yet.

4Download the launcher. Inside the Developer Zone, the Downloads page offers the SDK Desktop Launcher for all three systems:

SDK downloads page
Figure 2. SDK Desktop Launcher: Linux AppImage (96.89 MB), Windows .exe (72.73 MB), Mac .dmg (95.73 MB). Pick the one for your computer.
⚠ Stuck at login?If the invite never arrives, use “Forgot your password?” on the login page with your signup email — that usually triggers the setup email.

3. Installing on Windows

1Run the installer. Double-click the downloaded furhat-sdk-desktop-launcher-Setup.exe and follow the prompts.

⚠ Windows SmartScreen warningWindows will likely flag the installer as “potentially harmful.” Furhat’s docs confirm this is a known false positive — click More info → Run anyway.

2Get your API token. The launcher’s first screen asks for a Furhat API token:

Furhat Studio asking for API token
Figure 3. “Please enter your Furhat API Token.” The token links your Developer Zone account to the launcher.

To get the token: in your browser go to furhat.io/profile/user, log in, scroll to “Furhat API token”, and click Create API-key:

Create API key page
Figure 4. The API token page. One click on Create API-key generates your token.

3Paste the token into the launcher (Figure 3) and click the arrow. Your account is now linked.

4Install the Virtual Furhat. The welcome screen offers Virtual Furhat 2.9.3 — click Install and wait a few minutes:

Welcome screen with install button
Figure 5. Welcome screen — click Install to download Virtual Furhat 2.9.3 plus the Java it needs.
Installation progress
Figure 6. Installation in progress. Just let it run.
Installed, launch button
Figure 7. Installed. Click Launch Virtual Furhat.

5The launcher is running. You now see the full menu — Create skill, Start Skill, Open web interface, AI Creator, Remote API, Blockly:

Launcher running
Figure 8. Virtual Furhat 2.9.3 running. Everything you need is on this one screen.

4. First Launch & Web Interface Tour

1Open the web interface. In the launcher click Open web interface. Your browser opens at localhost:8080 asking for a password:

Web interface login
Figure 9. The robot’s web interface login. The default password is admin — type it and press the play button.

2Meet your robot. The Home page is a remote control for the virtual robot — no coding needed:

Web interface home
Figure 10. The Home page: GAZE and head-roll controls on the left, Testing tabs (Face, Speaking, Listening, LED) on the right, and one-click gestures like BigSmile, Blink, Nod, and Smile.
Face tab
Change the robot’s character/face.
Speaking tab
Type any sentence and make the robot say it out loud.
Listening tab
Press listen, talk, and watch your words appear as text.
LED tab
Control the robot’s light strip.
Gesture buttons
Trigger a smile, nod, wink, or brow move instantly.

3Verify the install — the two tests.

✅ Test 1 – Speaking:Speaking tab → type a sentence → make it talk. You should hear the voice through your speakers.
✅ Test 2 – Listening:Listening tab → press listen → say something. Your words should appear as text.

If both work, the SDK is fully installed. (If anything looks wrong, the launcher’s view console shows the error log.)

5. SDK Superpowers — What You Can Do

Furhat’s SDK page lists the toolkit. Here is what each piece means for a researcher:

Virtual Furhat
A software copy of the robot on your laptop. Build and test everything with zero lab access — the same skills run on the physical robot later.
Kotlin dialogue framework
The programming language for robot conversations. Kotlin runs on Java, so every Java library works too.
The Furhat Library
Ready-made facial gestures, automatic head movements, and code snippets — a head start on making the robot feel alive.
Remote API
Drive the robot from a program on another computer on the same network. Speaks Python, C#, JavaScript, Rust and more — so it plugs straight into a Python/EEG experiment stack.
Wizard-of-Oz tools
Puppeteer the robot live from the graphical interface — you control its speech, face, and head while a participant interacts with it. Perfect for teleoperated studies.
Furhat Blockly
Build simple interactions visually, with drag-and-drop blocks. Prototyping in minutes, no code.
Data Logging
The Log Viewer records every interaction with timestamps, full transcriptions, and the user’s speech audio — experiment data, collected automatically.
Community
5,000+ developers and 200 universities. Shared skills, answered questions, published research.
Researcher’s comboWizard-of-Oz control + Data Logging = a ready-made experiment rig: you puppeteer the robot while it logs timestamped transcripts and audio for every session.

6. Connecting AI — Making Furhat Speak from ChatGPT

Yes — the robot can hold open-ended AI conversations. The design: Furhat listens, sends your words plus the conversation history to OpenAI’s chat API, and speaks GPT’s reply. Based on Furhat’s official OpenAI tutorial (verified September 2026).

1Get an OpenAI API key

Go to platform.openai.com, sign up/log in, create a secret key under API keys, and copy it immediately — it is shown only once.

⚠ Two things to know1) The API is pay-per-use and separate from a ChatGPT subscription — add billing/credits. 2) Never paste the key into chat, screenshots, or code you share. We’ll use the gpt-4o-mini model: fractions of a cent per chat.

2Create the skill project

In the Furhat Studio launcher click Create Skill Project, choose a folder, name it OpenAISkill.

3Open it in IntelliJ IDEA

Install the free Community edition from jetbrains.com/idea. Open the OpenAISkill folder as a project and let the Gradle sync finish.

4Add the OpenAI library

Open build.gradle, add this line in the dependencies section, then press the Gradle reload button:

implementation 'io.github.sashirestela:simple-openai:3.8.2'

5Create openai.kt

A new file in the source folder — the utility function that talks to GPT, feeding it the system prompt plus the last 10 conversation turns:

import furhatos.flow.kotlin.DialogHistory
import furhatos.flow.kotlin.Furhat
import io.github.sashirestela.openai.SimpleOpenAI
import io.github.sashirestela.openai.domain.chat.ChatMessage
import io.github.sashirestela.openai.domain.chat.ChatRequest

/** API key read from environment — never hard-coded in source **/
val serviceKey = System.getenv("OPENAI_API_KEY") ?: "YOUR_API_KEY"

val systemPrompt = "You are chatty robot. You should speak in a conversational style. Never say more than two sentences."

val openAI = SimpleOpenAI.builder()
    .apiKey(serviceKey)
    .build();

fun getDialogCompletion(): String? {
    val chatRequestBuilder = ChatRequest.builder()
        .model("gpt-4o-mini")
        .message(ChatMessage.SystemMessage.of(systemPrompt))

    Furhat.dialogHistory.all.takeLast(10).forEach {
        when (it) {
            is DialogHistory.ResponseItem -> {
                chatRequestBuilder.message(ChatMessage.UserMessage.of(it.response.text))
            }
            is DialogHistory.UtteranceItem -> {
                chatRequestBuilder.message(ChatMessage.AssistantMessage.of(it.toText()))
            }
        }
    }

    var futureChat = openAI.chatCompletions().create(chatRequestBuilder.build())
    var chatResponse = futureChat.join()
    return chatResponse.firstContent().toString()
}
Security noteThe official tutorial hard-codes the key. This version reads OPENAI_API_KEY from an environment variable instead — safer on a shared lab machine.

6Wire it into greeting.kt

Replace the Greeting state (the main state in the blank template):

val Greeting: State = state(Parent) {
    onEntry {
        furhat.ask("Hi there")
    }
    onResponse<Goodbye> {
        furhat.say("Goodbye")
        goto(Idle)
    }
    onResponse {
        val robotResponse = call {
            getDialogCompletion()
        } as String?
        furhat.ask(robotResponse?:"Could you please repeat that")
    }
    onNoResponse {
        furhat.ask("Sorry, I didn't hear anything")
    }
}

The call {...} wrapper keeps the robot responsive during the seconds GPT takes to answer. Specific intent handlers (like Goodbye) must sit above the generic onResponse.

7Give the skill your key

In IntelliJ: Run → Edit Configurations → Environment variables → add OPENAI_API_KEY with your key as the value.

8Run it and talk

Run main.kt, then speak to the robot — it answers with GPT-generated speech. Say “goodbye” and the scripted farewell fires instead. That is the hybrid design: fixed script where you need experimental control, AI where you want open conversation.

9Cover the awkward silence (recommended)

GPT takes a few seconds. Without a filler, the silence confuses people — so the robot looks away and says “Let me think” while waiting. Add this at the top of onResponse, before the call:

furhat.say(async = true) {
    +Gestures.GazeAway
    random {
        +"Let's see"
        +"Let me think"
        +"Wait a second"
    }
}
Design notes for research use
  • The system prompt is an experimental variable — it defines the robot’s persona (warm vs. formal, chatty vs. terse).
  • takeLast(10) sets how many turns the robot “remembers” — adjustable per study.
  • Log the model name and system prompt with every session: both are part of your method.
  • API calls cost money and need internet — budget per participant, and have an offline fallback script for demo days.

7. The Physical Robot

Status (September 2026): the lab’s physical Furhat is on order and expected within a week or two. Everything in this guide was built on the Virtual Furhat — deliberately.

Why that’s fine: the virtual and physical robots run the same system. A skill you build and test today runs on the real head unchanged — you only change where it points:

The strategyDevelop and test everything on the virtual robot now. The day the physical robot arrives, you deploy — no rework.

8. Master Checklist

Everything in this guide, as clickable checkboxes. Your progress is saved in this browser.

0 of 20 complete

9. What’s Next

Sources

All screenshots are from Chinonso’s own setup session, September 19, 2026. SDK version at time of writing: Virtual Furhat 2.9.3, simple-openai 3.8.2, model gpt-4o-mini.