Recent Updates Toggle Comment Threads | Keyboard Shortcuts

  • Nathan Darmawan 12:22 am on October 5, 2026 Permalink  

    How to Build a Survey or Online Experiment with AI (Claude Code or Codex) Using GuidedTrack 

    GuidedTrack is a free survey and experiment builder, and its AI Coding Agent Skill lets Claude Code or OpenAI’s Codex build surveys, questionnaires, and online experiments from a plain-English description.

    There’s now a much easier way to build studies with GuidedTrack. AI coding agents like Claude Code and OpenAI’s Codex can write GuidedTrack programs for you using the GuidedTrack AI Coding Agent Skill. The skill is a reference package that teaches the agent GuidedTrack’s exact syntax, so it doesn’t guess at keywords. Once it’s installed, you describe a tool, study, or survey in plain English. The agent writes the program, pushes it live to your GuidedTrack account, and pulls the resulting data back. You never have to write GuidedTrack code yourself, and you don’t need any coding experience.

    You can use this to build almost anything GuidedTrack supports: simple surveys and questionnaires, customer and employee surveys, feedback forms, psychology experiments, randomized controlled trials, personality quizzes with results, calculators, interactive courses, and decision-making tools. GuidedTrack also handles what basic form builders can’t, like branching logic, skip logic, random assignment to conditions, and scoring. That makes this one of the fastest ways to build a complex survey or experiment with AI, whether you’re an academic researcher running behavioral science studies or someone who just needs a good survey, and whether you’re new to GuidedTrack or have used it for years.

    Example: A Hiring Perceptions Vignette Experiment

    This post walks through the process with a concrete example: a hiring perceptions vignette study. Participants see a resume alongside a candidate photo and rate how qualified the candidate seems. The resume text is the same for everyone. The photo varies across a 2×2 factorial, between-subjects design: the candidate is either a man or a woman, and is either wearing glasses or not. Each participant is randomly assigned to one of the four conditions. This is a classic behavioral science setup for studying how appearance shapes perceived competence.

    We’ll use Claude Code here, but the same steps work with Codex and most other AI coding agents.

    What You’ll Need

    • Claude Code. This requires a paid Claude plan.
    • A NEW GuidedTrack.com account. GuidedTrack’s free tier is enough to build and run this study. Keep this account separate from your personal account (see Step 1).

    Already using Claude Code? Ask it to install the GuidedTrack AI Coding Agent Skill, then describe the program, survey, or study you want to build. You’ll still need a separate GuidedTrack account and a login file (Steps 1 and 6) before Claude Code can publish anything. If you’re new to Claude Code, follow the steps below from the beginning.

    Step 1. Create a Dedicated (Free) GuidedTrack Account

    Sign up for a new, free account at GuidedTrack.com with a fresh email address that you’ll use only with Claude Code. Don’t reuse your main account. In Step 6 you’ll store this account’s password in a plain-text file so Claude Code can publish programs for you. A separate account means that password gives access to as little as possible.

    Step 2. Install Claude Code

    If you are already using Claude Code, you can skip this step.

    On Mac or Linux, open a terminal and run:

    curl -fsSL https://claude.ai/install.sh | bash

    For Windows or other install options, follow the official quickstart guide.

    Step 3. Create a Project Folder

    Create a folder for your project. In this example, it’s a folder called hiring-perceptions-study on the Desktop:

    Step 4. Start Claude Code

    Move into the folder and start Claude Code:

    cd ~/Desktop/hiring-perceptions-study
    claude

    By default, Claude Code asks for your approval before it runs commands. The first time it pushes to or pulls from GuidedTrack, you can approve the command and tell it not to ask again. When a real password is involved, this is the most predictable option.

    If you’d rather not approve commands one by one, start Claude Code in auto mode instead:

    claude –permission-mode auto

    In auto mode, Claude Code runs most commands without asking. A safety check still pauses or blocks anything it judges risky, such as sending credentials somewhere unexpected. That check is a judgment call rather than a fixed rule, so it isn’t a guarantee. Auto mode is available on Pro, Max, and Team plans with a supported model.

    Step 5. Install GuidedTrack Skill

    In Claude Code, type:

    Install the GuidedTrack Builder skill from https://github.com/GuidedTrack/GuidedTrackAICodingAgentSkill

    Step 6. Save Your Login in a Secret File

    This step is so that Claude Code can push the code to your GuidedTrack account, if you don’t need that you can skip this step.

    In your project folder, create a text file named secret.txt. Put the new account’s email on the first line and its password on the second:

    you@example.com
    your-password-here

    Don’t share this folder with anyone. If you use Git, add secret.txt to your .gitignore so the password is never committed.

    Step 7. Describe Your Study

    Describe what you want in plain English. You don’t need any GuidedTrack syntax. Remember to tell Claude Code where your login is. Here’s the prompt I used:

    Using the guidedtrack-builder skill, build a between-subjects hiring perceptions study called “Hiring Perceptions Study.” Participants see one page with a short resume excerpt for a project management candidate, alongside a headshot photo. Randomly assign each participant to one of four conditions, crossing the candidate’s apparent gender (man, woman) with whether they’re wearing glasses (glasses, no glasses), so every combination shows up equally often. Use GuidedTrack’s placeholder image for all four for now; I’ll swap in real photos later. Save which condition they saw as a single readable variable. After the resume, ask how qualified the candidate seems on a 5-point scale, whether they’d recommend interviewing them, and one open-text question about what stood out to them. When you’re done, push the program to GuidedTrack using the login in secret.txt so I can test it.

    Step 8. Review and Test the Program

    When Claude Code finishes, it summarizes what it built and confirms that the program was pushed:

    Log in to GuidedTrack with your new account, open the Hiring Perceptions Study, and run a preview. You should see the resume page with the placeholder photo:

    The rating questions come next:

    All four conditions use the same placeholder for now, so you can’t tell them apart by looking. While testing, ask Claude Code to temporarily show the condition name on the page. Remove it before launch. To change anything, just tell Claude Code in plain English, for example “make the open-text question optional,” and ask it to push again.

    You can also read the GuidedTrack code Claude Code wrote. It’s saved in your GuidedTrack account under the program’s name. View the full program Claude Code built for this example.

    Adapting This for Your Use Case

    Behind the scenes, Claude Code uses GuidedTrack’s *experiment block to randomly assign each participant to a condition. That block sets the variables the resume page reads. A few ways to build on this:

    • Swap in real photos. Use headshots that are matched on age, expression, lighting, and background, so the only differences are gender and glasses.
    • Add a comprehension check. Put it before the *experiment block so it can’t differ systematically between conditions.
    • Add a manipulation check. Ask something like “What did you notice about the candidate’s photo?” after the rating questions, not before. Asking it earlier could reveal the study’s purpose while participants are still answering.
    • Recruit participants. Every GuidedTrack program has a shareable link, so you can send it to participants you recruit through platforms like Positly, or share it by email or on social media.
    • Reuse the pattern. The same structure works for many vignette studies: a shared page that reads condition-specific variables set by an *experiment block. You could run an audit study (also called a correspondence study) testing how a candidate’s name affects perceived employability, a design with a long history in labor economics. You could also run similar studies with apartment listings or dating profiles, or switch to a within-subjects design where each participant rates several versions.
    • Build an everyday survey instead. You don’t need an experiment to benefit. For a customer feedback survey with skip logic, you could prompt:
    Build a customer feedback survey. Ask how likely people are to recommend us on a 0 to 10 scale. If they answer 6 or lower, ask what we could improve; otherwise, ask what they liked most.

    The same approach works for employee surveys, event feedback forms, course evaluations, and quizzes with scored results.

    Frequently Asked Questions

    Can AI build a survey for me?

    Yes. With the GuidedTrack AI Coding Agent Skill, an AI coding agent like Claude Code or Codex can build a complete survey from a plain-English description, publish it to your GuidedTrack account, and pull the responses back.

    Is GuidedTrack free?

    Yes, GuidedTrack has a free tier, which is enough to build and run surveys and experiments like the one in this guide. Claude Code itself requires a paid Claude plan.

    Can Claude or ChatGPT create a randomized experiment?

    Yes, through AI coding agents. Claude Code (from Anthropic) and Codex (from OpenAI) can both build randomized experiments in GuidedTrack, including random assignment to conditions, between-subjects and within-subjects designs, and factorial designs like the 2×2 example above.

    How do I build a psychology experiment without coding?

    Install Claude Code and the GuidedTrack skill, then describe your experiment in plain English: the conditions, how participants are assigned, and what you want to measure. The agent writes the GuidedTrack program for you, so you never touch the code.

    Can I build a survey with branching logic or skip logic using AI?

    Yes. Just describe the logic in your prompt, for example “if they answer no, skip to the last page.” GuidedTrack supports branching logic, skip logic, conditional questions, scoring, and randomization.

    Do I need to know how to code?

    No. You describe what you want in plain English, and the AI agent writes the GuidedTrack code. You’ll only run a couple of setup commands, which this guide gives you word for word.

    How do I collect and export the survey data?

    Share your program’s link with participants, then ask Claude Code to pull the data. You can analyze your responses in any tool you like, such as Hypothesize.io, R, Python, SPSS, or Excel.

    Also Read

     
  • Nathan Darmawan 9:54 am on September 10, 2026 Permalink  

    Build a Psychology Reflection Tool with Claude and GuidedTrack 

    Anthropic’s Claude is one of the most thoughtful and nuanced AI models available today. It excels at following layered instructions carefully, handling sensitive topics with care, and generating responses that feel considered rather than generic, making it a natural fit for reflection-based, research, and psychological programs built in GuidedTrack.

    This tutorial walks you through a concrete example: a participant describes something that went well for them recently, and Claude reflects back what that moment reveals about their values and strengths, personalized entirely to what they wrote. But the underlying pattern is the same whether you want the AI to guide someone through an emotion journaling exercise, generate personalized feedback after a psychological assessment, help a participant explore a difficult experience with gentle prompting, analyze open-text responses for themes, or do almost anything else with language. Once you understand how to connect Claude to a GuidedTrack program, you can adapt it to a huge range of applications.

    What You’ll Need

    Step 1. Generate an Anthropic API key

    Log in to the Anthropic Console at console.anthropic.com, or sign up if you don’t have one. Once signed in, go to API Keys and click Create Key. Copy the key and store it somewhere safe, it’s only shown once. When I am testing this, it seems that you’ll need to top-up the account to get it running, so please be sure to top-up the account otherwise you won’t be able to interact using its API.

    Step 2. Create and configure your GuidedTrack program

    If you already have a GuidedTrack account, go here to login. If you don’t have a GuidedTrack account yet, go here to create one for free! Now, go to your programs page in GuidedTrack, and create a new GuidedTrack program and name it whatever you like.

    Select Settings on the navigation bar, go to the Services tab and click on “+ Add external service”:

    Use these values to fill in these fields:

    NameClaude API
    URLhttps://generativelanguage.googleapis.com/v1beta

    Add a header with the name X-Api-Key and the value [your API key]. Add another header with the name anthropic-version and the value 2023-06-01.Click Save.

    Step 3. Write your GuidedTrack program

    Here’s a complete example, a positive psychology reflection tool that asks participants to describe something that went well for them recently, then has Claude reflect back what it reveals about their values and strengths:

    >> claude_model = "claude-sonnet-4-6"
    
    *question: Describe something that went well for you recently — big or small.
    	*type: paragraph
    	*save: good_moment
    
    >> system_prompt_for_claude = "You are conducting a positive psychology reflection exercise. Your role is to help people recognize their own strengths and values through everyday moments. Do not be generic or give advice. Be thoughtful and specific to what they shared."
    
    >> message_prompt_for_claude = "Someone described something that went well for them: '{good_moment}'. Reflect back to them what this moment reveals about what they value or what they're capable of. Be warm and specific to what they shared. Keep it to 2 short paragraphs."
    
    Please wait, processing your reflection...
    
    *service: Claude API
    	*path: /messages
    	*method: POST
    	*send: { "model" -> claude_model, "max_tokens" -> 1024, "system" -> system_prompt_for_claude, "messages" -> [ { "role" -> "user", "content" -> message_prompt_for_claude } ] }
    	*success
    		>> response_from_claude = it["content"][1]["text"]
    		>> raw_from_claude = it["content"]
    		>> text_from_claude = raw_from_claude[1]["text"]
    		
    	*error
    		>> error_with_ai = 1
    		>> full_error_message = it
    
    *wait: data
    *clear
    
    *if: error_with_ai
    	The AI had an error.
    	
    	Full response including error: {full_error_message}
    	
    	Please report this bug.
    
    *if: not (error_with_ai)
    	*Your moment:*
    	{good_moment}
    	
    	*A reflection:*
    	{text_from_claude}
    

    How the code works

    The program runs in three stages.

    Stage 1 – Collect input

    The program initializes the claude_model variable with the model to use and prompts the participant to describe something that went well for them recently. The participant’s response is saved in good_moment. The program then creates a system prompt and a message prompt that instruct Claude to reflect on what the participant’s experience reveals about their values or capabilities, while keeping the response warm, specific, and concise. While GuidedTrack processes the request, the participant sees “Please wait, processing your reflection…”

    >> claude_model = "claude-sonnet-4-6"
    
    *question: Describe something that went well for you recently — big or small.
    	*type: paragraph
    	*save: good_moment
    
    >> system_prompt_for_claude = "You are conducting a positive psychology reflection exercise. Your role is to help people recognize their own strengths and values through everyday moments. Do not be generic or give advice. Be thoughtful and specific to what they shared."
    
    >> message_prompt_for_claude = "Someone described something that went well for them: '{good_moment}'. Reflect back to them what this moment reveals about what they value or what they're capable of. Be warm and specific to what they shared. Keep it to 2 short paragraphs."
    
    Please wait, processing your reflection...
    

    This is what the user will see:

    Stage 2 – Call the API

    The *service block sends the participant’s input to Claude’s /messages endpoint. The request uses claude_model to specify the model, system_prompt_for_claude as the system instruction, and message_prompt_for_claude as the participant-specific prompt.

    On success, the response content is stored in response_from_claude and raw_from_claude, and the generated text is extracted from raw_from_claude[1][“text”] and stored in text_from_claude.

    If the API call fails, error_with_ai is set to 1, and the full error response is stored in full_error_message for further handling.

    *service: Claude API
    	*path: /messages
    	*method: POST
    	*send: { "model" -> claude_model, "max_tokens" -> 1024, "system" -> system_prompt_for_claude, "messages" -> [ { "role" -> "user", "content" -> message_prompt_for_claude } ] }
    	*success
    		>> response_from_claude = it["content"][1]["text"]
    		>> raw_from_claude = it["content"]
    		>> text_from_claude = raw_from_claude[1]["text"]
    		
    	*error
    		>> error_with_ai = 1
    		>> full_error_message = it
    

    Stage 3 – Display the result

    *wait: data ensures the API response and updated variables are fully synced before the program continues. *clear removes the loading message. If an error occurred during the API call, the participant is shown an error message along with the full error response. Otherwise, the participant sees their original moment followed by Claude’s reflection.

    *wait: data
    *clear
    
    *if: error_with_ai
    	The AI had an error.
    	
    	Full response including error: {full_error_message}
    	
    	Please report this bug.
    
    *if: not (error_with_ai)
    	*Your moment:*
    	{good_moment}
    	
    	*A reflection:*
    	{text_from_claude}
    

    This is what the user will see:

    Adapting This for Your Use Case

    The same pattern works for any scenario where you want Claude to respond to something a participant wrote:

    • Emotion journaling: Ask participants to describe how they’re feeling and have Claude help them identify the core emotion underneath, without clinical language or advice.
    • Values clarification: Participants describe a decision they made recently, and Claude reflects back what values or priorities seem to be driving them.
    • Grief and loss studies: Participants describe a loss they’ve experienced. Claude offers a humanizing, non-clinical reflection, useful for research programs studying coping or resilience.
    • System prompt variations: Everything about Claude’s tone, constraints, and output format is controlled through the system field in *send. Adjust it to change how Claude responds without touching anything else in the program.

    Also Read

    Build an AI-Powered Personal Coaching App with ChatGPT and GuidedTrack
    Build an AI-Powered Learning App with Gemini and GuidedTrack
    Use GuidedTrack to Build a ChatGPT-Style Web App with the OpenAI API
    The basic of using *service to embed other apps and tools

     
  • Nathan Darmawan 9:52 am on September 10, 2026 Permalink  

    Build an AI-Powered Learning App with Gemini and GuidedTrack 

    Google’s Gemini is one of the fastest and most cost-effective AI models available today. It handles complex reasoning, follows detailed instructions reliably, and generates personalized responses at scale, making it a great fit for GuidedTrack programs that need to process a high volume of participant responses quickly.

    This tutorial walks you through a concrete example: a participant writes about something they’ve been curious about, and Gemini responds with a short, engaging explanation tailored to what they wrote, including a surprising fact and a question to spark further exploration. But the underlying pattern is the same whether you want the AI to generate personalized quiz feedback, turn a participant’s free-text response into a structured summary, suggest resources based on what someone is interested in, explain a concept at a reading level matched to the audience, or do almost anything else with language. Once you understand how to connect Gemini to a GuidedTrack program, you can adapt it to a huge range of applications.

    What You’ll Need

    • A Gemini API key (from aistudio.google.com)
    • A GuidedTrack account with Custom Services enabled

    Step 1. Generate a Gemini API key

    Log in to Google AI Studio at aistudio.google.com, or sign up for a free account if you don’t have one. Once signed in, click Get API key, then Create API key. Copy the key and store it somewhere safe, you’ll need it in the next step.

    Step 2. Create and configure your GuidedTrack program

    If you already have a GuidedTrack account, go here to login. If you don’t have a GuidedTrack account yet, go here to create one for free! Now, go to your programs page in GuidedTrack, and create a new GuidedTrack program and name it whatever you like.

    Select Settings on the navigation bar, go to the Services tab and click on “+ Add external service”:

    Use these values to fill in these fields:

    NameGemini API
    URLhttps://generativelanguage.googleapis.com/v1beta

    Add a header with the name x-goog-api-key and the value [your API key]. Click Save.

    Step 3. Write your GuidedTrack program

    Here’s a complete example, a curiosity-driven learning tool that takes a topic the participant wants to understand better and returns a short, engaging explanation from Gemini:

    *question: What's one thing you've been wanting to learn about lately?
    	*type: paragraph
    	*save: curiosity_text
    
    >> prompt_for_gemini = "You are an enthusiastic teacher who loves making ideas accessible. The person wrote this about something they want to learn: '{curiosity_text}'. Give them a short, engaging explanation that builds their curiosity. Include one surprising fact and end with a question that encourages them to explore more. Keep it under 150 words."
    
    Please wait, generating your response...
    
    *service: Gemini API
    	*path: /models/gemini-2.5-flash:generateContent
    	*method: POST
    	*send: { "contents" -> [ { "parts" -> [ { "text" -> prompt_for_gemini } ] } ] }
    	*success
    		>> raw_from_gemini = it["candidates"]
    		>> content_from_gemini = raw_from_gemini[1]["content"]
    		>> part_from_gemini = content_from_gemini["parts"]
    		>> text_from_gemini = part_from_gemini[1]["text"]
    		
    		
    	*error
    		>> error_with_ai = 1
    		>> full_error_message = it
    
    *wait: data
    *clear
    
    *if: error_with_ai
    	The AI had an error.
    	
    	Full response including error: {full_error_message}
    	
    	Please report this bug.
    
    *if: not (error_with_ai)
    	*You wanted to learn about:*
    	{curiosity_text}
    	
    	*Here's something to get you started:*
    	{text_from_gemini}
    
    

    How the code works

    The program runs in three stages.

    Stage 1 – Collect input

    The program prompts the participant to describe something they have been wanting to learn about. The participant’s response is saved in curiosity_text. The program then constructs prompt_for_gemini, which combines the participant’s input with instructions for Gemini to provide a short, engaging explanation, including a surprising fact and a question to encourage further exploration. While GuidedTrack processes the request, the participant sees “Please wait, generating your response…”

    *question: What's one thing you've been wanting to learn about lately?
    	*type: paragraph
    	*save: curiosity_text
    
    >> prompt_for_gemini = "You are an enthusiastic teacher who loves making ideas accessible. The person wrote this about something they want to learn: '{curiosity_text}'. Give them a short, engaging explanation that builds their curiosity. Include one surprising fact and end with a question that encourages them to explore more. Keep it under 150 words."
    
    Please wait, generating your response...
    
    

    This is what the user will see:

    Stage 2 – Call the API

    The *service block sends the participant’s input to Gemini’s generateContent endpoint. The request uses prompt_for_gemini as the input. On success, the response is parsed in several steps:

    1. The candidates are stored in raw_from_gemini,
    2. the content is extracted and stored in content_from_gemini,
    3. the response parts are stored in part_from_gemini,
    4. and the generated text is then extracted and stored in text_from_gemini.

    If the API call fails, error_with_ai is set to 1, and the full error response is stored in full_error_message for further handling.

    *service: Gemini API
    	*path: /models/gemini-2.5-flash:generateContent
    	*method: POST
    	*send: { "contents" -> [ { "parts" -> [ { "text" -> prompt_for_gemini } ] } ] }
    	*success
    		>> raw_from_gemini = it["candidates"]
    		>> content_from_gemini = raw_from_gemini[1]["content"]
    		>> part_from_gemini = content_from_gemini["parts"]
    		>> text_from_gemini = part_from_gemini[1]["text"]
    		
    	*error
    		>> error_with_ai = 1
    		>> full_error_message = it
    

    Stage 3 – Display the result

    *wait: data ensures the API response and updated variables are fully synced before the program continues. *clear removes the loading message. If an error occurred during the API call, the participant is shown an error message along with the full error response. Otherwise, the participant sees the topic they wanted to learn about followed by the response generated by Gemini.

    *wait: data
    *clear
    
    *if: error_with_ai
    	The AI had an error.
    	
    	Full response including error: {full_error_message}
    	
    	Please report this bug.
    
    *if: not (error_with_ai)
    	*You wanted to learn about:*
    	{curiosity_text}
    	
    	*Here's something to get you started:*
    	{text_from_gemini}
    

    This is what the user will see:

    Adapting This for Your Use Case

    The same pattern works for any scenario where you want Gemini to respond to something a participant wrote:

    • Wellbeing check-ins: Ask participants how they’ve been feeling this week and have Gemini suggest one small, evidence-based activity to try based on their response.
    • Habit journaling: Participants describe a habit they’re working on, and Gemini generates a personalized three-day micro-plan based on what they wrote.
    • Open-text summarization: Collect free-text responses across multiple questions and use Gemini to generate a plain-language summary of each participant’s overall input.
    • Prompt variations: Adjust Gemini’s output format, reading level, or tone by modifying the instruction text. Everything about how Gemini responds is controlled there.

    Also Read

    Build an AI-Powered Personal Coaching App with ChatGPT and GuidedTrack
    Build a Psychology Reflection Tool with Claude and GuidedTrack
    Use GuidedTrack to Build a ChatGPT-Style Web App with the OpenAI API
    The basic of using *service to embed other apps and tools

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel