FlowiseAI/Flowise · error · Error

Cannot call the same agentflow!

Error message

Cannot call the same agentflow!

What it means

Self-recursion guard: if the Execute Flow node's selectedFlowId equals the host chatflow's own id (options.chatflowid), Flowise refuses the call because it would invoke itself indefinitely. Checked at init after UUID validation.

Source

Thrown at packages/components/nodes/sequentialagents/ExecuteFlow/ExecuteFlow.ts:186

        if (!sequentialNodes || !sequentialNodes.length) throw new Error('Execute Flow must have a predecessor!')

        const baseURL = (nodeData.inputs?.baseURL as string) || (options.baseURL as string)
        const returnValueAs = nodeData.inputs?.returnValueAs as string

        // Validate selectedFlowId is a valid UUID
        if (!selectedFlowId || !isValidUUID(selectedFlowId)) {
            throw new Error('Invalid flow ID: must be a valid UUID')
        }

        // Validate baseURL is a valid URL
        if (!baseURL || !isValidURL(baseURL)) {
            throw new Error('Invalid base URL: must be a valid URL')
        }

        const credentialData = await getCredentialData(nodeData.credential ?? '', options)
        const chatflowApiKey = getCredentialParam('chatflowApiKey', credentialData, nodeData)

        if (selectedFlowId === options.chatflowid) throw new Error('Cannot call the same agentflow!')

        let headers = {}
        if (chatflowApiKey) headers = { Authorization: `Bearer ${chatflowApiKey}` }

        const chatflowId = options.chatflowid
        const sessionId = options.sessionId
        const chatId = options.chatId

        const executeFunc = async (state: ISeqAgentsState) => {
            const variables = await getVars(appDataSource, databaseEntities, nodeData, options)

            let flowInput = ''
            if (seqExecuteFlowInput === 'userQuestion') {
                flowInput = input
            } else if (seqExecuteFlowInput && seqExecuteFlowInput.startsWith('{{') && seqExecuteFlowInput.endsWith('}}')) {
                const nodeId = seqExecuteFlowInput.replace('{{', '').replace('}}', '').replace(/\$/g, '').trim()
                const messageOutputs = ((state.messages as unknown as BaseMessage[]) ?? []).filter(
                    (message) => message.additional_kwargs && message.additional_kwargs?.nodeId === nodeId

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Select a different target chatflow in the dropdown.
  2. If iterative/self-referential logic is needed, use the Loop sequential node or split the work into a separate chatflow.
Defensive patterns

Strategy: validation

Validate before calling

if (selectedFlowId === options.chatflowid) {
  throw new Error('Execute Flow cannot target its own chatflow (infinite recursion). Pick a different flow.')
}

Prevention

When it happens

Trigger: The Execute Flow dropdown was set to the same chatflow that contains this node; a chatflow was cloned from a template that referenced the original by id.

Common situations: Cloning a flow that self-referenced the source; the flow list reordered and the wrong (current) item got selected; building a recursive pattern not knowing it is disallowed.

Related errors


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/7909938c7f981461. Report an issue: GitHub.