Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Keyword Reference

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.

Important: Case Insensitivity

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"

Configuration Variables (param-*)

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.


Complete Keyword List (Flat Reference)

KeywordCategoryDescription
ADD BOTMulti-AgentAdd a bot to the current session with triggers
ADD MEMBERCommunicationAdd member to a group
ADD SUGGESTIONUIAdd clickable suggestion button
ADD TOOLToolsRegister a tool for the session
AGGREGATEDataPerform SUM, AVG, COUNT, MIN, MAX operations
BOOKSpecialBook an appointment
BOT REFLECTIONMulti-AgentEnable agent self-analysis and improvement
BROADCAST TO BOTSMulti-AgentSend message to all bots in session
CLEAR HEADERSHTTPClear all HTTP headers
CLEAR KBKnowledgeUnload knowledge base from session
CLEAR SUGGESTIONSUIRemove all suggestion buttons
CLEAR TOOLSToolsRemove all registered tools
COMPRESSFilesCreate ZIP archive
COPYFilesCopy a file
CREATE DRAFTCommunicationCreate email draft
CREATE SITEToolsGenerate a website
CREATE TASKToolsCreate a task
DELEGATE TO BOTMulti-AgentSend task to another bot
DELETEDataDelete records from table
DELETE FILEFilesDelete a file
DELETE HTTPHTTPSend HTTP DELETE request
DOWNLOADFilesDownload file from URL
EXIT FORControlExit loop early
EXTRACTFilesExtract ZIP archive
FILLDataFill template with data
FILTERDataFilter records by condition
FINDDataSearch in files or KB
FIRSTDataGet first element
FOR EACH ... NEXTControlLoop through items
FORMATDataFormat strings and dates
GENERATE PDFFilesGenerate PDF from template
GETVariablesGet variable or API data
GET BOT MEMORYMemoryRetrieve bot-level persisted data
GET USER MEMORYMemoryRetrieve user-level persisted data (cross-bot)
GRAPHQLHTTPExecute GraphQL query
GROUP BYDataGroup data by field
HEARDialogGet input from user
IF ... THEN ... ELSE ... END IFControlConditional logic
INSERTDataInsert new record
INSTRStringFind position of substring
IS NUMERICStringCheck if value is numeric
JOINDataJoin two datasets
LASTDataGet last element
LISTFilesList directory contents
LLMAIQuery language model
MAPDataMap field names
MERGEDataMerge data into table
MERGE PDFFilesMerge multiple PDFs
MOVEFilesMove or rename file
ONEventsEvent handler
PATCHHTTPSend HTTP PATCH request
PIVOTDataCreate pivot table
POSTHTTPSend HTTP POST request
PRINTDebugDebug output to console
PUTHTTPSend HTTP PUT request
READFilesRead file content
REMEMBERMemoryStore user-specific memory
RUN BASHCode ExecutionExecute Bash script in sandbox
RUN JAVASCRIPTCode ExecutionExecute JavaScript in sandbox
RUN PYTHONCode ExecutionExecute Python code in sandbox
SAVEDataSave data to table (upsert)
SAVE FROM UNSTRUCTUREDDataExtract structured data from text
SEND MAILCommunicationSend email
SETVariablesSet variable value
SET BOT MEMORYMemoryPersist data at bot level
SET CONTEXTAIAdd context for LLM
SET HEADERHTTPSet HTTP header
SET SCHEDULEEventsSchedule script execution
SET USERSessionSet user context
SET USER FACTMemoryStore a fact about the user
SET USER MEMORYMemoryPersist data at user level (cross-bot)
SOAPHTTPExecute SOAP API call
SWITCH ... CASE ... END SWITCHControlSwitch statement
SYNCHRONIZEDataSync API data to table (planned)
TALKDialogSend message to user
TRANSFER CONVERSATIONMulti-AgentHand off conversation to another bot
UPDATEDataUpdate existing records
USE MODELAISwitch LLM model for subsequent operations
USER FACTSMemoryGet all stored user facts
UPLOADFilesUpload file to storage
USE KBKnowledgeLoad knowledge base
USE TOOLToolsRegister tool definition
USE WEBSITEKnowledgeAssociate website with session
WAITControlPause execution
WEATHERSpecialGet weather information
WEBHOOKEventsCreate webhook endpoint
WHILE ... WENDControlWhile loop
WRITEFilesWrite content to file

Keywords by Category

Core Dialog Keywords

KeywordSyntaxDescription
TALKTALK "message"Send message to user
HEARHEAR variable or HEAR variable AS TYPEGet input from user
WAITWAIT secondsPause execution
PRINTPRINT "debug message"Debug output to console

Variable & Memory

KeywordSyntaxDescription
SETSET variable = value or let variable = valueSet variable value
GETresult = GET "path"Get variable or fetch data
SET BOT MEMORYSET BOT MEMORY "key", valuePersist data at bot level
GET BOT MEMORYvalue = GET BOT MEMORY("key")Retrieve persisted data
SET USER MEMORYSET USER MEMORY "key", valuePersist data at user level (cross-bot)
GET USER MEMORYvalue = GET USER MEMORY("key")Retrieve user-level data
SET USER FACTSET USER FACT "key", valueStore fact about user
USER FACTSfacts = USER FACTS()Get all user facts
REMEMBERREMEMBER "key", valueStore user-specific memory

AI & Context

KeywordSyntaxDescription
LLMresult = LLM "prompt"Query language model
SET CONTEXTSET CONTEXT "name" AS "value"Add context for LLM
SET USERSET USER useridSet user context
USE MODELUSE MODEL "modelname"Switch LLM model (fast/quality/code/auto)

Multi-Agent Orchestration

KeywordSyntaxDescription
ADD BOTADD BOT "name" TRIGGER ON "keywords"Add bot with triggers
DELEGATE TO BOTresult = DELEGATE "message" TO BOT "name"Send task to bot
BROADCAST TO BOTSBROADCAST "message" TO BOTSMessage all bots
TRANSFER CONVERSATIONTRANSFER CONVERSATION TO "botname"Hand off to bot
BOT REFLECTIONBOT REFLECTION trueEnable self-analysis
BOT REFLECTION INSIGHTSinsights = BOT REFLECTION INSIGHTS()Get analysis results

Code Execution (Sandboxed)

KeywordSyntaxDescription
RUN PYTHONresult = RUN PYTHON "code"Execute Python in sandbox
RUN JAVASCRIPTresult = RUN JAVASCRIPT "code"Execute JS in sandbox
RUN BASHresult = RUN BASH "code"Execute Bash in sandbox
RUN … WITH FILEresult = RUN PYTHON WITH FILE "script.py"Run script file

Knowledge Base

KeywordSyntaxDescription
USE KBUSE KB "kbname"Load knowledge base
CLEAR KBCLEAR KB or CLEAR KB "kbname"Unload knowledge base
USE WEBSITEUSE WEBSITE "url"Associate website with session
FINDresult = FIND "file", "filter"Search in files or KB

Tools & Automation

KeywordSyntaxDescription
ADD TOOLADD TOOL "toolname"Register tool for session
USE TOOLUSE TOOL "toolname"Load tool definition
CLEAR TOOLSCLEAR TOOLSRemove all registered tools
CREATE TASKCREATE TASK "title", "description"Create a task
CREATE SITECREATE SITE "alias", "template", "prompt"Generate a website
CREATE DRAFTCREATE DRAFT "to", "subject", "body"Create email draft

UI & Interaction

KeywordSyntaxDescription
ADD SUGGESTIONADD SUGGESTION "key" AS "display text"Add clickable button
CLEAR SUGGESTIONSCLEAR SUGGESTIONSRemove all buttons

Data Operations

KeywordSyntaxDescription
SAVESAVE "table", var1, var2, var3Save data (upsert)
INSERTresult = INSERT "table", dataInsert new record
UPDATErows = UPDATE "table", "filter", dataUpdate records
DELETErows = DELETE "table", "filter"Delete records
MERGEresult = MERGE "table", data, "key"Merge data into table
FILTERresult = FILTER data, "condition"Filter records
AGGREGATEresult = AGGREGATE "SUM", data, "field"Aggregate operations
JOINresult = JOIN left, right, "key"Join datasets
PIVOTresult = PIVOT data, "row", "value"Create pivot table
GROUP BYresult = GROUP BY data, "field"Group data
SYNCHRONIZESYNCHRONIZE endpoint, table, key, pageVar, limitVarSync API to table
MAPresult = MAP data, "old->new"Map field names
FILLresult = FILL data, templateFill template
FIRSTresult = FIRST collectionGet first element
LASTresult = LAST collectionGet last element
FORMATresult = FORMAT value AS "pattern"Format strings/dates

File Operations

KeywordSyntaxDescription
READcontent = READ "path"Read file content
WRITEWRITE "path", contentWrite to file
DELETE FILEDELETE FILE "path"Delete a file
COPYCOPY "source", "destination"Copy a file
MOVEMOVE "source", "destination"Move/rename file
LISTfiles = LIST "path/"List directory
UPLOADurl = UPLOAD file, "path"Upload file
DOWNLOADpath = DOWNLOAD "url", "local"Download file
COMPRESSarchive = COMPRESS files, "name.zip"Create ZIP
EXTRACTfiles = EXTRACT "archive.zip", "dest/"Extract ZIP
GENERATE PDFresult = GENERATE PDF "template", data, "output.pdf"Generate PDF
MERGE PDFresult = MERGE PDF files, "merged.pdf"Merge PDFs

HTTP & API Operations

KeywordSyntaxDescription
POSTresult = POST "url", dataHTTP POST request
PUTresult = PUT "url", dataHTTP PUT request
PATCHresult = PATCH "url", dataHTTP PATCH request
DELETE HTTPresult = DELETE HTTP "url"HTTP DELETE request
SET HEADERSET HEADER "name", "value"Set HTTP header
CLEAR HEADERSCLEAR HEADERSClear all headers
GRAPHQLresult = GRAPHQL "url", "query", varsGraphQL query
SOAPresult = SOAP "wsdl", "operation", paramsSOAP call

Flow Control

KeywordSyntaxDescription
IF…THEN…ELSEIF condition THEN ... ELSE ... END IFConditional
FOR EACH…NEXTFOR EACH item IN collection ... NEXT itemLoop
EXIT FOREXIT 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

Events & Scheduling

KeywordSyntaxDescription
ONON "event" CALL handlerEvent handler
SET SCHEDULESET SCHEDULE "cron"Schedule execution
WEBHOOKWEBHOOK "endpoint"Create webhook

Communication

KeywordSyntaxDescription
SEND MAILSEND MAIL "to", "subject", "body"Send email
ADD MEMBERADD MEMBER "email", "group"Add to group

Special Functions

KeywordSyntaxDescription
BOOKBOOK "appointment"Book appointment
WEATHERweather = WEATHER "location"Get weather
INSTRpos = INSTR(string, search)Find substring
IS NUMERICresult = IS NUMERIC(value)Check if numeric
SAVE FROM UNSTRUCTUREDdata = SAVE FROM UNSTRUCTURED text, schemaExtract structured data

Syntax Rules

DO ✅

' 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")

DON’T ❌

' 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

Prompt Blocks

Special multi-line blocks for AI configuration and formatted output:

BlockPurposeDocumentation
BEGIN SYSTEM PROMPT ... END SYSTEM PROMPTDefine AI persona, rules, capabilitiesPrompt Blocks
BEGIN TALK ... END TALKFormatted multi-line messages with MarkdownPrompt 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

Script Structure

No MAIN Function

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

SUB and FUNCTION for Reuse

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.


Notes

  • 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

See Also