Skip to content

feat: Added support for running direct tool calls by the agent - #443

Merged
frikky merged 13 commits into
Shuffle:mainfrom
satti-hari-krishna-reddy:single-run
Aug 4, 2026
Merged

feat: Added support for running direct tool calls by the agent#443
frikky merged 13 commits into
Shuffle:mainfrom
satti-hari-krishna-reddy:single-run

Conversation

@satti-hari-krishna-reddy

@satti-hari-krishna-reddy satti-hari-krishna-reddy commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

  • Makes it optional for tool calls to use Singul.
  • Calls executeSingleAction directly, which calls PrepareSingleAction to run the actual app.
  • This avoids the overhead of using Singul in cases where the agent already knows the app action's schema and passes the correct data.
  • The Singul bypass is controlled by injecting an execution_mode=direct parameter from the agent caller function.

@frikky frikky left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some small-ish things.

Comment thread cloudSync.go Outdated
func runAgentDecisionDirectAppCall(execution WorkflowExecution, decision AgentDecision) (rawResult []byte, debugUrl string, appName string, categoryLabels []string, actionName string, err error) {
ctx := context.Background()
minUser := User{
Username: execution.Workflow.Owner,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't necessarily work long-term. Using org -> lookup user somehow is almost always better

Comment thread cloudSync.go Outdated
}
}

requestUrl := fmt.Sprintf("%s/api/v1/apps/%s/run?delete=false&execution_id=%s&authorization=%s&org_id=%s&timeout=115", baseURL, resolvedAppId, execution.ExecutionId, execution.Authorization, execution.ExecutionOrg)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why such a high timeout? Is it necessary? And why so specific at 115?

Most of our apps time out at 60 seconds, or even 30 seconds by default. That is the app itself.

Comment thread cloudSync.go
return body, debugUrl, appName, []string{}, "", err
}

skipSingul := executionMode == "direct" || os.Getenv("AGENT_SKIP_SINGUL") == "true"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, neat.

We need to clean up environment variables soon lol

@frikky
frikky merged commit da024d4 into Shuffle:main Aug 4, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants