This section lists every BASIC keyword implemented in the GeneralBots engine. Each keyword page includes:
Syntax – Exact command format
Parameters – Expected arguments
Description – What the keyword does
Example – A short snippet showing usage
The source code for each keyword lives in src/basic/keywords/. Only the keywords listed here exist in the system.
All variables in General Bots BASIC are case-insensitive. The preprocessor normalizes variable names to lowercase automatically.
' These all refer to the same variable
host = "https://api.example.com"
result = GET Host + "/endpoint"
TALK HOST
Keywords are also case-insensitive but conventionally written in UPPERCASE:
' Both work identically
TALK "Hello"
talk "Hello"
Variables defined with param- prefix in config.csv are automatically available in scripts without the prefix:
name,value
param-host,https://api.example.com
param-limit,100
param-pages,50
' Access directly (lowercase, no param- prefix)
result = GET host + "/items?limit=" + limit
See Script Execution Flow for complete details.
Keyword Category Description
ADD BOTMulti-Agent Add a bot to the current session with triggers
ADD MEMBERCommunication Add member to a group
ADD SUGGESTIONUI Add clickable suggestion button
ADD TOOLTools Register a tool for the session
AGGREGATEData Perform SUM, AVG, COUNT, MIN, MAX operations
BOOKSpecial Book an appointment
BOT REFLECTIONMulti-Agent Enable agent self-analysis and improvement
BROADCAST TO BOTSMulti-Agent Send message to all bots in session
CLEAR HEADERSHTTP Clear all HTTP headers
CLEAR KBKnowledge Unload knowledge base from session
CLEAR SUGGESTIONSUI Remove all suggestion buttons
CLEAR TOOLSTools Remove all registered tools
COMPRESSFiles Create ZIP archive
COPYFiles Copy a file
CREATE DRAFTCommunication Create email draft
CREATE SITETools Generate a website
CREATE TASKTools Create a task
DELEGATE TO BOTMulti-Agent Send task to another bot
DELETEData Delete records from table
DELETE FILEFiles Delete a file
DELETE HTTPHTTP Send HTTP DELETE request
DOWNLOADFiles Download file from URL
EXIT FORControl Exit loop early
EXTRACTFiles Extract ZIP archive
FILLData Fill template with data
FILTERData Filter records by condition
FINDData Search in files or KB
FIRSTData Get first element
FOR EACH ... NEXTControl Loop through items
FORMATData Format strings and dates
GENERATE PDFFiles Generate PDF from template
GETVariables Get variable or API data
GET BOT MEMORYMemory Retrieve bot-level persisted data
GET USER MEMORYMemory Retrieve user-level persisted data (cross-bot)
GRAPHQLHTTP Execute GraphQL query
GROUP BYData Group data by field
HEARDialog Get input from user
IF ... THEN ... ELSE ... END IFControl Conditional logic
INSERTData Insert new record
INSTRString Find position of substring
IS NUMERICString Check if value is numeric
JOINData Join two datasets
LASTData Get last element
LISTFiles List directory contents
LLMAI Query language model
MAPData Map field names
MERGEData Merge data into table
MERGE PDFFiles Merge multiple PDFs
MOVEFiles Move or rename file
ONEvents Event handler
PATCHHTTP Send HTTP PATCH request
PIVOTData Create pivot table
POSTHTTP Send HTTP POST request
PRINTDebug Debug output to console
PUTHTTP Send HTTP PUT request
READFiles Read file content
REMEMBERMemory Store user-specific memory
RUN BASHCode Execution Execute Bash script in sandbox
RUN JAVASCRIPTCode Execution Execute JavaScript in sandbox
RUN PYTHONCode Execution Execute Python code in sandbox
SAVEData Save data to table (upsert)
SAVE FROM UNSTRUCTUREDData Extract structured data from text
SEND MAILCommunication Send email
SETVariables Set variable value
SET BOT MEMORYMemory Persist data at bot level
SET CONTEXTAI Add context for LLM
SET HEADERHTTP Set HTTP header
SET SCHEDULEEvents Schedule script execution
SET USERSession Set user context
SET USER FACTMemory Store a fact about the user
SET USER MEMORYMemory Persist data at user level (cross-bot)
SOAPHTTP Execute SOAP API call
SWITCH ... CASE ... END SWITCHControl Switch statement
SYNCHRONIZEData Sync API data to table (planned)
TALKDialog Send message to user
TRANSFER CONVERSATIONMulti-Agent Hand off conversation to another bot
UPDATEData Update existing records
USE MODELAI Switch LLM model for subsequent operations
USER FACTSMemory Get all stored user facts
UPLOADFiles Upload file to storage
USE KBKnowledge Load knowledge base
USE TOOLTools Register tool definition
USE WEBSITEKnowledge Associate website with session
WAITControl Pause execution
WEATHERSpecial Get weather information
WEBHOOKEvents Create webhook endpoint
WHILE ... WENDControl While loop
WRITEFiles Write content to file
Keyword Syntax Description
TALK TALK "message"Send message to user
HEAR HEAR variable or HEAR variable AS TYPEGet input from user
WAIT WAIT secondsPause execution
PRINT PRINT "debug message"Debug output to console
Keyword Syntax Description
SET SET variable = value or let variable = valueSet variable value
GET result = GET "path"Get variable or fetch data
SET BOT MEMORY SET BOT MEMORY "key", valuePersist data at bot level
GET BOT MEMORY value = GET BOT MEMORY("key")Retrieve persisted data
SET USER MEMORY SET USER MEMORY "key", valuePersist data at user level (cross-bot)
GET USER MEMORY value = GET USER MEMORY("key")Retrieve user-level data
SET USER FACT SET USER FACT "key", valueStore fact about user
USER FACTS facts = USER FACTS()Get all user facts
REMEMBER REMEMBER "key", valueStore user-specific memory
Keyword Syntax Description
LLM result = LLM "prompt"Query language model
SET CONTEXT SET CONTEXT "name" AS "value"Add context for LLM
SET USER SET USER useridSet user context
USE MODEL USE MODEL "modelname"Switch LLM model (fast/quality/code/auto)
Keyword Syntax Description
ADD BOT ADD BOT "name" TRIGGER ON "keywords"Add bot with triggers
DELEGATE TO BOT result = DELEGATE "message" TO BOT "name"Send task to bot
BROADCAST TO BOTS BROADCAST "message" TO BOTSMessage all bots
TRANSFER CONVERSATION TRANSFER CONVERSATION TO "botname"Hand off to bot
BOT REFLECTION BOT REFLECTION trueEnable self-analysis
BOT REFLECTION INSIGHTS insights = BOT REFLECTION INSIGHTS()Get analysis results
Keyword Syntax Description
RUN PYTHON result = RUN PYTHON "code"Execute Python in sandbox
RUN JAVASCRIPT result = RUN JAVASCRIPT "code"Execute JS in sandbox
RUN BASH result = RUN BASH "code"Execute Bash in sandbox
RUN … WITH FILE result = RUN PYTHON WITH FILE "script.py"Run script file
Keyword Syntax Description
USE KB USE KB "kbname"Load knowledge base
CLEAR KB CLEAR KB or CLEAR KB "kbname"Unload knowledge base
USE WEBSITE USE WEBSITE "url"Associate website with session
FIND result = FIND "file", "filter"Search in files or KB
Keyword Syntax Description
ADD TOOL ADD TOOL "toolname"Register tool for session
USE TOOL USE TOOL "toolname"Load tool definition
CLEAR TOOLS CLEAR TOOLSRemove all registered tools
CREATE TASK CREATE TASK "title", "description"Create a task
CREATE SITE CREATE SITE "alias", "template", "prompt"Generate a website
CREATE DRAFT CREATE DRAFT "to", "subject", "body"Create email draft
Keyword Syntax Description
ADD SUGGESTION ADD SUGGESTION "key" AS "display text"Add clickable button
CLEAR SUGGESTIONS CLEAR SUGGESTIONSRemove all buttons
Keyword Syntax Description
SAVE SAVE "table", var1, var2, var3Save data (upsert)
INSERT result = INSERT "table", dataInsert new record
UPDATE rows = UPDATE "table", "filter", dataUpdate records
DELETE rows = DELETE "table", "filter"Delete records
MERGE result = MERGE "table", data, "key"Merge data into table
FILTER result = FILTER data, "condition"Filter records
AGGREGATE result = AGGREGATE "SUM", data, "field"Aggregate operations
JOIN result = JOIN left, right, "key"Join datasets
PIVOT result = PIVOT data, "row", "value"Create pivot table
GROUP BY result = GROUP BY data, "field"Group data
SYNCHRONIZE SYNCHRONIZE endpoint, table, key, pageVar, limitVarSync API to table
MAP result = MAP data, "old->new"Map field names
FILL result = FILL data, templateFill template
FIRST result = FIRST collectionGet first element
LAST result = LAST collectionGet last element
FORMAT result = FORMAT value AS "pattern"Format strings/dates
Keyword Syntax Description
READ content = READ "path"Read file content
WRITE WRITE "path", contentWrite to file
DELETE FILE DELETE FILE "path"Delete a file
COPY COPY "source", "destination"Copy a file
MOVE MOVE "source", "destination"Move/rename file
LIST files = LIST "path/"List directory
UPLOAD url = UPLOAD file, "path"Upload file
DOWNLOAD path = DOWNLOAD "url", "local"Download file
COMPRESS archive = COMPRESS files, "name.zip"Create ZIP
EXTRACT files = EXTRACT "archive.zip", "dest/"Extract ZIP
GENERATE PDF result = GENERATE PDF "template", data, "output.pdf"Generate PDF
MERGE PDF result = MERGE PDF files, "merged.pdf"Merge PDFs
Keyword Syntax Description
POST result = POST "url", dataHTTP POST request
PUT result = PUT "url", dataHTTP PUT request
PATCH result = PATCH "url", dataHTTP PATCH request
DELETE HTTP result = DELETE HTTP "url"HTTP DELETE request
SET HEADER SET HEADER "name", "value"Set HTTP header
CLEAR HEADERS CLEAR HEADERSClear all headers
GRAPHQL result = GRAPHQL "url", "query", varsGraphQL query
SOAP result = SOAP "wsdl", "operation", paramsSOAP call
Keyword Syntax Description
IF…THEN…ELSE IF condition THEN ... ELSE ... END IFConditional
FOR EACH…NEXT FOR EACH item IN collection ... NEXT itemLoop
EXIT FOR EXIT FORExit loop early
WHILE...WENDWHILE condition ... WENDWhile loop
SWITCH...CASESWITCH value CASE x ... END SWITCHSwitch statement
REPORTSEND EMAIL admin, REPORTAccess sync statistics
RESET REPORTRESET REPORTClear sync statistics
Keyword Syntax Description
ON ON "event" CALL handlerEvent handler
SET SCHEDULE SET SCHEDULE "cron"Schedule execution
WEBHOOK WEBHOOK "endpoint"Create webhook
Keyword Syntax Description
SEND MAIL SEND MAIL "to", "subject", "body"Send email
ADD MEMBER ADD MEMBER "email", "group"Add to group
Keyword Syntax Description
BOOK BOOK "appointment"Book appointment
WEATHER weather = WEATHER "location"Get weather
INSTR pos = INSTR(string, search)Find substring
IS NUMERIC result = IS NUMERIC(value)Check if numeric
SAVE FROM UNSTRUCTURED data = SAVE FROM UNSTRUCTURED text, schemaExtract structured data
' Variable names (no underscores in names)
let ticketnumber = "TKT001"
let useremail = "user@example.com"
' SAVE with field names = variable names
SAVE "table.csv", ticketnumber, useremail, status
' Keywords with spaces
SET BOT MEMORY "last_ticket", ticketnumber
SET CONTEXT "name" AS "description"
ADD SUGGESTION "key" AS "Display text"
CLEAR SUGGESTIONS
USE KB "myknowledge"
USE TOOL "mytool"
' GET BOT MEMORY as function
let lastticket = GET BOT MEMORY("last_ticket")
' NO: Complex object operations
SET object.field = value ' WRONG
SAVE "table", object.id, object ' WRONG
' NO: IF for input validation (use HEAR AS TYPE instead)
IF value = "" THEN ' OK for logic, but for input use:
HEAR value AS STRING ' Better - validates input type
Special multi-line blocks for AI configuration and formatted output:
Block Purpose Documentation
BEGIN SYSTEM PROMPT ... END SYSTEM PROMPTDefine AI persona, rules, capabilities Prompt Blocks
BEGIN TALK ... END TALKFormatted multi-line messages with Markdown Prompt Blocks
BEGIN SYSTEM PROMPT
You are a helpful assistant for AcmeStore.
Rules:
1. Always be polite
2. Never discuss competitors
END SYSTEM PROMPT
BEGIN TALK
**Welcome!** 🎉
I can help you with:
• Orders
• Tracking
• Returns
END TALK
Scripts execute from line 1 - no MAIN or entry point needed:
' ✅ CORRECT - Start directly
TALK "Hello!"
ADD TOOL "my-tool"
' ❌ WRONG - Don't use MAIN
SUB MAIN()
TALK "Hello"
END SUB
Use for helper code within tools, not as entry points:
FUNCTION CalculateTotal(price, quantity)
RETURN price * quantity
END FUNCTION
SUB NotifyAdmin(message)
SEND EMAIL admin1, message
END SUB
' Execution starts here
total = CalculateTotal(19.99, 3)
CALL NotifyAdmin("Order processed")
See Script Execution Flow for entry points and lifecycle.
Keywords are case-insensitive (TALK = talk = Talk)
Variables are case-insensitive (host = HOST = Host)
String parameters can use double quotes or single quotes
Comments start with REM or ’
Line continuation uses underscore (_)
Objects are created with #{ key: value } syntax
Arrays use [item1, item2, ...] syntax
param-* config values become global variables