# Changelog
Source: https://docs.triform.ai/changelog/index
Latest updates, features, and improvements to Triform
### Storage, Widgets & Enhanced Observability - November 11 - December 1, 2025
**Major Platform Evolution:** Storage System, OAuth Widgets, Cron Triggers & Monitoring\
**Total Commits:** 112 (70 backend, 42 frontend)\
**Development Period:** 21 days\
**Focus:** File storage, interactive chat widgets, scheduled workflows, observability, and AI model expansion
**๐ฅ Headline Features:** Complete storage backend with S3 integration, interactive OAuth widgets in chat, native cron scheduling, new executions dashboard, and 5+ new AI models.
***
#### ๐ Major Features & Enhancements
**Storage System โ Complete File Management**
The most significant architectural addition of this period, enabling file storage and retrieval:
* **๐ฆ Storage Backend Implementation** (Nov 18-19)
* Complete S3-compatible storage system
* File upload and download APIs
* Storage modifiers for project-scoped access
* Secure file handling with proper authentication
* Support for multiple storage backends
* **๐ Triform Library Integration** (Nov 19, 27)
* Storage functions in Python execution environment
* `save_file()` and `get_file()` built-in functions
* Automatic storage authentication
* Project-scoped storage access
* File upload via FormData API
* **๐พ Storage Modifiers** (Nov 18)
* Project-level storage configuration
* Secure credential management
* Storage bucket isolation per organization
* Frontend UI for storage configuration
**OAuth Widgets โ Interactive Authentication**
Revolutionary chat experience with inline OAuth flows:
* **๐ฏ OAuth Widget System** (Nov 12)
* Interactive OAuth flows directly in chat
* Real-time authentication without page refresh
* Widget completion tracking and state management
* Auto-close callback windows after authentication
* Support for all OAuth providers
* **๐ Widget Framework** (Nov 17)
* Multiple widgets support in same build session
* Widget state persistence across messages
* Deterministic widget IDs for reliable tracking
* Prevention of duplicate completion events
* **๐ Provider Enhancements**
* Google OAuth with automatic profile scope (Nov 13)
* Microsoft OAuth with corrected scopes (Nov 18)
* Native browser OAuth compatibility fixes (Nov 14)
* Dynamic scope identification in builder (Nov 18)
**Cron Triggers โ Native Scheduling**
Schedule workflows to run automatically:
* **โฐ Cron Trigger Implementation** (Nov 12, 17)
* Native cron expression support
* Scheduled workflow execution
* Timezone-aware scheduling
* Cron trigger logging and monitoring
* Payload mapping synchronization
* **๐ ๏ธ Builder Integration** (Nov 14, 17)
* All trigger types supported in chat agent
* Endpoint trigger URL fixes in builder context
* Trigger availability in flow building
**Chat Actions & Quick Buttons**
Enhanced interactivity in chat conversations:
* **๐ฌ Chat Actions System** (Nov 27)
* Quick reply buttons at end of agent messages
* Interactive action buttons in chat
* Button color customization
* Stateful button interactions
* **๐จ Chat UI Improvements**
* More concise chat formatting (Nov 20)
* Improved autoscroll UX (Nov 11)
* Better chat failure handling (Nov 20)
* Chat actions component implementation
**Executions Dashboard โ Comprehensive Monitoring**
Brand new executions page for better observability:
* **๐ Executions Page** (Nov 17)
* Tabbed layout for organized viewing
* Complete execution history
* Real-time execution status
* Execution filtering and search
* Empty state handling
* **๐ Execution Tracking** (Nov 17, 19)
* Track all executions across projects
* Execution statistics to Prometheus (Nov 19)
* Better execution listener error handling
* Deterministic UUID for tool calls (Nov 20)
**AI Model Expansion โ More Options**
Significant expansion of available AI models:
* **๐ค New Models Added:**
* **Claude Haiku 4.5** via AWS Bedrock (Nov 26)
* Ultra-fast responses
* Cost-effective for chat agents
* Bedrock integration with production env
* **Gemini 3 Pro Preview** (Nov 25)
* Google's latest flagship model
* Enhanced reasoning capabilities
* Better code understanding
* **GPT-5.1** (Nov 19)
* Next-generation OpenAI model
* Advanced reasoning and coding
* **Kimi as Default Chat Model** (Nov 27)
* Set as primary chat agent model
* Improved chat experience
* Better context handling
* **Flash 2.5 Fallback** (Dec 1)
* Fallback for project metadata generation
* Ensures high availability
* **OSS 20B for Metadata** (Nov 19)
* Open-source model for metadata generation
* Cost optimization
**Builder Enhancements**
Major improvements to the AI builder system:
* **๐ Knowledge Store Evolution** (Nov 14)
* Vectorized API code snippets support
* Better modifier support in builder
* Enhanced semantic search capabilities
* Improved context retrieval
* **๐ง Builder Execution** (Nov 17, 25)
* Special headers for builder executions
* Fixed modifiers in build flow (Nov 17)
* Better execution context handling
* Improved modifier resolution
* **๐ฏ Flow Building** (Nov 27, 30)
* Auto-open flow when action wrapped in flow
* Open flow in frontend during building
* Better flow creation UX
* Improved graph generation
***
#### ๐๏ธ Infrastructure & Performance
**Database & Caching**
* **๐ด Redis Optimization** (Dec 1)
* Fixed Redis anti-patterns
* Better memory management
* More efficient caching strategies
* **โฑ๏ธ Cache Management** (Nov 11, 27)
* Project metadata generation caching (Nov 11)
* Force cache clear on component update (Nov 27)
* Improved cache invalidation
**Monitoring & Observability**
* **๐ Prometheus Integration** (Nov 19)
* Execution statistics pushed to Prometheus
* Real-time metrics collection
* Better system monitoring
* **๐ Logging Improvements** (Nov 11, 17)
* Dropped pino-loki for performance (Nov 11)
* Fixed cron logging (Nov 17)
* Better error tracking
* **๐ฅ Health Checks** (Nov 25)
* Database connection checks in healthcheck
* Better service health monitoring
* Improved uptime tracking
* **๐ Trace Cleanup** (Nov 27)
* Removed trace exporter
* Simplified telemetry stack
**Background Jobs**
* **โฐ Inngest Integration** (Nov 29)
* Daily Redis trimming via Inngest
* Automated maintenance tasks
* Better resource management
***
#### ๐จ UI/UX Improvements
**Navigation & Layout**
* **๐ Tabbed Layout** (Nov 12, 17)
* New navbar tabs
* Better information organization
* Improved navigation structure
* **๐๏ธ Properties Panel** (Nov 27)
* Hidden by default for cleaner workspace
* Auto-open on node selection
* Better screen real estate usage
* **๐ Chat Interface**
* Removed default messages input on agent (Nov 25)
* More concise formatting (Nov 20)
* Better autoscroll behavior (Nov 11)
**Component Improvements**
* **๐ Modifier Schema** (Nov 17)
* Slight refactor for consistency
* Better type definitions
* Improved validation
* **๐ฏ Project Binding** (Nov 19)
* Fixed metadata on project binding to node
* Better project reactivity (Nov 17)
* Project reset fixes (Nov 12)
**Bug Fixes & Polish**
* **Critical Fixes:**
* Empty executions page crash (Nov 18)
* Project requirements event parsing (Nov 25)
* Execution in endpoint (Nov 25)
* Agent schema issues (Nov 25)
* Modifiers in chat (Nov 20)
* Modifiers in tool calling (Nov 20)
* Unresolved modifiers in executions (Nov 20)
* **Minor Improvements:**
* Small tooltip improvements (Nov 18)
* Fix initprompt cookie handling (Nov 11)
* Fix last login badge (Nov 11)
* Hide invites UI (Nov 11)
* Tidy up codebase (Nov 17)
***
#### ๐ Security & Access Control
**Authentication Enhancements**
* **๐ซ Google & Microsoft Auth** (Nov 11)
* Social login integration
* Better user onboarding
* Simplified authentication
* **๐ง Invite System** (Nov 11)
* Everyone invited by default
* Simplified access control
* Better team collaboration
**Resource Management**
* **๐๏ธ Project Deletion** (Nov 11)
* Delete snapshots on project deletion
* Proper resource cleanup
* Fixed deletion issues
* **๐ Modifier Resolution** (Nov 20)
* Unresolved modifiers handling
* Better security for pending auth
* Graceful degradation
***
#### ๐ Bug Fixes & Stability
**Critical Fixes**
* **Redis Anti-Patterns** (Dec 1) โ Fixed performance issues with Redis usage
* **Execution Endpoint** (Nov 25) โ Fixed execution trigger in endpoints
* **Project Requirements Parsing** (Nov 25) โ Fixed event parsing issues
* **Agent Schema Issues** (Nov 25) โ Resolved schema validation problems
* **Modifiers in Chat** (Nov 20) โ Fixed modifier resolution during chat
* **Modifiers in Tool Calling** (Nov 20) โ Fixed modifier usage in tools
* **Flow Opening** (Nov 30) โ Fixed flow not opening when action wrapped
* **Chat Failures** (Nov 20) โ Improved chat error handling
**Minor Fixes**
* Cron logging (Nov 17)
* Builder execution headers (Nov 17)
* MS OAuth scopes (Nov 18)
* Execution listener errors (Nov 19)
* Trigger payload mapping (Nov 19)
* Quick button colors (Nov 19)
* FormData files endpoint (Nov 20)
* Empty executions page (Nov 18)
* Project not being reactive (Nov 17)
* Metadata on project binding (Nov 19)
* Print data on parse fail (Nov 25)
***
#### ๐ง Developer Experience
**API Improvements**
* **๐ค Files Endpoint** (Nov 20)
* FormData support for file uploads
* Better file handling
* Improved triform library integration
* **๐ Modifier Events** (Nov 13)
* Emit modifier:updated on creation
* Emit fully resolved project
* Better real-time updates
**Builder Context**
* **๐ฏ Endpoint Trigger URLs** (Nov 19)
* Fixed URL in builder context
* Better trigger documentation
* Improved testing workflow
* **๐ Button Instructions** (Nov 19)
* Adjusted button usage guidance
* Better AI understanding
* Improved generation quality
**Tag Management**
* **๐ท๏ธ Google Tag Manager** (Nov 11)
* Analytics integration
* Better user tracking
* Improved insights
***
#### ๐ Impact Analysis
**By Service:**
* **API Service:** \~15,000 lines โ Storage backend, OAuth widgets, cron triggers, new models
* **Builder Service:** \~8,000 lines โ Knowledge store, modifier support, flow improvements
* **Worker Service:** \~2,000 lines โ Execution tracking, chat actions, widget handling
* **Executor Service:** \~1,500 lines โ Storage library, OAuth integration
* **Frontend:** \~800 lines โ Executions page, OAuth widgets, tabbed layout, UI polish
**Code Statistics:**
* **Backend:** 70 commits, 26,874 lines added, 3,955 deleted, net +22,919 lines
* **Frontend:** 42 commits, 1,890 lines added, 1,078 deleted, net +812 lines
* **Total:** 112 commits, net +23,731 lines in 21 days
***
#### ๐ก Key Achievements
This 21-day period represents massive platform maturation:
1. **Storage System** โ Complete file storage with S3 integration
2. **Interactive Widgets** โ OAuth flows directly in chat experience
3. **Scheduled Workflows** โ Native cron trigger support
4. **Executions Dashboard** โ Comprehensive monitoring and observability
5. **AI Model Expansion** โ 5+ new models including Claude Haiku 4.5, Gemini 3 Pro
6. **Enhanced Observability** โ Prometheus integration, better logging
7. **Production Hardening** โ Redis optimization, cache management, health checks
**Development Velocity:**
* **108% growth** over previous period (112 commits vs 54 expected)
* **Maintained quality** with comprehensive testing
* **Zero breaking changes** to existing functionality
* **Multiple enterprise features** shipped
**User-Facing Impact:**
* Store and retrieve files in workflows with storage system
* Authenticate OAuth providers without leaving chat
* Schedule workflows with cron expressions
* Monitor all executions in dedicated dashboard
* Use latest AI models including Claude Haiku 4.5 and Gemini 3 Pro
* Better performance with Redis optimizations
* More reliable executions with improved error handling
***
#### ๐ฎ What This Enables
**For Users:**
* Build file processing workflows with storage
* Schedule automated workflows with cron
* Seamless OAuth authentication in chat
* Monitor execution history comprehensively
* Use cutting-edge AI models
**For Developers:**
* Simple storage API: `save_file()` and `get_file()`
* Interactive widget framework for chat
* Cron trigger for scheduled tasks
* Comprehensive execution tracking
* Better debugging with executions page
**For Enterprises:**
* S3-compatible storage integration
* Scheduled maintenance workflows
* Enhanced monitoring with Prometheus
* Production-ready error handling
* Scalable execution tracking
***
#### ๐ฏ Next Steps
Based on this trajectory, upcoming focus areas:
1. **Storage Enhancements** โ More storage backends, file versioning
2. **Widget Expansion** โ More widget types beyond OAuth
3. **Advanced Scheduling** โ More trigger types, conditional scheduling
4. **Execution Analytics** โ Detailed metrics, cost tracking
5. **Model Optimization** โ Fine-tuning, custom models
***
### Adding oAuth - November 4-10, 2025
**Major Enterprise Feature Release:** OAuth 2.0 Integration\
**Total Commits:** 38 (26 backend, 12 frontend)\
**Development Period:** 7 days\
**Focus:** Third-party integrations, enterprise authentication, platform stability
**๐ฅ Headline Feature:** Complete OAuth 2.0 system with 10+ provider integrations, enabling secure third-party API access for workflow automation.
***
#### ๐ Major Features & Enhancements
**OAuth 2.0 System**
The largest single feature of this period, fundamentally changing how Triform handles third-party integrations:
* **๐ฆ Complete OAuth Infrastructure** (52 files, 6,137 lines added)
* Full OAuth 2.0 authorization flow management
* Token exchange and automatic refresh
* Provider-specific implementations
* Secure credential storage with Scaleway KMS encryption
* Multi-provider support architecture
* **๐ Security & Encryption**
* **Scaleway KMS Integration** โ Dedicated key management service for OAuth tokens
* **End-to-end encryption** for all third-party credentials
* **Automatic key rotation** support
* **Organization-specific encryption keys** created on signup
* **Memcache layer** for high-performance token caching with TTL management
* **๐ Supported OAuth Providers**
* **Google** โ Gmail, Drive, Sheets, Calendar (Added Nov 10)
* **Microsoft** โ Office 365, Outlook, OneDrive, Teams
* **GitHub** โ Repository access, CI/CD integration
* **GitLab** โ Code hosting, pipelines
* **Slack** โ Team communication, workflows
* **Linear** โ Issue tracking, project management
* **Notion** โ Documentation, databases
* **Dropbox** โ File storage
* **Trello** โ Board management
* **Asana** โ Task management
* And more providers being added regularly
* **๐ง Executor Integration**
* OAuth token access from within Python actions
* Secure credential injection into execution context
* Provider-agnostic token retrieval
* Automatic token refresh during execution
* Simple API: `get_oauth_token('provider_name')`
* **โก Real-Time Features**
* OAuth events over WebSocket
* Real-time credential status updates
* Provider connection monitoring
* Token refresh notifications
**OAuth Modifiers โ Frontend Integration** (1,190+ lines added)
Complete UI for managing OAuth connections:
* **New Components Created:**
* `TagSelector` โ Multi-select tag component (173 lines)
* `Select` โ Modern dropdown component (172 lines)
* `Modifiers/Add` โ Add modifier interface (178 lines)
* `Modifiers/Modifier` โ Individual modifier display (177 lines)
* `Modifiers/OAuth` โ OAuth configuration UI (81 lines)
* `Modifiers/Root` โ Modifier panel root (60 lines)
* **Features:**
* Visual OAuth authorization flow
* Scope selection and management
* Real-time connection status
* Multiple provider support in UI
* Secure token display (masked)
**Knowledge Store Evolution** (Nov 5, 9)
* **Next-Generation Implementation** (617 lines โ NEW FILE)
* Advanced semantic search capabilities
* Better API documentation storage
* Improved context retrieval algorithms
* Enhanced caching mechanisms
* **Refactored Core** (668 lines reorganized)
* Better indexing strategies
* Improved query performance
* More efficient storage
* **API Pipeline Enhancements** (159 lines)
* Better API research workflow
* Improved testing integration
* Enhanced error handling
* More robust API discovery
**Flow Builder Improvements** (Nov 5)
* **Complete Prompt Overhaul** (713 lines reorganized in `prompts.py`)
* Restructured prompts for better flow building
* Enhanced node wiring guidance
* Better graph creation examples
* Improved error messages and validation
* More intuitive flow design patterns
* **Schema Enhancements** (42 lines added)
* Better validation logic
* Enhanced node connection rules
* Improved type checking
* More robust graph validation
***
#### ๐ค AI Models & Gateway
**New Model Support**
* **GLM-4.6 via Cerebras** (Nov 6)
* Integrated across action coder, API tester, and builder
* High-performance model option
* Better code generation capabilities
* **Kimi-K2 as Main Coder** (Nov 10)
* Set as primary coder model
* Improved code generation performance
* Simplified model selection
**AI Gateway Reliability**
* **Fallback System** (Nov 10)
* Progressive fallback for GLM models
* Fireworks as fallback provider (replaces DeepInfra)
* Comprehensive fallback logic for high availability
* Graceful degradation ensures uptime
***
#### ๐ Telemetry & Monitoring
**Initial Prompt Storage** (Nov 10)
* Database migration for prompt tracking
* Enables prompt analysis and optimization
* Analytics integration for usage patterns
* Historical prompt data for improvements
**WebSocket Keepalive System** (Nov 10)
* **45-second ping mechanism** prevents connection drops
* Significantly improved connection stability
* Better real-time reliability
* Reduced reconnection overhead
* Ping/pong protocol across API and worker
**Benefits:**
* Fewer unexpected disconnections
* More stable long-running sessions
* Better user experience
* Lower server load from reconnections
***
#### ๐๏ธ Database & Performance
**Toolbox Index** (Nov 10)
* Added database index for toolboxes
* **Significant query performance improvement**
* Faster toolbox queries and dashboard loading
* Better scalability for large deployments
**Redis Optimization** (Nov 8)
* Fixed Redis stream trimming logic
* Better memory management
* Prevents Redis memory overflow
* More efficient stream handling
**Executor Enhancements** (Nov 5)
* Bumped max payload size
* Supports larger action executions
* Better handling of complex workflows
* Reduced payload-related failures
***
#### ๐ Bug Fixes & Stability
**Critical Fixes**
* **Infinite Loop Fix** (Nov 9) โ Fixed critical infinite loop in modifier updates that caused browser freezing
* **Agent-Friendly Errors** (Nov 4) โ More descriptive error messages with better context for AI agents
* **Double Action Fix** (Nov 4) โ Fixed duplicate action creation on revert
* **Triggers in Nested Flows** (Nov 5) โ Fixed triggers not saving properly in nested flows
**UI/UX Fixes**
* **Modifiers List** (Nov 10) โ Refactored for better reliability
* **Disclosure Chevron** (Nov 5) โ Fixed color when open
* **Chat Step Icon** (Nov 5) โ Better alignment for readability
* **Chat Tooltip** (Nov 5) โ Restored tooltip functionality
**Code Cleanup**
* Removed 112 lines of obsolete components
* Cleaned up debug logging
* Removed deprecated OAuth-related files
* Better code organization
***
#### ๐ Security & Production
**Enhanced Security**
* **Organization Encryption on Signup** (Nov 10)
* Automatic encryption key provisioning
* Better security initialization
* Fixed auth flow logging issues
* **Deployment Safety** (Nov 8)
* Added caution message for production `.env`
* Prevents accidental overwrites
* Better deployment safeguards
* **Production Configuration** (Nov 10)
* Secure environment variable management
* OAuth production settings
* Better configuration isolation
**API & Database Migrations**
* **Migration 0026:** OAuth credentials table and provider configurations
* **Migration 0027:** Additional OAuth schema updates and indexes
* **Migration 0028:** Toolbox index for performance
* **Migration 0029:** Initial prompt storage column
***
#### ๐ Development Experience
**API Research UX** (Nov 4)
* Enhanced user experience in API research flow
* Better feedback during API discovery
* Improved error messages
* Enhanced API testing capabilities
**Schema Consistency** (Nov 10)
* Automated modifier schema generation
* Created `modifier-schema.json` (112 lines)
* Ensures schema consistency across services
* Reduces manual errors
**Test Coverage**
* **471 lines of new tests** for resource utilities
* Comprehensive OAuth flow testing
* Token management tests
* Provider configuration tests
***
#### ๐ Impact Analysis
**By Service:**
* **API Service:** 31 files, \~4,500 lines โ OAuth core, telemetry, WebSocket keepalive
* **Builder Service:** 15 files, \~2,800 lines โ Knowledge store v2, GLM integration, flow improvements
* **Worker Service:** 10 files, \~400 lines โ OAuth handling, schema sync, execution improvements
* **Executor Service:** 2 files, \~200 lines โ OAuth token access, payload size increase
* **AI Gateway:** 1 file, \~50 lines โ GLM-4.6, fallback system
* **Frontend:** 21 files, \~1,190 lines โ OAuth modifiers UI, bug fixes
**Code Statistics:**
* **Backend:** 26 commits, 12,737 lines added, 1,694 deleted, net +11,043 lines
* **Frontend:** 12 commits, 1,350 lines added, 180 deleted, net +1,170 lines
* **Total:** 38 commits, net +12,213 lines in 7 days
***
#### ๐ก Key Achievements
This 7-day period represents one of the most significant development sprints in Triform history:
1. **Enterprise-Grade OAuth** โ Complete OAuth 2.0 system with 10+ providers and KMS encryption
2. **Knowledge Store v2** โ Next-generation API research and storage system
3. **Production Stability** โ WebSocket keepalive, database optimization, comprehensive testing
4. **Enhanced Security** โ Scaleway KMS, encrypted credentials, automatic key provisioning
5. **Better Models** โ GLM-4.6, Kimi-K2, robust fallback system
6. **Platform Maturity** โ 471 lines of tests, 4 database migrations, comprehensive error handling
**Development Velocity:**
* **92% more lines added** than previous 13-day period (11,043 vs 2,756)
* **5.5x larger largest commit** (6,137 lines for OAuth vs 1,492 previous)
* **Maintained quality** with comprehensive testing and security
* **Zero breaking changes** to existing functionality
**User-Facing Impact:**
* Secure third-party API integrations for Gmail, Slack, GitHub, and more
* Automatic OAuth token management โ no manual refresh needed
* 10+ OAuth providers supported out of the box
* Better connection stability with WebSocket keepalive
* Faster performance with database indexing
* Enhanced AI capabilities with new models
***
#### ๐ฎ What This Enables
**For Users:**
* Build workflows that integrate with Google, Slack, GitHub, Microsoft, Linear, Notion, and more
* Secure, automatic token management โ no manual credential handling
* Enterprise-grade security with KMS encryption
* Seamless OAuth authorization flows
**For Developers:**
* Simple API: `get_oauth_token('provider')` in actions
* Automatic token refresh โ transparent to your code
* Multi-provider support in single workflow
* Comprehensive error handling and fallbacks
**For Enterprises:**
* Secure credential storage with Scaleway KMS
* Organization-level encryption keys
* Audit-ready token lifecycle management
* Production-grade reliability and monitoring
***
#### ๐ฏ Next Steps
Based on this trajectory, upcoming focus areas:
1. **Additional OAuth Providers** โ More integrations (Stripe, Twilio, SendGrid)
2. **Custom OAuth Apps** โ Bring your own OAuth applications
3. **Modifier Templates** โ Reusable modifier configurations
4. **Advanced Scope Management** โ Fine-tuned permission control
5. **SSO Integration** โ Enterprise single sign-on via OAuth
***
### v0.11.0 โ October 23 - November 4, 2025
**Major Development Period:** 13 days of intensive platform improvements\
**Total Commits:** 42 (27 backend, 15 frontend)\
**Focus:** API integration, chat enhancements, infrastructure monitoring, and developer experience
***
#### ๐ Major Features & Enhancements
**API Research & Testing System**
* ๐ฌ **Knowledge Store** โ Intelligent API research and caching system for better external API integrations
* Persistent knowledge storage with semantic search
* Automatic API documentation research and pattern recognition
* Integrated testing capabilities for API workflows
* 428 lines of new functionality for smarter API building
**Enhanced Chat Agent**
* ๐ฌ **Execution Steps Visibility** โ Real-time execution steps now displayed in chat for live debugging
* ๐ง **Improved Tool Calling** โ More reliable tool usage with better error handling
* ๐ **Loop Support in Actions** โ Actions can now iterate over collections with for/while loops
* ๐ฏ **Actions in Chat** โ Interactive action buttons and UI elements within chat responses
* โก **Deploy & Chat Integration** โ Seamless transition from build to test to deployment
**Action Builder Modernization**
* ๐๏ธ **Triform Syntax Integration** โ Actions now use Triform syntax during coding phase
* ๐ **API-Based Execution** โ Actions execute via API instead of direct executor calls for better separation of concerns
* โ
**Enhanced Validation** โ I/O validation against API schemas ensures type safety
* ๐ฆ **Requirements Building** โ Fixed requirements not consistently built during action build
**Flow System Improvements**
* ๐ **Better Graph Validation** โ Catches structural errors early in flow design
* ๐ **Loop Support** โ Native support for nested flow structures with iteration
* ๐ฏ **Build/Edit Operations** โ Expanded flow interface for iterative development
* ๐ **Enhanced Schema Handling** โ Improved validation logic for complex data flows
***
#### ๐จ UI/UX Improvements
**Mobile Experience**
* ๐ฑ Repositioned feedback button for better mobile usability
* ๐จ Made chat button more vibrant and visually prominent
* ๐ Fixed multiple responsiveness issues across the application
* โจ Enhanced mobile and tablet layout handling
**Chat Interface**
* ๐ก Chat actions now render within conversation runs
* ๐ฏ Better visual feedback for ongoing operations
* ๐ Improved chat store to handle interactive actions
**Safety & Stability**
* ๐ก๏ธ Added project ID validation before updates to prevent data corruption
* โ
More robust project update mechanism
***
#### ๐๏ธ Infrastructure & Deployment
**Kubernetes Monitoring**
* ๐ **Promtail Integration** โ Complete log aggregation system
* 94-line configuration with label extraction and pipeline processing
* DaemonSet deployment with volume mounts for log access
* Secure credential management via Kubernetes secrets
* Real-time anomaly detection and security monitoring
**Deployment Automation**
* ๐ **1Password Integration** โ Secure, automated environment variable management
* Download environment from 1Password on deploy
* Automated dependency checks (`1pass` and `jq`)
* Better error handling and secure secrets management
* No more manual environment configuration
**AI Gateway Expansion**
* ๐ง **Cerebras AI Support** โ Added new AI provider for expanded model options
* โก Enhanced routing capabilities for multi-provider setups
***
#### ๐ Bug Fixes
**Critical Fixes**
* Fixed double top-level action bug that caused resource duplication on revert
* Fixed component reading and execution for more reliable lifecycle management
* Fixed model names in agent builder for correct model selection
* Fixed tool calling in chat (multiple iterations for stability)
**Schema & Type Fixes**
* Fixed button variations for proper UI rendering
* Default empty values to arrays instead of null to prevent errors
* Multiple schema adjustments across API, builder, and worker
**Reliability Improvements**
* Better error messages for AI agents to understand and handle
* Added clarifying code comments for maintainability
* Improved chat route functionality
* Fixed project ID usage in chat routes
***
#### ๐ง Developer Experience
**Documentation Automation**
* ๐ **GitHub Actions Workflow** โ Automated documentation generation and publishing
* 122 lines of comprehensive workflow
* OpenCode integration for documentation from codebase
* Error handling with fallback mechanisms
* Automatic testing and validation
**Better Error Handling**
* ๐ฏ Agent-friendly error messages throughout the system
* More descriptive errors for easier debugging
* Better error context in execution traces
**Code Quality**
* ๐งน Removed 1,322 lines of deprecated code
* Better file organization with new utility modules
* Improved logging throughout the builder
* Enhanced code comments and documentation
***
#### ๐ Component-Specific Changes
**Builder Service** (42+ files modified)
* Major architectural refactoring
* New knowledge store system (428 lines)
* Enhanced API research capabilities (331 lines in api.py)
* Better prompt engineering across all builders
* Improved error handling and retry mechanisms
**API Service** (7 files modified)
* Enhanced chat routes with better tool support
* Fixed component resource handling
* Improved authentication with Featurebase integration
* Better schema definitions
**Worker Service** (2 files modified)
* Schema updates for chat actions
* Better error messaging for agents
* Improved execution handling
***
#### ๐ Security & Observability
**Enhanced Security**
* Kubernetes-based log aggregation for security monitoring
* 1Password integration for secure credential management
* Better deployment security with automated dependency checks
* Improved input validation and error boundaries
**Better Observability**
* Real-time execution step tracking
* Enhanced logging with Promtail
* Better debugging capabilities with execution context
* Improved trace visibility for developers
***
#### ๐ก Key Takeaways
This release represents a significant maturation of the Triform platform:
1. **Smarter API Integration** โ Knowledge Store enables intelligent API research and caching
2. **Better Development Experience** โ Deploy & Chat integration, loop support, and execution visibility
3. **Production-Ready Infrastructure** โ Kubernetes monitoring and secure credential management
4. **Enhanced Reliability** โ Better error handling, validation, and type safety throughout
5. **Mobile-First UX** โ Continued improvements to mobile experience and responsiveness
**Statistics:**
* 27 backend commits over 13 days
* 15 frontend commits over 8 days
* 5,251 lines added (backend)
* 2,495 lines removed (backend)
* Net +2,756 lines of high-quality code
* 8 critical bugs fixed
* 3 new infrastructure components
***
## October 2025
### v0.10.0 โ October 20-21, 2025
**New Features:**
* ๐ง **Build a Tool** โ New functionality to create custom tools directly from the interface
* ๐ **Variable Widget** โ Added variable widget for dynamic variable handling
* ๐ฌ **Message Reverting** โ Ability to revert messages in chat
* ๐ค **Fallback Avatar** โ Added fallback avatar display for users
* ๐ **Default Chat Trigger** โ Implemented default trigger for chat interactions
**UI/UX Improvements:**
* Aligned logo positioning across interface
* Fixed height styling (`h-full`) for better layout
* Improved props panel scroll and transition behavior
* Enhanced tab styling throughout the interface
* Open button now displays on hover
* Improved step interaction visualization
**Backend:**
* Fixed critical system bug
* Improved tool reliability in trichat
* Enhanced widget completion messaging
* Better widget resume functionality
**Bug Fixes:**
* Fixed agent settings functionality
* Resolved step display issues
* Fixed potential crash scenarios
* Fixed broken trigger chat functionality
* Fixed missing array initialization
* Fixed widget disclosure logic
**Refactor:**
* Renamed projects to toolboxes throughout codebase
* Improved navigation to root when reverting changes
### v0.9.5 โ October 13-17, 2025
**New Features:**
* ๐ ๏ธ **Chat with Tools** โ Comprehensive chat implementation with tool integration
* ๐ **Input/Output on Steps** โ Added I/O handling for execution steps
* ๐พ **Tool Persistence** โ Selected tools now persist in local storage
**Backend:**
* Widget models implementation
* Fixed widget completion and resume functionality
* Improved step status tracking
* Enhanced parent ID consistency for nested steps
**Performance:**
* Optimized component library loading (don't load entire library on project load)
**Bug Fixes:**
* Fixed deploy button wrapping issue
* Fixed buttons on mobile devices
* Fixed endpoint token creation (parts 1 and 2)
**Dependencies:**
* Bumped package dependencies across the stack
### v0.9.0 โ October 10-12, 2025
**New Features:**
* ๐ฌ **Chat Panel Documentation** โ Comprehensive documentation for chat interface, chat history, and project selector
* ๐ ๏ธ **Builder Overview** โ New detailed documentation for the Builder workspace
* ๐ค **Enhanced Chat Features** โ Improved chat interface with better project selection and history management
* ๐ฆ **Execution State Storage** โ Initial implementation of execution state storage
**Backend:**
* Flow builder with complete graph dependency tracking
* Graph writer with UIContext integration
* Enhanced I/O builder with better validation
**Improvements:**
* Updated workspace overview with clearer navigation guidance
* Enhanced Triton overview documentation
* Improved tutorial documentation across all guides
* Updated glossary with additional terms and clarifications
* Better quickstart instructions for new users
**Documentation:**
* Added 4 new chat-related documentation pages
* Updated 19 documentation files for clarity and consistency
* Enhanced top-bar and chat-panel documentation
**Dependencies:**
* Updated ESLint configuration
### v0.8.5 โ October 8-9, 2025
**New Features:**
* ๐ **LLM.txt Support** โ Added `llms.txt` and `llms.mdx` for AI-friendly documentation access
* โ๏ธ **Community Terms of Service** โ Published comprehensive community terms and conditions
* ๐ **Complete Documentation Export** โ New `all.txt` file containing all documentation (11,667 lines)
* ๐ค **AI Documentation Guidelines** โ Added `.docs-guidelines.md` with 202 lines of documentation standards
* ๐ **Global Triggers** โ Migrated triggers from flow/agent to project level
* ๐ **Global Trigger Implementation** โ Complete global triggers system with SQL migration
**Backend:**
* Major chat refactoring for better performance
* Fixed overlapping nodes issue
* Enhanced trigger system architecture
* Trigger migration SQL scripts
**Frontend:**
* Fixed invites page functionality
* Improved chat functionality
**Documentation Improvements:**
* ๐ง **API Call Instructions Fixed** โ Updated and corrected API integration examples across multiple pages
* Improved payload documentation with better examples
* Enhanced trigger documentation with clearer API call patterns
* Updated tutorial documentation for API integration
* Better glossary definitions for API-related terms
* 8 documentation files updated with corrected API examples
* Improved consistency across API documentation
**Scripts:**
* Added `generate_all_txt.sh` script (149 lines) for automated documentation compilation
**Bug Fixes:**
* Fixed license formatting in community terms
* Corrected navigation structure in documentation
### v0.8.0 โ October 3-6, 2025
**New Features:**
* ๐ง **Project Variables** โ Environment variables renamed to project variables for clarity
* ๐ฑ **Mobile Support** โ Rudimentary mobile support added
* ๐ **`.new` Prompt** โ Added `.new` prompt functionality
* โ๏ธ **User Invites** โ Complete invite system implementation
* ๐๏ธ **Project Deletion** โ Added ability to delete projects
**Backend:**
* Environment variables support on projects (complete implementation)
* Environment variables added to chat agent context
* Configuration steps during agent setup
* Ability to read and parse environment files
* Requirements system with gathering, completion tooling, and schema improvements
* Requirements API endpoints and event models
**UI/UX:**
* Improved chat loading states
* Enhanced chat formatting
* Fixed panel scrolling behavior
* Improved deploy button functionality
* Fixed step display issues
* New prompt page improvements
**Bug Fixes:**
* Fixed deployment socket issues
* Fixed select behavior on node creation
* Fixed triggers not showing
* Fixed project creation issue
* Fixed chat functionality issues
**Code Quality:**
* Switched from tabs to spaces for consistency
**Removed:**
* Dropped Twipla analytics
### v0.7.8 โ October 1-2, 2025
**Major Documentation Restructure:**
* ๐งน **Massive Cleanup** โ Removed over 7,300 lines of redundant or outdated documentation
* ๐ฆ **Removed Deprecated Sections** โ Eliminated AI tools docs (Claude, Cursor, Windsurf guides)
* ๐๏ธ **Streamlined Organization** โ Consolidated project administration docs into concepts/project/
* ๐ซ **Removed Obsolete Features** โ Cleaned up status pages, detailed execution docs, and extensive support pages
**Documentation Removed:**
* AI tools integration guides (cursor.mdx, claude-code.mdx, windsurf.mdx)
* Obsolete execution documentation
* Redundant support pages (faq.mdx, report-a-bug.mdx, request-a-feature.mdx)
* Old triton debugging documentation
* Excessive user account settings documentation
* Navigation pages that were no longer needed
**Documentation Improvements:**
* Simplified concepts documentation across the board
* Streamlined tutorials for better focus
* Reduced complexity in workspace canvas documentation
* Cleaner documentation structure (from 15,930+ to \~180 meaningful changes)
**Reorganization:**
* Moved project-admin files to concepts/project/ structure
* Consolidated variables documentation
* Renamed requirements.mdx to dependencies.mdx for clarity
### v0.7.6 โ September 30, 2025
**Documentation Organization:**
* ๐ **Major Restructure** โ Reorganized documentation hierarchy
* Removed library concepts (modules, triggers, variables sections)
* Consolidated project documentation structure
* Created new `concepts/project/` directory
* Moved API keys, deployments, expose, and projects-list to project subdirectory
**Content Updates:**
* Updated 60+ documentation files with improved structure
* Enhanced index page with better navigation
* Improved getting-started guides
* Cleaned up workspace documentation
* Better organization of concepts documentation
**Removals:**
* Eliminated concepts/library/ directory
* Removed development.mdx and README.md
* Cleaned up quickstart.mdx duplicate
* Removed redundant organization documentation
**Bug Fixes:**
* Fixed navigation inconsistencies
* Corrected documentation links after restructure
* Updated docs.json configuration
### v0.7.5 โ September 26, 2025
**Initial Setup:**
* ๐ **Documentation Repository Initialized** โ Created comprehensive documentation structure
* Added API reference with OpenAPI specification
* Set up Mintlify documentation framework
* Created initial logo assets (dark/light variants)
* Added essential documentation sections (essentials, ai-tools)
* Configured LICENSE (MIT)
**Initial Content:**
* Created 28 initial documentation files
* Added API endpoint documentation (create, delete, get, webhook)
* Set up snippets and reusable content
* Added hero images for light/dark modes
* Configured favicon and branding
## September 2025
### v0.7.4 โ September 29-30, 2025
**New Features:**
* โก **Execution Cancellation** โ Complete cancellation logic with proper cleanup
* ๐จ **Text Nodes** โ Added support for text nodes on canvas
* ๐ **Markdown Support** โ Full markdown rendering support
* ๐ **Global Variables** โ Implemented global variables system
* ๐ **Magic Link Login** โ Passwordless authentication via magic links
* ๐ **Running State Visualization** โ Added stack trace and execution state visualization
* ๐ฆ **Project Nodes** โ New project nodes functionality
**Backend:**
* Complete builder refactor with full integration with main chat agent
* Action builder UX improvements and bug fixes
* Component API client with agent message models
* Remote builder support for execution
* Enhanced system prompt handling
* Fixed memory offset and duplicate decorator issues
**UI/UX:**
* Highlight for mentions in agent messages
* Single open panel item at a time
* Single click to open functionality
* Hide handles in certain contexts
* Made execute button sticky
* Improved error display
* Fixed props panel growth issues
* Fixed metadata text display
* Fixed input docstring display
* Fixed nullish value handling
**Integrations:**
* Added Featurebase user identification
**Bug Fixes:**
* Fixed loop detection logic
* Let agent handle tool errors properly
* Migrated inputs schema
### v0.7.0 โ September 25-26, 2025
**New Features:**
* ๐ **Auto-Retry Logic** โ Automatic retries with exponential backoff for Actions
* ๐ฆ **Component Library** โ Share and reuse Actions/Flows across Projects (backend, FE comes later)
* ๐ **WebSocket Execution Tracing** โ Real-time execution tracing via WebSocket
**Backend:**
* Added current container to execution context
* Enhanced chat functionality
**Improvements:**
* Triton now suggests optimizations for slow Flows
* API response time improvements (20% faster)
* Fixed highlight rendering
**Bug Fixes:**
* Fixed: Parallel Flow execution sometimes deadlocking
* Fixed: Agent token usage not tracked correctly
* Fixed: Deployment rollback not reverting all changes
* Fixed: Project Variables not substituting in nested objects
* Multiple small bug fixes
### v0.6.8 โ September 22-24, 2025
**New Features:**
* ๐ **Loop Implementation** โ Initial loop support for iterative flows
* โ๏ธ **Agent Advanced Settings** โ Toggle agent advanced settings
* โถ๏ธ **Code Editor Execute** โ Added execute button directly in code editor
**Backend:**
* Loop adjustments and improvements
* Loopable nodes support (work in progress)
**UI/UX:**
* Enhanced loop functionality
* Better agent configuration interface
### v0.6.7 โ September 17-19, 2025
**New Features:**
* ๐ **Default Project README** โ Auto-generated README for new projects
* ๐พ **Ctrl+S Save** โ Intercept Ctrl+S for saving
* ๐ฏ **Project Icons** โ Added support for project icons
* ๐ **Project Socket** โ Real-time project updates via WebSocket
* ๐ง **Environment Variables on Projects** โ Project-level environment variable support
**Backend:**
* Enhanced environment variables system
* Project socket implementation for real-time updates
**UI/UX:**
* Centered port connections for better visual alignment
* Allow drag start from + button
* Hide I/O in agent view
* Let nodes grow dynamically
* Hide view button for non-admin members
* Redirect to new project after creation
* Hide generate button (temporary)
* Various visual tweaks throughout
* Added tooltips across interface
* Hide + button on action I/O
* Added canvas title display
* Conditional handle opacity
* Large create button design
**Bug Fixes:**
* Fixed input edges sometimes not showing
* Fixed label display issues
* Removed problematic auto-focus behavior
* Build action now runs in background
**Dependencies:**
* Bumped package dependencies
### v0.6.6 โ September 11-15, 2025
**New Features:**
* ๐จ **Actions Without Requirements** โ Build actions without specifying requirements first
* ๐ **Execution Tracing** โ Complete execution tracing visualization
* ๐ **Nestable Steps** โ Support for nested execution steps
* โ
**Tab Completion** โ Added tab completion support
* ๐ฏ **Follow-up Completions** โ Allow follow-up completions in chat
**Backend:**
* Use remote builder for actions
* Complete requirements system implementation
* Enhanced action template system
**UI/UX:**
* Ghost handles UX improvements
* Progress indicators
* Added IDs to port elements and prompt editors for better accessibility
* Show build deps button only in requirements tab
* Builder experience adjustments
**Development:**
* Added build context action in development mode
**Bug Fixes:**
* Reset build state on failure
* Fixed ghost handle creation
* Fixed I/O list display
* Prevent port overflow
* Fixed chat spinner
* Remove old edges on action I/O rename
* Fixed execution of top-level flows
### v0.6.5 โ September 8-10, 2025
**New Features:**
* โก **Quick Actions** โ Keyboard shortcuts for common operations
* ๐ **Sample Payload Generation** โ Generate sample payloads for testing
* ๐ฏ **Right-Click Add Node** โ Add nodes via context menu
* ๐ฌ **Insert Input into Prompt** โ Better prompt building workflow
* ๐ค **Multiple LLM Providers** โ Added back Groq & Gemini model support
**Backend:**
* Sample payload generation system
* Default agent configuration with error catching
* Enhanced agent message I/O with sensible defaults
* Fixed infinite requirements loop
**UI/UX:**
* Added info tips throughout interface
* Only open panels if minified
* Remove provider prefix from display
* Save model on change
* Show only triggers for top-level nodes
* Added data-tf-container-type attributes
* Added IDs to UI elements for better tracking
* Small visual tweaks throughout
**Integrations:**
* Added Featurebase (PROD)
* Added Twipla analytics (PROD)
* Wait for load before interactions (PROD)
**Bug Fixes:**
* Fixed variable listing
* Fixed nested executions with variables
* Context menu fixes
* Fixed resolved agent issues
* Temporary fix for payload issues
**CI/CD:**
* Fixed auto prod build CI
**Removed:**
* Dropped default board
### v0.6.0 โ September 2-5, 2025
**New Features:**
* ๐จ **Agent Prompt Redesign** โ Initial redesign of agent prompt interface
* ๐ **Auto-Align Nodes** โ Automatic node alignment on canvas
* ๐ฆ **Requirements on Projects** โ Requirements generation moved to API and added for projects
* ๐ **Confirm Modal** โ Added confirmation modal to deploy button
* ๐ **Usetiful Onboarding** โ User onboarding integration
**Backend:**
* Moved requirements generation to API
* Requirements and metadata split
* Context now supports arrays
* Component requirements event model
**UI/UX:**
* Set isConnectable to false for handles inside agents (Patrik)
* Made ghost input wider (Patrik)
* Added label for create node in agent context (Patrik)
* Improved text contrast for confirm button (Patrik)
* Don't show input node for agents (Patrik)
* Reset CreateNode after success (Patrik)
* Fixed initial width and dynamic resizing of chat panel (Patrik)
* Don't show user\_message in chat (Patrik)
* Cleaned up Navbar component (Patrik)
* Fixed height and scroll behavior for panel items (Patrik)
* Moved edit name functionality
**Bug Fixes:**
* Fixed disappearing trigger panel item (Patrik)
* Fixed unaligned label (Patrik)
* Fixed page.data error caused by Navbar (Patrik)
* Fixed adding outputs to agents
* Disabled SSR for specific components
* Temporary fix for rendering issues
* Fixed type definitions
**Optimizations:**
* Keep chat closed if empty, open on generate action (Patrik)
* Get message history from socket instead of GET endpoint (Patrik)
* Removed debug log statements
**CI/CD:**
* Auto-build prod image if commit starts with PROD:
## August 2025
### v0.5.5 โ August 26 - September 1, 2025
**New Features:**
* ๐จ **Build Action Button** โ Added to panel header for components (Patrik)
* ๐ **Generate Requirements Button** โ Quick requirements generation (Patrik)
* ๐ **Deploy Button** โ One-click deployment (Patrik)
* ๐ **JSON Schema Implementation** โ Complete JSON schema system with typeโschema rename
* ๐ **Metadata and Requirements** โ Added to project panel (Patrik)
* ๐ **Toast Notifications** โ System-wide notification system
* ๐ฌ **Agent Messages I/O** โ Enhanced agent message handling
* ๐ค **Stdout & Stderr** โ Show execution output directly
**Backend:**
* Component requirements event model
* Added component ID to requirements events
* Updated component naming conventions
* Agent improvements with better reliability
**UI/UX:**
* Centered breadcrumbs with icons (Patrik)
* Color only active breadcrumb for visual hierarchy
* Auto-open nodes on creation
* Name step added to CreateNode (Patrik)
* Harmonized CreateNode and SelectorNode (Patrik)
* Show spinning logo when AI is thinking (Patrik)
* Made editors in code panel fluid in height (Patrik)
* Send chat messages on Enter, Shift for new line (Patrik)
**Schema & Types:**
* Copy schema when creating edges
* Default to 'any' instead of 'string' for type inference
* Prevent connections between I/O nodes (Patrik)
**Bug Fixes:**
* Fixed projectIsEmpty check (Patrik)
* Fixed localStorage problem (Patrik)
* Fixed empty item in breadcrumbs (Patrik)
* Fixed missing array brackets
* Fixed ordered node layout calculation
* Fixed I/O not updating on actions
* Fixed action build button
* Fixed horizontal overflow in chat (Patrik)
* Fixed logout functionality (Patrik)
* Permanent solution for startId issue (Patrik)
* Fixed empty chat not showing new messages - startId fix (Patrik)
* Use latest startId value
**Performance:**
* Improved flaky loading of Monaco editor (Patrik)
**Code Quality:**
* Renamed default action function
* Pass component ID as context
* Adjusted spinner animation
* Handle chat errors gracefully
**CI/CD:**
* Production build action setup
**Removed:**
* Temporarily removed component library (Patrik)
### v0.5.0 โ August 22-25, 2025
**New Features:**
* ๐ฌ **Node Mentions in Chat** โ Reference nodes directly in chat (Patrik)
* ๐ **Step Parsing by Opus 4.1** โ Advanced step parsing with Claude Opus
* ๐จ **Icon Updates** โ Refreshed icons throughout interface
**Backend:**
* Chat agent implementation with flow building tools
* Chat with tools support and proper message handling
* Chat without tools implementation
* Trichat tools with project context
* Message cancellation via Redis
* Message history processing and adaptation
* Agent settings with togglable configuration
**Infrastructure:**
* ๐ **LiteLLM Integration** โ All LLM requests routed through LiteLLM with load balancing
* ๐ **Loki Logging** โ Global logging with Loki implementation
* ๐ **Redis Improvements** โ Pool connections, pub/sub, and streams support
* ๐ณ **Docker Optimization** โ Improved container management and resource allocation
* โธ๏ธ **Kubernetes Deployment** โ K8s specs with health checks and scaling
**New Models:**
* Added `llama-3.1-8b-instant`
* Added `qwen3-coder-30b-a3b-instruct`
* Added Kimi fallback via Fireworks
* Added DeepInfra support
* Added Moonshot pricing
**UI/UX:**
* Hide handles in agent view
* Added gap spacing
* Multiple small visual fixes
* Minor visual tweaks (Patrik)
* Improved inserting mention at right position and cursor position (Patrik)
**WebSocket:**
* Handle new user message acknowledgment
* Fixed throttled scroll in socket.onmessage (Patrik)
* Send to actual message correctly (Patrik)
**Bug Fixes:**
* Fixed triggers not visible when nesting
* Semi-temporary fix for undefined startId
* Fixed cursor jumping in editors
* Last trigger functionality fix
* More trigger-related fixes
**Code Quality:**
* Code refactoring and added sanitizeMessage (Patrik)
* Biome integration for code formatting
### v0.4.0 โ August 18-21, 2025
**Major Release: Infrastructure & Performance**
**New Features:**
* ๐ค **Complete Chat Agent** โ Full chat agent with project wrapper integration
* ๐งฉ **Flow Templates** โ Pre-built patterns for common workflows
* ๐ฑ **Mobile App (Beta)** โ View Projects and executions on mobile
* ๐ **SSO Support** โ SAML integration for Enterprise (beta)
**Infrastructure:**
* Drizzle migration service
* PostgreSQL setup scripts
* Docker improvements with .dockerignore files
* Kubernetes adjustments for better resource allocation
* API logging & metrics comprehensive system
* WebSocket tracing endpoint
**Performance:**
* Executor optimizations (network bootstrap, slirp improvements)
* Action building speed improvements
* Switched to `gpt-4.1-mini` for completioner
* Concurrent builds and tests support
* Increased buffer sizes
* Redis pool for better performance
**Backend:**
* 25+ database migrations
* Invites system
* Deletable projects
* Default project creation with README
* Project ordering by creation date
* Intention field on projects
* Encrypted sessions with bearer token support
* Polar integration for billing
**Improvements:**
* Agent system prompts can now reference Project Variables
* Execution replay with modified payloads
* Better webhook debugging tools
* Organization member management UI refresh
* Execution tracing with detailed logs
* Stdout logging in production
**Bug Fixes:**
* Fixed: Race condition in parallel Flow execution
* Fixed: API key scoping not working for sub-Projects
* Fixed: Canvas performance with many edges
* Fixed: Execution metrics occasionally showing wrong values
* Fixed: Flow wiring and action I/O parsing
* Fixed: Project update conflicts
* Fixed: Missing node inputs handling
* Fixed: Cancellation logic across system
* Fixed: SSE buffering issues
* Fixed: Structured output handling
## July 2025
### v0.1.0 โ July 28, 2025
**New Features:**
* ๐ท๏ธ **Project Tags** โ Organize and filter Projects with custom tags
* ๐ **Success Rate Alerts** โ Get notified when success rate drops
* ๐ **Execution Replay** โ Re-run failed executions easily
**Improvements:**
* Faster Project loading (especially large Projects)
* Better error messages for validation failures
* Improved documentation search
* Canvas grid snapping enhancements
**Bug Fixes:**
* Fixed: Deployments sometimes showing wrong status
* Fixed: Global Variable encryption edge cases
* Fixed: Agent tool descriptions not updating
* Fixed: Execution log timestamps in wrong timezone
## June 2025
### v0.2.0 โ June 15, 2025
**New Features:**
* ๐ฏ **Conditional Routing** โ Router nodes for Flow branching logic
* ๐ **Execution Dashboard** โ New overview of all executions across Projects
* ๐ **Webhook Testing** โ Test webhooks directly from UI
* ๐ฌ **Comments** โ Add notes and comments to Canvas nodes
**Improvements:**
* Properties Panel is now resizable
* Execution logs support filtering and search
* Better handling of large payloads (up to 10MB)
* Improved Agent response streaming
**Bug Fixes:**
* Fixed: Schedule triggers in different timezones
* Fixed: Edge cases in dependency resolution
* Fixed: Canvas context menu positioning
* Fixed: API key usage tracking
## May 2025
### v0.3.0 โ May 10, 2025
**New Features:**
* ๐จ **Custom Branding** โ White-label option for Enterprise
**Improvements:**
* Canvas performance improvements (50% faster rendering)
* Improved error handling in Actions
**Bug Fixes:**
* Fixed: Deployment history not showing all versions
* Fixed: Agent tool calling timeout issues
* Fixed: Canvas undo/redo state issues
* Fixed: API rate limit headers incorrect
## Deprecation policy
When we deprecate features:
1. **Announce** โ At least 90 days notice
2. **Document** โ Migration guide provided
3. **Support** โ Old feature continues working during deprecation period
4. **Remove** โ Only after notice period and next major version
## Beta features
Features marked **(Beta)** are:
* Functional but may have bugs
* Subject to changes
* Available to test and provide feedback
* Not recommended for production-critical workloads
## Staying updated
**Email digest:** Opt-in for monthly update emails\
**Discord:** Announcements in community server\
**RSS feed:** [https://triform.ai/changelog/feed.xml](https://triform.ai/changelog/feed.xml)
## Reporting issues
Found a bug? We want to know!
**Report via:**
* Bug icon in app (right)
* Discord: #bugs channel
**Please include:**
* What happened
* What you expected
* Steps to reproduce
* Screenshots (if applicable)
* Browser/environment info
## Feature requests
Have an idea? We'd love to hear it!
**Submit via:**
* Feature request icon in app
* Email: [product@triform.ai](mailto:product@triform.ai)
* Discord: #feature-requests channel
**What makes a good feature request:**
* Clear description of the problem
* Why it matters to you
* How you'd use it
* Any examples or mockups
Popular requests often get built first!
## ๐ Development Statistics
### August 22 - October 22, 2025 (2 Months)
**Backend (Nexus)**
* Commits: 256
* Files Changed: 1,292
* Lines Added: 84,523
* Lines Deleted: 34,611
* Net Addition: \~50,000 lines
**Frontend**
* Commits: 265
* Major Features: 12+
* UI/UX Improvements: 100+
* Bug Fixes: 75+
**Documentation**
* Pages Created: 30+
* Pages Updated: 100+
* Complete restructure and cleanup
### Contributors
* **zulvskog** - Backend architecture and infrastructure
* **Hannes Fant** - Full-stack development, primary developer
* **Patrik Engborg** - UI/UX enhancements and frontend features
### Key Integrations Added
* LiteLLM (AI Gateway)
* Loki (Logging)
* Redis (Caching & Pub/Sub)
* Featurebase (User Feedback)
* Usetiful (Onboarding)
* Polar (Billing)
### Infrastructure Improvements
* Kubernetes deployment with auto-scaling
* Docker optimization for all services
* PostgreSQL migration system with Drizzle
* WebSocket implementation for real-time features
* Health check systems across all services
## Next up
Check our [Roadmap](/roadmap) to see what's coming next.
# Actions
Source: https://docs.triform.ai/concepts/actions
Atomic Python units: structure, contracts, workflow
## Structure
* Action.py โ Implementation.
* README โ Purpose, I/O, examples.
* requirements.txt โ PureโPython dependencies (no binary installs).
## Contract
* Inputs โ Typed, minimal, documented.
* Outputs โ Deterministic structure; document edge cases.
## Workflow
1. Define input/output and write `Action.py`.
2. Pin dependencies in `requirements.txt`.
3. Test with small Payloads via Execute.
4. Reuse across Flows and as Agent tools.
## Loop Support
Actions now support iterative execution with loops:
* **For loops** โ Iterate over collections and lists
* **While loops** โ Continue until a condition is met
* **Loop state management** โ Proper handling of iteration context and variables
This allows Actions to handle batch processing, repeated operations, and conditional iterations natively.
## OAuth Integration
Actions can access OAuth credentials for third-party API integrations:
```python theme={null}
from triform import get_oauth_token
def my_action(data: dict) -> dict:
# Access OAuth token configured via modifiers
token = get_oauth_token('google')
# Use in API requests
headers = {'Authorization': f'Bearer {token.access_token}'}
response = requests.get('https://api.example.com/data', headers=headers)
return response.json()
```
**Supported features:**
* Automatic token refresh before expiration
* Secure credential injection at runtime
* Multi-provider support (Google, GitHub, Slack, Microsoft, etc.)
* Token management handled by the platform
See [Modifiers](/concepts/modifiers) for configuring OAuth credentials.
## File Storage
Actions can save and retrieve files using the Storage system:
```python theme={null}
from triform import save_file, get_file
def process_document(data: dict) -> dict:
# Save a generated file
report_path = save_file(
filename="report.pdf",
content=generate_pdf(data),
content_type="application/pdf"
)
# Retrieve a file
template = get_file(data["template_path"])
return {"report": report_path}
```
**Available functions:**
* `save_file(filename, content, content_type)` โ Store a file
* `get_file(path)` โ Retrieve a file's content
See [Storage](/concepts/storage) for complete documentation.
> warning: Dependencies โ Only packages that do not require binary installs in the build image are supported.
# Agents
Source: https://docs.triform.ai/concepts/agents
LLM logic with prompts and tools; good patterns and observability
## Anatomy
* Prompts
* System Prompt โ Nonโnegotiable instructions.
* Messages List (toggle) โ Pass conversation history as input/output.
* User Prompt โ Optional preโset prompt for fixedโpurpose Agents.
* Model configuration โ Provider/model, temperature, topโp, max tokens.
* Toolbox โ The set of callable tools made available to the Agent.
## Available Models
Triform supports a wide range of AI models:
**Anthropic:**
* Claude Haiku 4.5 โ Ultra-fast responses, cost-effective for chat
* Claude Sonnet โ Balanced performance and capability
* Claude Opus โ Maximum reasoning power
**Google:**
* Gemini 3 Pro Preview โ Latest flagship with enhanced reasoning
* Gemini Flash โ Fast responses for real-time applications
**OpenAI:**
* GPT-5.1 โ Advanced reasoning and coding
* GPT-4.1 โ Reliable general-purpose model
**Open Source:**
* Kimi โ Default chat model with excellent context handling
* Various models via Fireworks and other providers
Models are continuously updated. Check the builder for the latest available options.
## Good patterns
* Keep System Prompts specific and outcomeโoriented.
* Start with few highโleverage tools; expand gradually.
* Use Messages List when memory/context matters.
* Leverage enhanced tool calling for more reliable agent operations.
## Enhanced capabilities
Recent improvements to the Agent system:
* **Improved tool calling** โ More reliable tool usage with better error handling
* **Execution visibility** โ Real-time execution steps sent to UI for debugging
* **Better prompts** โ Refined prompt system for clearer agent guidance
* **Loop support in tools** โ Agent tools can now use iterative operations
## Observability
* Executions emit logs, traces, metrics for inspection.
* Use Payloads to reproduce and compare runs after prompt changes.
* Monitor execution steps in real-time through the chat interface.
> tip: Tool hygiene โ Name tools by verb + object (`fetch_user`, `summarize_text`). Small, predictable tools make plans more reliable.
# Executions
Source: https://docs.triform.ai/concepts/executions
Monitor, debug, and analyze your workflow runs
## How executions start
* **Manual** โ Run from Properties โ Execute
* **API/Webhook** โ Triggered via HTTP request to your endpoint
* **Cron** โ Scheduled execution at specified intervals
* **Internal** โ Invoked by another Node within a Flow
## Characteristics
* **Isolated** โ No shared state between runs
* **Reproducible** โ Inputs, modifiers, and context are logged
* **Traceable** โ Inspect logs, traces, and metrics historically
* **Evaluated** โ Optionally score outputs with Evaluations
* **Real-time visibility** โ Execution steps are sent to the UI for live monitoring
## Executions Dashboard
The Executions Dashboard provides comprehensive monitoring across all your projects:
### Accessing the Dashboard
1. Click **Executions** in the top navigation
2. View all executions across your projects in a tabbed layout
3. Filter by project, status, trigger type, or time range
### Dashboard Features
* **Tabbed Layout** โ Organized views for different execution states
* **Complete History** โ Full execution history with search and filtering
* **Real-time Status** โ Live updates for running executions
* **Execution Details** โ Click any execution to see full trace
* **Empty State Handling** โ Clear guidance when no executions exist
### Execution List Columns
| Column | Description |
| -------- | -------------------------------------- |
| Status | Success, Failed, Running, Cancelled |
| Project | Which project was executed |
| Trigger | How it was started (Manual, API, Cron) |
| Duration | How long the execution took |
| Started | When the execution began |
| Actions | View details, retry, or cancel |
## Flow of an execution
1. **Trigger** โ Manual, cron, or API request
2. **Input** โ JSON payload (from trigger or saved Payload)
3. **Modifiers** โ OAuth credentials and storage access injected
4. **Process** โ Node(s) execute and pass data along Edges
5. **Output** โ Result returned or stored
### Modifier Injection
When modifiers are configured:
* **OAuth tokens** are securely injected into the execution context
* **Storage access** is available via `save_file()` and `get_file()`
* Tokens are **automatically refreshed** if near expiration
* Credentials are **encrypted in transit** during execution
## Observability & Monitoring
### Real-time Step Tracking
See each step as it happens:
* Step-by-step progress in the UI
* Input/output data for each node
* Timing information per step
* Error details with stack traces
### Prometheus Integration
Execution statistics are pushed to Prometheus for enterprise monitoring:
* Execution counts by status
* Duration histograms
* Error rates by project
* Trigger type distribution
### Logging
All executions generate detailed logs:
* Structured log output (stdout/stderr)
* Debug, info, warning, and error levels
* Correlation IDs for request tracing
* Cron trigger logging for scheduled runs
## Execution States
| State | Description |
| ------------- | ------------------------ |
| **Queued** | Waiting to start |
| **Running** | Currently executing |
| **Success** | Completed without errors |
| **Failed** | Encountered an error |
| **Cancelled** | Manually stopped |
| **Timeout** | Exceeded time limit |
## Error Handling
When executions fail:
* **Agent-friendly errors** โ Clear messages that help identify issues
* **Automatic retries** โ Configurable retry logic with backoff
* **Error context** โ Full stack trace and input data preserved
* **Modifier resolution** โ Graceful handling of unresolved credentials
## Practical tips
> **Save Payloads** โ Create saved payloads for common test scenarios
> **Keep inputs typed** โ Use schemas for easier debugging and regression testing
> **Use correlation IDs** โ Stitch traces across components for complex flows
> **Monitor the dashboard** โ Check execution trends for early issue detection
> **Set appropriate timeouts** โ Balance between allowing long operations and catching hangs
## Filtering & Search
Find specific executions by:
* **Project name** โ Filter to a single project
* **Status** โ Show only failed, successful, etc.
* **Date range** โ Last hour, day, week, or custom
* **Trigger type** โ Manual, API, or cron
* **Search** โ Text search in execution metadata
## Retrying Executions
To retry a failed execution:
1. Find the execution in the dashboard
2. Click the execution to view details
3. Click **Retry** to run with the same payload
4. Or **Retry with modifications** to change the input
## Next Steps
* Learn about [Triggers](/concepts/triggers) for automating executions
* See [Modifiers](/concepts/modifiers) for credential injection
* Check [Storage](/concepts/storage) for file handling in executions
# Flows
Source: https://docs.triform.ai/concepts/flows
Connect nodes into executable graphs; patterns and practices
## Building blocks
* Input Node โ Named entry ports.
* Processing Nodes โ Actions/Agents/Flows.
* Output Node โ Named exit ports.
* Edges โ Data/control movement between Nodes.
## Patterns
* Linear โ Input โ Action โ Output.
* Branching โ Route by condition into multiple paths.
* Parallel โ Fanโout work; aggregate results downstream.
* Iterative โ Loop over collections or conditional repetition using nested loop structures.
## Enhanced Flow System
Recent improvements to the Flow system include:
* **Better validation** โ Enhanced graph validation catches structural errors early
* **Loop support** โ Native support for nested flow structures with iteration
* **Improved schema handling** โ Better validation logic for complex data flows
* **Build/edit operations** โ Expanded flow interface allows iterative development
## Practices
* Keep Flows legible top down.
* Favor shallow graphs; compose via subโFlows for depth.
* Remove unused ports and edges to reduce confusion.
* Use loops for batch processing and iterative operations.
* Validate flow structure early to catch connection issues.
> tip: Design for testing โ Save example Payloads at the Flow level to lock in expected shapes and make regression checks easy.
# Glossary
Source: https://docs.triform.ai/concepts/glossary
Key terms and concepts in Triform
## Core Concepts
### Action
A Python function that performs a specific task. Actions are deterministic, reusable building blocks for Flows. Examples: API calls, data transformations, validations.
### Agent
An LLM-powered component that can make decisions, generate content, and use tools. Agents have system prompts, model configurations, and access to Actions/Flows as tools.
### API Key
A secret token used to authenticate requests to Triform's API. Required for executing deployed Projects and accessing Triform services programmatically.
### Canvas
The visual workspace within the **Builder workspace** where you build and view Projects, Flows, and their components. The Canvas displays nodes and edges showing system structure.
### Deployment
The process of publishing a Project to a live environment (staging or production) where it's accessible via API or triggers.
### Edge
A connection between two nodes in a Flow, showing data or control flow direction. Edges define how information moves through your system.
### Execution
A single run of a Project, Flow, Agent, or Action. Each execution has inputs, outputs, logs, and metrics. Executions are tracked for observability and debugging.
### Executions Dashboard
A centralized view for monitoring all executions across projects. Features tabbed layout, filtering, search, and real-time status updates. Access via the top navigation bar.
### Flow
An orchestration graph that connects Actions, Agents, and sub-Flows. Flows define multi-step logic with inputs, outputs, and data flow between components.
### Modifier
A configuration that injects credentials or capabilities into executions. OAuth modifiers provide third-party API access, storage modifiers enable file operations. See [Modifiers](/concepts/modifiers).
### Node
A visual element on the Canvas representing a component (Action, Agent, Flow, Project) or control structure (Router, Merge, Loop).
### OAuth Widget
An interactive element that appears in chat for authorizing third-party services. Enables inline OAuth flows without leaving the conversation. See [Chat Interface](/workspace/chat/chat-interface).
### Organization
The top-level entity that owns Projects, members, and billing. Organizations provide team collaboration and access control.
### Payload
The JSON input data provided when executing a component. Payloads must match the defined input schema.
### Project
A complete, deployable AI system containing Actions, Agents, and Flows. Projects are the primary unit of work in Triform.
### Storage
Triform's file management system for saving and retrieving files in workflows. Uses S3-compatible backends with project-scoped access. See [Storage](/concepts/storage).
### Trigger
An automated mechanism that executes a Project in response to events (webhooks, cron schedules, manual API calls).
## Platform Components
### Builder Workspace
The workspace for designing, building, and debugging AI systems. Contains the Canvas, Chat Panel (Triton), and Properties Panel. Used for development and composition of components.
### Chat Workspace
The workspace for conversing with and using your AI agents. Contains chat history, chat interface, and project selector. Similar to using ChatGPT or other chat interfaces.
### Agent Toolbox
A panel showing available components (Actions, Agents, Flows) that can be dragged onto the Canvas or reused across Projects.
### Chat Panel
The interface within the **Builder workspace** for interacting with Triton, Triform's AI assistant. The Chat Panel enables conversational building, editing, and debugging. Different from the Chat workspace, which is for using agents.
### Input Node
The entry point of a Flow, defining what data the Flow expects. Input nodes have schemas specifying required and optional fields.
### Output Node
The exit point of a Flow, defining what data the Flow returns. Output nodes shape the API response for deployed Projects.
### Properties Panel
A panel showing detailed configuration for selected components. Properties include content (code, prompts), input/output schemas, executions, and settings.
### Top Bar
The navigation bar showing breadcrumbs, home, profile, and deploy controls. The Top Bar provides Project navigation and actions.
### Triton
Triform's built-in AI assistant in the **Builder workspace** that helps you build, modify, and debug Projects through natural conversation.
## Technical Terms
### Breadcrumb
Navigation elements showing your current location in the hierarchy (e.g., Home > Project > Flow > Agent). Click any level to jump back.
### Chat Actions
Quick reply buttons that appear at the end of agent messages. Provide one-click access to common follow-up actions like running flows or deploying projects.
### Cron Expression
A time-based schedule format for triggering periodic executions. Example: `0 6 * * *` means daily at 6 AM.
### Cron Trigger
A native scheduling mechanism for automated workflow execution. Supports full cron syntax, timezone awareness, and payload mapping. See [Triggers](/concepts/triggers).
### Dependency
An external Python package required by an Action. Dependencies are listed in `requirements.txt`.
### Port
An input or output connection point on a node. Data flows from output ports to input ports via edges.
### Rate Limit
A restriction on how many requests can be made in a time period. Protects against abuse and ensures fair usage.
### Requirements.txt
A file listing Python package dependencies for an Action. Format follows pip conventions.
### Retry Logic
Automatic re-execution of failed operations, typically with exponential backoff. Handles transient failures gracefully.
### Rollback
Reverting a deployment to a previous version. Used when new deployments have issues.
### Schema
A definition of data structure specifying field names, types, and validation rules. Used for inputs, outputs, and payloads.
### System Prompt
Instructions given to an Agent defining its behavior, personality, and capabilities. System prompts guide Agent responses.
### Timeout
Maximum time allowed for an execution before it's canceled. Prevents infinite loops and hung processes.
### Token
In LLM context, a unit of text (roughly a word or sub-word). Token usage is tracked for cost and limits.
### Trace
A detailed record of execution showing which nodes ran, in what order, with what data and timing. Essential for debugging.
### Webhook
An HTTP endpoint that receives event notifications from external services. Triggers Project execution based on external events.
## Workflow Terms
### Branching
When a Flow splits into multiple paths based on conditions. Example: route by user tier (free vs. premium).
### Cold Start
The initial delay when executing a component that hasn't run recently. Caused by environment setup and dependency loading.
### Concurrency
Number of simultaneous executions. Can be limited to control resource usage or ensure serial processing.
### Fanout/Fanin
Fanout: One node sends data to multiple nodes (parallel processing). Fanin: Multiple nodes send data to one node (merging results).
### Merge Node
A control node that combines multiple inputs into one output. Used after parallel operations.
### Parallel Processing
Executing multiple operations simultaneously instead of sequentially. Improves performance for independent tasks.
### Router Node
A control node that directs data down different paths based on conditions. Enables branching logic in Flows.
### Serial Processing
Executing operations one at a time in sequence. Each step waits for the previous one to complete.
### Sub-Flow
A Flow used as a component within another Flow. Enables modularity and reusability.
## Environment Terms
### Development (Dev)
The environment where you actively build and test. Changes are immediate, no deployment needed.
### Production (Prod)
The live environment serving real users. Requires deployment and should be stable.
### Staging
A pre-production environment for testing. Mirrors production configuration but isolated from real traffic.
## Access Control
### Admin
A role with full permissions: create, edit, delete, deploy, manage members, billing.
### Editor
A role with permission to create and edit Projects but not manage members or billing.
### Member
A user belonging to an Organization with assigned roles and permissions.
### Viewer
A role with read-only access. Can view Projects and executions but not modify.
## Monitoring & Debugging
### Alert
A notification triggered by specific conditions (e.g., execution failure, high error rate). Sent via email, Slack, or webhook.
### Error Rate
Percentage of executions that failed. Used to monitor system health.
### Execution Log
Detailed text output from an execution including debug, info, warning, and error messages.
### Metric
Quantitative measurement of system behavior (execution time, success rate, token usage, cost).
### Success Rate
Percentage of executions that completed successfully. Key health indicator.
## Integration Terms
### API Endpoint
A URL where your deployed Project is accessible. Format: `https://app.triform.ai/api/in/{project-id}/{flow-id}`.
### Bearer Token
Authentication method where API key is sent in Authorization header without the "Bearer" prefix: `Authorization: {api-key}`.
### CI/CD
Continuous Integration/Continuous Deployment. Automated testing and deployment pipelines.
### SDK
Software Development Kit. Client libraries for accessing Triform API from code (Python, JavaScript, etc.).
### Webhook Payload
The JSON data sent to your webhook endpoint by external services. Must be transformed to match your Project's input schema.
## Billing & Quotas
### Execution-based Quota
Limits on number of executions per time period. Varies by plan tier.
### Resource-based Quota
Limits on storage, dependencies size, and similar resources. Varies by plan tier.
### Token Usage
For LLMs, the number of tokens consumed. Tracked for billing and optimization.
## Best Practices Terms
### DRY (Don't Repeat Yourself)
Extract repeated logic into reusable Actions or Flows instead of duplicating.
### Idiomatic Code
Code following language conventions and best practices. Python Actions should follow PEP 8.
### Type Hints
Python annotations specifying variable and function types. Improves code clarity and enables validation.
### Validation
Checking input data meets expected format and constraints before processing. Fail early, fail clearly.
## Need more help?
If a term isn't listed here:
* Ask Triton in the Chat Panel
* Check relevant concept pages in the documentation
* Join our [Discord community](https://discord.gg/triform)
# Modifiers
Source: https://docs.triform.ai/concepts/modifiers
Configure OAuth credentials, storage, and execution context for your projects
## What are Modifiers?
Modifiers are configuration settings that enhance your project's capabilities. They inject credentials, storage access, and other context into your Actions at runtime, without requiring you to manage sensitive data in your code.
## Types of Modifiers
### OAuth Modifiers
Connect third-party services to your projects with secure OAuth 2.0 authentication.
**Supported Providers:**
* **Google** โ Gmail, Drive, Sheets, Calendar
* **Microsoft** โ Office 365, Outlook, OneDrive, Teams
* **GitHub** โ Repository access, CI/CD integration
* **GitLab** โ Code hosting, pipelines
* **Slack** โ Team communication, workflows
* **Linear** โ Issue tracking, project management
* **Notion** โ Documentation, databases
* **Dropbox** โ File storage
* **Trello** โ Board management
* **Asana** โ Task management
* And more providers added regularly
**How it works:**
1. Add an OAuth modifier to your project
2. Select provider and required scopes
3. Complete the OAuth authorization flow
4. Tokens are automatically managed by Triform
### Storage Modifiers
Enable file storage capabilities for your project.
**Configuration options:**
* S3-compatible storage backends
* Custom bucket and region settings
* Credential management
See [Storage](/concepts/storage) for detailed usage.
## Setting Up Modifiers
### Via UI
1. Open your **Project** in the Builder
2. Go to **Properties Panel โ Execute**
3. Click **Add Modifier**
4. Select modifier type (OAuth or Storage)
5. Configure settings and authorize
### OAuth Authorization Flow
When adding an OAuth modifier:
1. Click **Connect** next to the provider
2. A popup opens for the provider's login
3. Grant permissions for the requested scopes
4. The popup closes automatically on success
5. Status shows "Connected" with token health
**OAuth Widgets in Chat:**
When using Triton to build projects, OAuth authorization can happen directly in the chat:
* Interactive OAuth buttons appear in chat messages
* Click to authorize without leaving the conversation
* Real-time status updates show connection progress
* Multiple widgets can be active in the same session
## Using Modifiers in Actions
### Accessing OAuth Tokens
```python theme={null}
from triform import get_oauth_token
def my_action(data: dict) -> dict:
# Get token for a configured provider
token = get_oauth_token('google')
# Use in API requests
headers = {'Authorization': f'Bearer {token.access_token}'}
response = requests.get(
'https://www.googleapis.com/gmail/v1/users/me/messages',
headers=headers
)
return {"messages": response.json()}
```
### Token Properties
The token object includes:
* `access_token` โ The bearer token for API requests
* `expires_at` โ Token expiration timestamp
* `scopes` โ List of granted permissions
### Multi-Provider Example
```python theme={null}
from triform import get_oauth_token
def sync_data(data: dict) -> dict:
# Access multiple providers in one action
google_token = get_oauth_token('google')
slack_token = get_oauth_token('slack')
# Fetch from Google
google_data = fetch_from_google(google_token)
# Post to Slack
send_to_slack(slack_token, google_data)
return {"synced": True}
```
### Accessing Storage
```python theme={null}
from triform import save_file, get_file
def my_action(data: dict) -> dict:
# Storage is automatically available when modifier is configured
file_path = save_file("output.json", json.dumps(data))
return {"saved_to": file_path}
```
## Scope Configuration
OAuth scopes define what permissions your project has with each provider.
### Common Scopes by Provider
**Google:**
* `gmail.readonly` โ Read emails
* `gmail.send` โ Send emails
* `drive.readonly` โ Read files
* `drive` โ Full Drive access
* `calendar.readonly` โ Read calendar
* `calendar` โ Manage calendar
**Microsoft:**
* `Mail.Read` โ Read emails
* `Mail.Send` โ Send emails
* `Files.Read` โ Read OneDrive files
* `Files.ReadWrite` โ Full OneDrive access
* `Calendars.ReadWrite` โ Manage calendar
**GitHub:**
* `repo` โ Full repository access
* `read:user` โ Read user profile
* `workflow` โ Manage Actions workflows
**Slack:**
* `chat:write` โ Post messages
* `channels:read` โ List channels
* `files:read` โ Access files
### Best Practices for Scopes
> **Request minimal scopes** โ Only ask for permissions you actually need
> **Explain to users** โ When building public projects, document why each scope is needed
> **Review periodically** โ Remove scopes you no longer use
## Token Management
Triform handles token lifecycle automatically:
* **Automatic Refresh** โ Tokens are refreshed before expiration
* **Secure Storage** โ Credentials encrypted with Scaleway KMS
* **Organization Isolation** โ Each org has dedicated encryption keys
* **High-Performance Cache** โ Memcache layer for fast token retrieval
### Token Health
In the Properties Panel, you can see:
* **Connected** โ Token is valid and working
* **Expiring Soon** โ Token will be refreshed automatically
* **Expired** โ Re-authorization required
* **Revoked** โ User revoked access, re-authorize needed
## Real-Time Updates
Modifier changes trigger real-time events:
* **WebSocket notifications** when tokens are updated
* **Live status updates** in the UI
* **Automatic propagation** to running executions
## Security
* **End-to-End Encryption** โ All credentials encrypted at rest and in transit
* **KMS Integration** โ Scaleway Key Management Service for enterprise-grade security
* **Organization Keys** โ Dedicated encryption keys per organization
* **No Code Exposure** โ Tokens never appear in Action code, only at runtime
* **Audit Trail** โ All OAuth events logged for compliance
## Troubleshooting
**Problem:** OAuth connection fails\
**Solution:** Check popup blockers, try a different browser, verify provider status
**Problem:** Token expired immediately\
**Solution:** Check your system clock, re-authorize the connection
**Problem:** Missing scopes error\
**Solution:** Edit the modifier and add required scopes, then re-authorize
**Problem:** `get_oauth_token()` returns None\
**Solution:** Verify the modifier is configured and the provider name matches exactly
## Next Steps
* See [OAuth in Actions](/concepts/actions#oauth-integration) for code examples
* Learn about [Storage](/concepts/storage) for file handling
* Check [Executions](/concepts/executions) for how modifiers are injected
# Payloads
Source: https://docs.triform.ai/concepts/payloads
Structure input data for Projects, Flows, and Agents
## What is a Payload?
A Payload is the input data you provide when executing a Project, Flow, Agent, or Action. It's a JSON object that contains all the information needed for that execution.
Think of it as:
* The **arguments** to a function
* The **request body** of an API call
* The **input** to your system
## Why Payloads
* Speed โ Oneโclick reruns for common cases.
* Reproducibility โ Lock in knownโgood inputs as your baseline.
* Documentation โ Show how a component is intended to be used.
## Good Payloads include
* Minimal required fields with realistic values.
* Edgeโcase variants (empty, large, malformed types).
* Comments or README references for context.
## Workflow
1. Create a Payload for a Node (Action/Flow).
2. Refine the Node until the output is acceptable.
3. Keep the Payload as a regression check when you iterate.
> tip: Name by intent โ Prefer names like `minimal`, `typical_customer`, `edge_empty_messages` over `test1`, `test2`.
## Payload structure
### Basic payload
```json
{
"field1": "value",
"field2": 123,
"field3": true
}
```
### Nested payload
```json
{
"user": {
"id": "user_123",
"email": "alice@example.com",
"tier": "premium"
},
"action": "process_order",
"items": [
{"id": "item_1", "quantity": 2},
{"id": "item_2", "quantity": 1}
]
}
```
### Payload with metadata
```json
{
"data": {
"user_input": "Summarize this article..."
},
"config": {
"format": "bullets",
"max_length": 200
},
"metadata": {
"request_id": "req_xyz",
"source": "web_app"
}
}
```
## Payload schema
The schema defines what fields are expected, their types, and validation rules.
### Defining a schema
In your Project/Flow Input node:
```json
{
"user_id": {
"type": "string",
"required": true,
"description": "Unique user identifier"
},
"action": {
"type": "enum",
"options": ["create", "update", "delete"],
"required": true,
"description": "Operation to perform"
},
"data": {
"type": "object",
"required": false,
"description": "Operation-specific data"
},
"options": {
"type": "object",
"required": false,
"default": {},
"description": "Optional configuration"
}
}
```
### Data types
| Type | Example | Description |
| --------- | --------------------------------------- | ---------------- |
| `string` | `"hello"` | Text |
| `number` | `42`, `3.14` | Integer or float |
| `boolean` | `true`, `false` | True/false |
| `array` | `[1, 2, 3]` | List of items |
| `object` | `{"key": "value"}` | Nested structure |
| `enum` | `"red"` from `["red", "green", "blue"]` | Fixed options |
| `null` | `null` | Absence of value |
### Required vs. optional
**Required fields:**
* Must be present in every payload
* Execution fails if missing
* No default value
**Optional fields:**
* Can be omitted
* Can have default values
* Execution continues without them
**Example:**
```json
{
"required_field": "must be here",
"optional_field": "can be omitted"
}
```
## Creating payloads
### In the UI
1. Select your Project/Flow/Agent
2. Go to **Properties โ Execute**
3. Enter payload in the JSON editor
4. Click **Execute**
**Tips:**
* Use the schema viewer to see expected fields
* Auto-complete helps with field names
* Syntax highlighting catches errors
### Via API
```bash
curl -X POST https://api.triform.ai/v1/your-project/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"user_id": "123",
"action": "process",
"data": {"value": 42}
}'
```
### Programmatically
**Python:**
```python
import requests
payload = {
"user_id": "123",
"action": "process",
"data": {"value": 42}
}
response = requests.post(
"https://api.triform.ai/v1/your-project/execute",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json=payload
)
result = response.json()
```
**JavaScript:**
```javascript
const payload = {
user_id: "123",
action: "process",
data: { value: 42 }
};
const response = await fetch(
"https://api.triform.ai/v1/your-project/execute",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
}
);
const result = await response.json();
```
## Payload validation
Triform validates payloads against the schema before execution.
### Common validation errors
**Missing required field:**
```json
{
"error": "ValidationError",
"message": "Missing required field: user_id",
"field": "user_id"
}
```
**Wrong type:**
```json
{
"error": "ValidationError",
"message": "Expected number but got string",
"field": "age",
"expected": "number",
"actual": "string"
}
```
**Invalid enum value:**
```json
{
"error": "ValidationError",
"message": "Invalid value for action. Must be one of: create, update, delete",
"field": "action",
"value": "invalid_action",
"allowed": ["create", "update", "delete"]
}
```
**Out of range:**
```json
{
"error": "ValidationError",
"message": "Value must be between 0 and 100",
"field": "percentage",
"value": 150,
"min": 0,
"max": 100
}
```
## Saved payloads
Save frequently-used payloads for quick testing.
### Saving a payload
1. Enter payload in Execute panel
2. Click **Save Payload**
3. Name it: `Test Case 1: Happy Path`
4. Click **Save**
### Loading a saved payload
1. Go to Execute panel
2. Click **Load Payload**
3. Select from list
4. Click **Load**
5. Optionally modify
6. Execute
### Payload library
Organize saved payloads:
**By category:**
* Happy path examples
* Edge cases
* Error scenarios
* Performance tests
* Regression tests
**By purpose:**
* `demo_payload` โ For demonstrations
* `test_minimal` โ Minimum required fields
* `test_full` โ All fields populated
* `test_edge_empty_list` โ Edge case testing
## Payload best practices
> **Provide examples** โ Include sample payloads in documentation
> **Use meaningful values** โ `"user_123"` is better than `"test"`
> **Test edge cases** โ Empty arrays, null values, max sizes
> **Save regression tests** โ Keep payloads that found bugs
> **Document schema** โ Clear descriptions for each field
> **Version payloads** โ If schema changes, update saved payloads
## Payload patterns
### Pattern 1: Simple request
```json
{
"input": "string to process"
}
```
**Use case:** Single-purpose operations (text summarization, translation)
### Pattern 2: User + action + data
```json
{
"user_id": "123",
"action": "create",
"data": {
"name": "New Item",
"description": "Item details"
}
}
```
**Use case:** CRUD operations, user-specific actions
### Pattern 3: Batch processing
```json
{
"items": [
{"id": "1", "value": "A"},
{"id": "2", "value": "B"},
{"id": "3", "value": "C"}
],
"options": {
"parallel": true,
"fail_fast": false
}
}
```
**Use case:** Processing multiple items, bulk operations
### Pattern 4: Configuration-heavy
```json
{
"data": "content to process",
"config": {
"format": "markdown",
"style": "formal",
"length": "medium",
"audience": "technical",
"include_citations": true
}
}
```
**Use case:** Configurable behavior, user preferences
### Pattern 5: Streaming/chunked
```json
{
"chunk_id": "chunk_1",
"total_chunks": 10,
"data": "partial data...",
"metadata": {
"session_id": "session_xyz"
}
}
```
**Use case:** Large payloads split into chunks, streaming data
## Dynamic payloads
Generate payloads programmatically.
### From user input
```python
def create_payload(user_input):
return {
"query": user_input,
"timestamp": datetime.now().isoformat(),
"user_id": get_current_user_id()
}
```
### From database
```python
def create_batch_payload(user_ids):
users = fetch_users(user_ids)
return {
"users": [
{
"id": u.id,
"email": u.email,
"tier": u.tier
}
for u in users
]
}
```
### From webhook
```python
@app.route('/webhook', methods=['POST'])
def handle_webhook():
webhook_data = request.json
payload = {
"event_type": webhook_data['type'],
"data": webhook_data['data'],
"received_at": datetime.now().isoformat()
}
# Send to Triform
execute_project(payload)
return {'status': 'received'}
```
## Payload transformation
Sometimes you need to transform external data into Triform payload format.
### Example transformation
**External API response:**
```json
{
"userId": "123",
"fullName": "Alice Smith",
"emailAddress": "alice@example.com",
"accountLevel": "PREMIUM"
}
```
**Triform payload:**
```json
{
"user_id": "123",
"name": "Alice Smith",
"email": "alice@example.com",
"tier": "premium"
}
```
**Transformation code:**
```python
def transform_to_payload(api_response):
return {
"user_id": api_response["userId"],
"name": api_response["fullName"],
"email": api_response["emailAddress"],
"tier": api_response["accountLevel"].lower()
}
```
## Debugging payloads
### Common issues
**Problem:** Execution fails with validation error\
**Solution:** Check payload against schema, fix type mismatches or missing fields
**Problem:** Payload is valid but execution fails\
**Solution:** Check execution logs, data might be valid format but wrong content
**Problem:** Payload too large\
**Solution:** Check quotas, consider chunking or reducing data size
**Problem:** Payload works in UI but not via API\
**Solution:** Check JSON encoding, content-type header, authentication
### Testing payloads
**Step 1:** Start simple
```json
{
"minimal_required_field": "value"
}
```
**Step 2:** Add optional fields
```json
{
"minimal_required_field": "value",
"optional_field": "value"
}
```
**Step 3:** Add complexity
```json
{
"minimal_required_field": "value",
"optional_field": "value",
"nested_object": {
"key": "value"
},
"array": [1, 2, 3]
}
```
**Step 4:** Test edge cases
```json
{
"empty_string": "",
"empty_array": [],
"null_value": null,
"large_number": 999999999
}
```
## Payload size limits
### Default limits
**Free tier:** 1 MB per payload\
**Pro tier:** 10 MB per payload\
**Enterprise:** Custom limits
### Handling large payloads
**Option 1: Chunking**
Split large payloads into smaller chunks, process sequentially
**Option 2: Reference by URL**
```json
{
"data_url": "https://s3.amazonaws.com/bucket/large-file.json",
"process_type": "batch"
}
```
## Next steps
Continue exploring the documentation to learn about Executions, Variables, and integrating Projects into your apps.
# Projects
Source: https://docs.triform.ai/concepts/projects
Organize and deploy AI systems as cohesive units
## What is a Project?
A Project is a complete, deployable AI system in Triform. It's a repository that holds all the components (Agents, Flows, Actions) needed to accomplish a specific goal.
## Project structure
Projects contain:
**Actions** โ Python functions for deterministic logic\
**Agents** โ LLM-powered components with tools\
**Flows** โ Orchestration graphs connecting components\
**Sub-Projects** โ Nested Projects for modularity\
**Variables** โ Configuration accessible to all components\
**Triggers** โ What starts executions
Example structure:
```
Project: Customer Support System
โโโ Flows
โ โโโ ticket_triage
โ โโโ response_generation
โโโ Agents
โ โโโ sentiment_analyzer
โ โโโ response_writer
โโโ Actions
โ โโโ fetch_ticket
โ โโโ update_status
โ โโโ send_notification
โโโ Project Variables
โโโ API_KEYS
โโโ CONFIG
```
## Creating Projects
### Via UI
1. Click **Home** in Top Bar
2. Click **New Project**
3. Name it and add a description
4. Click **Create**
### Via Triton
Ask: *"Create a new Project for processing customer feedback"*
Triton will create the structure, ask clarifying questions, and suggest initial components.
## Working with Projects
### Opening and navigating
1. Navigate to **Home**
2. Click your Project to open on Canvas
3. **Double-click** nodes to drill into Flows, Agents, or Actions
4. Use **breadcrumbs** at top to track your location
### Building in a Project
**Via Triton:**
* *"Add a validation Flow to this Project"*
* *"Create an Action that calls the Stripe API"*
**Via UI:**
* Right-click Canvas โ Add Node
* Choose component type, configure, and connect
## Project lifecycle
**1. Design** โ Plan inputs, outputs, and data flow\
**2. Build** โ Create Actions, configure Agents, build Flows\
**3. Integrate** โ Wire components together\
**4. Test** โ Validate with sample payloads\
**5. Deploy** โ Push to staging, then production\
**6. Monitor** โ Track execution success rate and performance\
**7. Iterate** โ Add features and optimize
## Common patterns
### Request-Response API
```
Input โ Validate โ Process โ Format โ Output
```
Use case: API endpoints, data transformations
### Multi-stage pipeline
```
Input โ Extract โ Transform โ Load โ Output
```
Use case: ETL, data processing, content generation
### Agent with tools
```
Input (query) โ Agent (with tools) โ Output (response)
Tools: search_database, call_api, send_email
```
Use case: Conversational interfaces, decision support
### Parallel processing
```
Input โ Split โ [Process A, B, C] โ Merge โ Output
```
Use case: High-volume processing, independent tasks
## Best practices
> **Single responsibility** โ Each Project should have one clear purpose
> **Self-contained** โ Minimize dependencies on other Projects
> **Well-documented** โ Clear descriptions for all components
> **Tested** โ Save example payloads for regression testing
> **Monitored** โ Track success rates and performance
## Project scope guidelines
**Too small** โ\
Project: "Uppercase a string" โ Should be an Action
**Just right** โ
\
Project: "User Onboarding" โ Includes validation, account creation, welcome email, setup
**Too large** โ\
Project: "Entire Customer Platform" โ Split into multiple Projects: Support, Billing, Notifications
**Rule of thumb:** If you can't explain what the Project does in one sentence, it's too large.
## Troubleshooting
**Project won't deploy**\
Check all components are configured, Project Variables are set, no circular dependencies
**Execution fails in Project but components work individually**\
Check connections, field mappings, and data flow
**Project is slow**\
Profile execution, identify bottlenecks, add parallel processing or caching
**Can't find my Project**\
Check filters, search by name, verify you're in the right Organization
## Next steps
See [Agents](/concepts/agents), [Flows](/concepts/flows), [Actions](/concepts/actions), and [Build a New Project](/tutorials/build-a-new-project).
# Storage
Source: https://docs.triform.ai/concepts/storage
Store and retrieve files in your workflows with S3-compatible storage
## What is Storage?
Storage is Triform's built-in file management system that enables your Actions to save and retrieve files. Whether you're processing documents, generating reports, or handling uploads, Storage provides a simple, secure way to work with files in your workflows.
## Key Features
* **S3-Compatible** โ Works with any S3-compatible storage backend
* **Project-Scoped** โ Files are isolated per project for security
* **Simple API** โ Two functions: `save_file()` and `get_file()`
* **Automatic Authentication** โ No manual credential management needed
* **Secure by Default** โ Encrypted storage with proper access controls
## Using Storage in Actions
### Saving Files
Use `save_file()` to store a file in your project's storage:
```python theme={null}
from triform import save_file
def my_action(data: dict) -> dict:
# Generate content (could be a report, document, image, etc.)
content = generate_report(data)
# Save to storage
file_path = save_file(
filename="report.pdf",
content=content,
content_type="application/pdf"
)
return {"file_path": file_path}
```
**Parameters:**
* `filename` โ Name for the file (including extension)
* `content` โ File content (bytes, string, or file-like object)
* `content_type` โ MIME type of the file (optional, auto-detected if omitted)
### Retrieving Files
Use `get_file()` to retrieve a previously saved file:
```python theme={null}
from triform import get_file
def my_action(data: dict) -> dict:
# Retrieve a file by its path
file_content = get_file(data["file_path"])
# Process the file content
result = process_document(file_content)
return {"result": result}
```
**Parameters:**
* `file_path` โ The path returned from `save_file()` or provided via input
## Common Patterns
### Pattern 1: Document Processing Pipeline
```python theme={null}
from triform import save_file, get_file
def process_uploaded_document(data: dict) -> dict:
# Get the uploaded file
document = get_file(data["input_file"])
# Process it (extract text, analyze, etc.)
processed = extract_and_analyze(document)
# Save the processed result
output_path = save_file(
filename="processed_result.json",
content=json.dumps(processed),
content_type="application/json"
)
return {"output_file": output_path, "summary": processed["summary"]}
```
### Pattern 2: Report Generation
```python theme={null}
from triform import save_file
def generate_weekly_report(data: dict) -> dict:
# Generate PDF report
pdf_bytes = create_pdf_report(data["metrics"])
# Save with dated filename
from datetime import datetime
filename = f"report_{datetime.now().strftime('%Y-%m-%d')}.pdf"
file_path = save_file(
filename=filename,
content=pdf_bytes,
content_type="application/pdf"
)
return {"report_url": file_path}
```
### Pattern 3: Image Processing
```python theme={null}
from triform import save_file, get_file
def resize_image(data: dict) -> dict:
# Get original image
image_data = get_file(data["image_path"])
# Process with PIL
from PIL import Image
from io import BytesIO
img = Image.open(BytesIO(image_data))
img = img.resize((800, 600))
# Save resized version
output = BytesIO()
img.save(output, format='PNG')
new_path = save_file(
filename="resized_image.png",
content=output.getvalue(),
content_type="image/png"
)
return {"resized_image": new_path}
```
## File Upload via API
You can upload files to your projects via the FormData API:
```bash theme={null}
curl -X POST 'https://app.triform.ai/api/files/{project-id}' \
--header 'Authorization: {your-api-key}' \
--form 'file=@/path/to/your/file.pdf'
```
The response includes the file path you can use in subsequent action executions.
## Storage Configuration
Storage is configured at the project level via Modifiers:
1. Go to **Project โ Properties โ Modifiers**
2. Click **Add Modifier โ Storage**
3. Configure your storage backend (S3 credentials, bucket, region)
4. Save
Once configured, all Actions in the project can use `save_file()` and `get_file()`.
## Storage Limits
| Plan | Storage Limit | File Size Limit |
| ---------- | ------------- | --------------- |
| Free | 1 GB | 10 MB |
| Pro | 50 GB | 100 MB |
| Enterprise | Custom | Custom |
## Security
* **Encryption at Rest** โ All files are encrypted in storage
* **Encryption in Transit** โ HTTPS for all file transfers
* **Project Isolation** โ Files are scoped to projects, preventing cross-project access
* **Access Control** โ Only authenticated Actions within the project can access files
* **Credential Management** โ Storage credentials are managed by Triform, never exposed to Actions
## Best Practices
> **Use meaningful filenames** โ Include dates, IDs, or descriptive names for easier debugging
> **Clean up temporary files** โ Remove files you no longer need to save storage
> **Handle large files carefully** โ Stream large files rather than loading entirely into memory
> **Check file existence** โ Handle cases where files may not exist gracefully
## Troubleshooting
**Problem:** `save_file()` fails with permission error\
**Solution:** Check that storage modifiers are configured for your project
**Problem:** `get_file()` returns empty or None\
**Solution:** Verify the file path is correct and the file exists
**Problem:** File uploads timeout\
**Solution:** For large files, consider chunked uploads or compression
## Next Steps
* Learn about [Modifiers](/concepts/modifiers) for configuring storage
* See [Actions](/concepts/actions) for using storage in your code
* Check [Tutorials](/tutorials/build-a-new-project) for end-to-end examples
# Triggers
Source: https://docs.triform.ai/concepts/triggers
Automate Project execution with webhooks, schedules, and events
## What are Triggers?
Triggers automatically execute your Projects in response to events, without manual intervention. Instead of clicking "Execute" every time, set up Triggers to run your Projects when specific conditions are met.
## Types of Triggers
### Webhook Triggers
Execute when an HTTP request hits your webhook endpoint.
**Use cases:**
* Payment notifications (Stripe, PayPal)
* GitHub events (push, PR, issue)
* Form submissions
* Third-party service events
**Setup:**
1. Go to Project โ Triggers
2. Click **Add Trigger โ Webhook**
3. Configure:
* Path: `/webhook/payment-received`
* Authentication: API key or HMAC signature
* Payload transformation (if needed)
4. Save โ Get webhook URL
5. Register URL with external service
**Example URL:**
```
https://api.triform.ai/v1/webhooks/your-org/payment-received
```
**Incoming webhook:**
```json
POST /v1/webhooks/your-org/payment-received
{
"event": "payment.success",
"amount": 99.99,
"customer_id": "cust_123"
}
```
**Your Project receives:**
```json
{
"event_type": "payment.success",
"amount": 99.99,
"customer_id": "cust_123",
"received_at": "2025-10-01T10:30:00Z"
}
```
### Schedule Triggers
Execute at specific times or intervals.
**Use cases:**
* Daily reports
* Periodic data sync
* Cleanup jobs
* Monitoring checks
**Setup:**
1. Go to Project โ Triggers
2. Click **Add Trigger โ Schedule**
3. Configure schedule:
* **Cron expression:** `0 6 * * *` (daily at 6 AM)
* **Interval:** Every 15 minutes
* **One-time:** Specific date/time
4. Set timezone
5. Define payload (static or dynamic)
6. Save
**Schedule types:**
| Type | Example | Description |
| -------- | ------------------------- | ------------------------ |
| Cron | `0 6 * * *` | Daily at 6 AM UTC |
| Interval | `Every 15 minutes` | Repeating interval |
| Hourly | `Every hour at :00` | Top of each hour |
| Daily | `Daily at 9:00 AM` | Specific time daily |
| Weekly | `Every Monday at 8:00 AM` | Specific day/time weekly |
| Monthly | `1st of month at 00:00` | Specific day each month |
| One-time | `2025-10-15 14:00:00` | Single execution |
**Cron expression format:**
```
* * * * *
โ โ โ โ โ
โ โ โ โ โโโโ Day of week (0-7, 0=Sunday)
โ โ โ โโโโโโ Month (1-12)
โ โ โโโโโโโโ Day of month (1-31)
โ โโโโโโโโโโ Hour (0-23)
โโโโโโโโโโโโ Minute (0-59)
```
**Common patterns:**
* `0 * * * *` โ Every hour
* `*/15 * * * *` โ Every 15 minutes
* `0 9 * * 1-5` โ Weekdays at 9 AM
* `0 0 1 * *` โ First of each month
### Manual Triggers
Execute via Execution button.
**Use cases:**
* On-demand processing
* Admin actions
* Testing
* User-initiated workflows
### Viewing Triggers
1. Go to Project โ Executions
2. See list of all triggers:
* Type (webhook, schedule)
### Editing Triggers
1. Select trigger from list
2. Click **Edit**
3. Modify configuration
4. **Save** โ Changes take effect immediately
**Note:** Schedule changes apply to future executions, not currently running ones.
### Deleting Triggers
Permanently remove a trigger:
1. Select trigger
2. Click **Delete**
3. Confirm
4. Trigger is removed
**Warning:** Cannot be undone. Webhook URLs will stop working.
## Trigger configuration
### Payload
Define what data the triggered execution receives.
**Static payload:**
```json
{
"source": "scheduled_job",
"timestamp": "{{now}}"
}
```
**Dynamic payload from webhook:**
```json
{
"event_type": "{{webhook.event}}",
"data": "{{webhook.body}}",
"headers": "{{webhook.headers}}"
}
```
**Using variables:**
```json
{
"api_key": "{{global.API_KEY}}",
"environment": "{{global.ENV}}"
}
```
### Timeout
Set maximum execution time:
* Default: 60 seconds
* Max: 15 minutes (Pro), 60 minutes (Enterprise)
**If timeout reached:**
* Execution is canceled
* Error logged
* Retry policy applies (if configured)
## Webhook authentication
Secure your webhook endpoints.
### API Key
Require API key in header:
```bash
curl -X POST https://api.triform.ai/v1/webhooks/your-endpoint \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"data": "value"}'
```
**Configuration:**
1. Enable API key authentication
2. Provide key to webhook sender
3. Triform validates before execution
## Common patterns
### Pattern 1: Webhook โ Process โ Notify
```
Webhook receives event
โ Validate and transform
โ Process data
โ Send notification
```
**Example:** Payment received โ Update database โ Email customer
### Pattern 2: Schedule โ Fetch โ Process โ Store
```
Daily at 6 AM
โ Fetch data from APIs
โ Process and analyze
โ Store results
```
**Example:** Daily report generation
### Pattern 3: Event chain
```
Project A completes
โ Triggers Project B
โ Triggers Project C
```
**Example:** Onboarding flow: Create account โ Send welcome โ Provision services
### Pattern 4: Error handling
```
Project fails
โ Event trigger fires
โ Error logger Project executes
โ Alert sent to team
```
**Example:** Automated incident response
## Troubleshooting
**Problem:** Webhook not triggering\
**Solution:** Check URL is correct, authentication is valid, check logs for rejected requests
**Problem:** Schedule not running\
**Solution:** Verify cron expression, check timezone, ensure trigger is not paused
**Problem:** Trigger fires but execution fails\
**Solution:** Check payload format, verify required fields, review execution logs
## Next steps
Continue exploring the documentation to learn about Executions and webhook configuration.
# Login & Registration
Source: https://docs.triform.ai/getting-started/login
Sign in with Email, Discord, or GitHub
## Sign in
1. Go to [app.triform.ai](https://app.triform.ai)
2. Choose **Email**, **Discord**, or **GitHub**
3. Authorize and you'll be redirected to your Canvas
## First-time registration
* A personal Organization is created automatically
* A default Project opens on the Canvas
## Switching Organizations
You can belong to multiple Organizations. Switch via Profile โ Organization.
## Troubleshooting
**Popup blocked** โ Allow popups for `app.triform.ai`\
**Wrong account** โ Sign out of your provider, then sign in again\
**Stuck redirect** โ Clear cookies for `app.triform.ai` or use a private window\
**2FA issues** โ Resolve with your provider, then repeat OAuth
If problems persist, contact support via [Discord](https://discord.gg/triform).
# Quickstart
Source: https://docs.triform.ai/getting-started/quickstart
Get up and running with Triform in 5 minutes
## Prerequisites
* A Discord or GitHub account
* A modern browser (Chrome, Firefox, Safari, or Edge)
## Step 1: Sign in
1. Go to [app.triform.ai](https://app.triform.ai)
2. Click **Sign in with Discord** or **Sign in with GitHub**
3. Authorize Triform
4. You'll land in the **Builder workspace**
## Step 2: Create your first Flow
Let's build a simple workflow using Triton:
1. Click in the **Chat Panel** at the bottom (or press Cmd/Ctrl+K)
2. Type: *"Build me a Flow that summarizes the latest news from HackerNews"*
3. Watch Triton plan, create, and connect the components on the Canvas
## Step 3: Execute your Flow
1. Select the Flow node on the Canvas
2. Open the **Properties Panel** on the right
3. Go to the **Execute** tab
4. Click **Execute**
5. View the results in the output panel
## Step 4: Use your agent in Chat
1. Click the **Chat** workspace toggle in the Top Bar
2. Enable your project in the right panel
3. Start conversing with your agent
## Next steps
* **Modify** โ Switch back to Builder and ask Triton to add more Actions or Agents
* **Deploy** โ Make your Flow accessible via API
* **Explore** โ Check execution history and logs
## Need help?
* Ask Triton directly in the Chat Panel (Builder workspace)
* Join our [Discord community](https://discord.gg/triform)
* See the [Workspace Overview](/getting-started/workspace-overview) for interface details
# Workspace Overview
Source: https://docs.triform.ai/getting-started/workspace-overview
Navigate the interface: Chat workspace, Builder workspace, and Top Bar
## Two workspaces
Triform has two main workspaces, each optimized for different activities:
### Chat Workspace
**For using and interacting with your agents**
* Conversational interface for talking with agents
* Chat history to manage conversations
* Project selector to enable agent capabilities
* Similar experience to ChatGPT or other chat tools
### Builder Workspace
**For designing and building your AI systems**
* Visual Canvas where you compose nodes and flows
* Chat Panel with Triton, your AI building assistant
* Properties Panel for configuration and execution
* Tools for creating and debugging components
## Top Bar
The top bar is shared across both workspaces and provides:
* **Workspace switcher** โ Toggle between Chat and Builder
* **Navigation** โ Breadcrumbs and project selection
* **Deploy controls** โ Publish your work
## Getting started
### To build something new:
1. Go to the **Builder workspace**
2. Create components on the Canvas or ask Triton for help
3. Configure and test using the Properties Panel
### To use your agents:
1. Go to the **Chat workspace**
2. Enable relevant projects in the right panel
3. Start conversing with your agent
> tip: Build in Builder, use in Chat. Most development happens in Builder; most conversations happen in Chat.
# Welcome
Source: https://docs.triform.ai/index
Triform overview and quickstart
Triform is a visual platform for building, running, and monitoring AI-powered systems. Instead of stitching together code and configs, you **compose logic on a Canvas** by just chatting with it, then **use your agents** in a dedicated Chat interface.
## Who this is for
* Non-technical users wanting to automate their work or tasks
* Engineers building complex end-to-end Agentic workflows
* Product teams iterating quickly on automation prototypes
## Quickstart
1. **Sign in** at [app.triform.ai](https://app.triform.ai) with Discord or GitHub
2. You land in your first **Project** in the **Builder workspace**
3. **Chat** with Triton and ask him to build something
4. **Watch** Triton plan, build, and test your solution
5. **Switch** to the **Chat workspace** to use your agent conversationally
> tip: Start with a Flow: *"Build me a news gatherer that collects news from Swedish sources and summarizes them"*. Execute with a test payload to verify your setup.
## What you can build
* Tool-using **Agents** that call Actions/Flows
* **Flows** that orchestrate multi-step logic
* **Actions** that run precise Python code
* APIs or scheduled jobs that expose top-level components
## How Triform is organized
**Organizations** โ Top-level ownership and access\
**Projects** โ Focused workspaces inside an Organization\
**Library** โ Reusable building blocks (Actions, Flows, etc.)\
**Builder** โ The visual workspace where you design and debug\
**Chat** โ The conversational workspace where you use and share your creations
## Need help?
* In **Builder**: Use the Chat Panel and talk to Triton to create, connect, or run components
* In **Chat**: Enable the right projects and converse with your agents
* Invite teammates from Profile โ Organization โ View
* Share feedback anytimeโyour input shapes our roadmap
# Triform Community Version Terms
Source: https://docs.triform.ai/legal/community-terms
Minimal terms for the free, public-by-default Triform Community Version.
# Triform Community Version Terms
**Effective date:** October 9, 2025\
**Entity:** Triform AB, Gรถtgatan 23, 116 46 Stockholm, Sweden\
**Contact:** [contact@triform.ai](mailto:contact@triform.ai)
> **Summary (not a substitute for the terms):** Your **creations and source code are public**. Your **executions, inputs, and outputs are not shared**; Triform may use **de-identified** execution data to operate, improve, and train systems and models. Use **secret variables** for credentials or sensitive values.
## 1) Eligibility
* You must be **16+** (or the age of digital consent in your country, if higher).
* If you use Triform on behalf of an organization, you confirm you have authority to accept these terms.
## 2) Definitions
* **Creations**: your project assets that you intentionally publish to the project workspace, including **source code**, prompts, configs, docs, and non-secret assets.
* **Execution Data**: runtime data from building/running agents (e.g., inputs, outputs, logs, traces, error messages, metrics).
* **Secret Data**: values you pass via secret variables/inputs (e.g., API keys, credentials, personal data).
## 3) What is public vs. private
* **Public:** Your **Creations (source code and non-secret assets)** are **public by default** and visible to anyone.
* **Not shared publicly:** **Execution Data** and **Secret Data** are **not disclosed to the public** by Triform.
## 4) MIT-Licenses for public Creations (code)
* **License to the public:** By using the Community Version, you grant everyone a **worldwide, royalty-free, non-exclusive, irrevocable, perpetual license** to **use, copy, modify, create derivative works of, and distribute** your **public code/Creations**, including commercially, with **reasonable attribution** (your Triform handle + project URL).
* **License to Triform:** You grant Triform a matching license to host, display, index, remix, and showcase your public Creations and to use them to operate and improve the service.
## 5) Use of Execution Data for training (private to the public)
* Triform may **process and use Execution Data** to operate, secure, evaluate, and **train/improve** our systems and models.
* **PII cleaning/anonymization:** Before any training or analysis use, we **remove or transform personally identifiable data** and **exclude Secret Data** (e.g., secret variables, credentials). We do **not** intentionally include raw secrets in training corpora.
* We do **not** publish or disclose Execution Data to the public. We do **not** attempt to re-identify de-identified data.
* If you delete a project, we stop using it for future training. Already-trained models may not be retroactively "untrained." Backups may persist for a limited period for security/compliance.
## 6) Your responsibilities
* Do not upload or hard-code secrets; use **secret variables**.
* Only include materials you have rights to share **publicly** in your Creations (e.g., your own code).
* Do not use Triform for illegal, infringing, abusive, or harmful activities, or to violate third-party API/model terms.
## 7) Moderation; reporting
* We may remove content, restrict access, or take action where these terms or the law are violated.
* Report issues or request takedown at **[report@triform.ai](mailto:report@triform.ai)** (include project URL and reason).
## 8) Service changes
The Community Version is provided **as-is** without SLA. We may change or discontinue features. If we make **material changes** to these terms, we will notify you and update the effective date.
## 9) Disclaimers; liability
THE SERVICE IS PROVIDED "AS IS" WITHOUT WARRANTIES. TO THE MAXIMUM EXTENT PERMITTED BY LAW, TRIFORM IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR LOST PROFITS/REVENUE/DATA/GOODWILL. DIRECT DAMAGES ARE LIMITED TO **โฌ100**.
## 10) Governing law; arbitration
These terms are governed by the laws of **Sweden**. Any disputes arising from these terms shall be resolved through **binding arbitration in Stockholm, Sweden** in accordance with the rules of the Arbitration Institute of the Stockholm Chamber of Commerce.
***
By creating an account or using the Community Version, you agree to these terms.
# Privacy Policy - Community Version
Source: https://docs.triform.ai/legal/privacy-policy
Privacy Policy for the Triform Community Version
# Privacy Policy - Community Version
**Effective date:** November 10, 2025\
**Entity:** Triform AB, Gรถtgatan 23, 116 46 Stockholm, Sweden\
**Contact:** [privacy@triform.ai](mailto:privacy@triform.ai)
This Privacy Policy explains how Triform AB ("Triform," "we," "us," or "our") collects, uses, discloses, and safeguards your information when you use the Triform Community Version platform.
> **Quick summary:** Your code and project creations are **public and open source**. Your execution data (inputs, outputs, logs) is **yours**, but we have the right to use de-identified versions to improve and train our systems. We take your privacy seriously and follow industry best practices.
***
## 1. Information We Collect
### 1.1 Account Information
When you create a Triform account, we collect:
* **Authentication data**: Email address, username, profile information from OAuth providers (Discord, GitHub)
* **Profile data**: Display name, avatar, user handle
* **Organization data**: Organization name, member roles, team structure
### 1.2 Content You Create (Public by Default)
* **Project assets**: Flows, Actions, Agents, and all project source code
* **Prompts and configurations**: Instructions, settings, and documentation
* **Non-secret variables**: Public configuration values
* **Comments and annotations**: Notes within your projects
**Important:** All content listed in this section is **public and open source** in the Community Version. Do not include sensitive or proprietary information in these assets.
### 1.3 Execution Data (Private to Public, Used for Training)
When you build, test, or run components, we collect:
* **Inputs and outputs**: Data passed to and returned from your components
* **Logs and traces**: Execution logs, error messages, debugging information
* **Performance metrics**: Execution duration, resource usage, success/failure rates
* **Chat interactions**: Conversations with Triton (our AI assistant) during building
* **API calls**: Requests made through your flows and actions
**Your data ownership:** This execution data is **yours**. However, by using the Community Version, you grant us the right to use **de-identified and anonymized** versions of this data to:
* Improve the Triform platform
* Train and enhance our AI models (including Triton)
* Develop new features and capabilities
* Conduct research and analysis
### 1.4 Secret Data (Not Used for Training)
Data you designate as secret is handled with extra care:
* **Secret variables**: API keys, credentials, tokens stored as secrets
* **Secret inputs**: Sensitive data passed through secure inputs
* **Authentication credentials**: Passwords, OAuth tokens, API secrets
We **do not** use secret data for training purposes. We **do not** share secret data publicly. We **do not** include secret data in analytics or improvement processes.
### 1.5 Technical and Usage Data
We automatically collect:
* **Device information**: Browser type, operating system, device identifiers
* **Usage analytics**: Features used, pages viewed, time spent, click patterns
* **Network data**: IP address, location (country/region level), connection type
* **Cookies and similar technologies**: Session management, preferences, analytics
***
## 2. How We Use Your Information
### 2.1 To Provide and Operate the Service
* Host and display your public projects
* Execute your flows, actions, and agents
* Enable collaboration within organizations
* Provide the Builder and Chat workspaces
* Facilitate authentication and access control
### 2.2 To Improve and Train Our Systems
We use de-identified execution data to:
* **Train AI models**: Improve Triton and other AI capabilities
* **Enhance platform features**: Develop smarter tooling, better error handling
* **Optimize performance**: Improve execution speed and reliability
* **Build new capabilities**: Create features based on usage patterns
**De-identification process:** Before using execution data for training or analysis, we:
* Remove or pseudonymize personally identifiable information (PII)
* Exclude all secret data and credentials
* Aggregate data where appropriate
* Transform identifying characteristics
We do **not** attempt to re-identify de-identified data.
### 2.3 To Communicate With You
* Service announcements and updates
* Response to support requests
* Security and administrative notices
* Product improvements and feature launches (with your consent)
### 2.4 For Security and Compliance
* Detect and prevent fraud, abuse, and security incidents
* Enforce our Terms of Service
* Comply with legal obligations and regulatory requirements
* Protect the rights and safety of our users and the public
***
## 3. Data Ownership and Your Rights
### 3.1 Your Data Ownership
* **You own your execution data**. While we may use de-identified versions for improvement, the underlying data belongs to you.
* **Your code is open source**. By using the Community Version, you agree that your project code and creations are public and available under the MIT License (see Community Terms).
### 3.2 Your Privacy Rights
Depending on your location (particularly in the EU/EEA under GDPR), you have the right to:
* **Access**: Request a copy of the personal data we hold about you
* **Rectification**: Correct inaccurate or incomplete personal data
* **Erasure**: Request deletion of your personal data ("right to be forgotten")
* **Restriction**: Request we limit processing of your personal data
* **Data portability**: Receive your data in a structured, machine-readable format
* **Object**: Object to processing of your personal data for certain purposes
* **Withdraw consent**: Withdraw consent for processing where we rely on consent
**To exercise these rights**, contact us at [privacy@triform.ai](mailto:privacy@triform.ai).
**Important limitations:**
* Deleting your account will stop future use of your data for training, but already-trained models cannot be "untrained"
* Public code and creations remain public (per the MIT License) even after account deletion
* Backup copies may persist for a limited period for security and compliance purposes
* We may retain certain data where required by law or for legitimate business purposes
***
## 4. How We Share Your Information
### 4.1 Public Sharing (By Design)
The Community Version makes your projects **public by default**:
* **Anyone** can view your project source code, flows, actions, and agents
* Your public profile (username, avatar) is visible to all users
* Your contributions may be featured in community showcases
### 4.2 Within Your Organization
* Organization members can view projects within shared workspaces
* Admins can manage team access and permissions
### 4.3 Service Providers
We share data with trusted third-party service providers who help us operate the platform:
* **Cloud infrastructure**: AWS, Google Cloud, or similar hosting providers
* **Authentication**: OAuth providers (Discord, GitHub)
* **Analytics**: Usage analytics and error monitoring tools
* **AI/ML services**: Third-party AI models and APIs (OpenAI, Anthropic, etc.)
* **Communication**: Email service providers
These providers are contractually obligated to protect your data and use it only for specified purposes.
### 4.4 Legal Obligations
We may disclose information if required by law:
* To comply with legal process (subpoena, court order)
* To protect rights, property, or safety
* To investigate potential violations
* In connection with a merger, acquisition, or sale of assets
### 4.5 With Your Consent
We may share information in other circumstances with your explicit consent.
***
## 5. Data Security
We implement industry-standard security measures to protect your data:
### 5.1 Technical Safeguards
* **Encryption in transit**: TLS/HTTPS for all data transmission
* **Encryption at rest**: Sensitive data encrypted in storage
* **Access controls**: Role-based access with principle of least privilege
* **Secret management**: Dedicated secure storage for secret variables
* **Regular security audits**: Ongoing security assessments and testing
### 5.2 Organizational Safeguards
* **Employee training**: Security awareness for all team members
* **Limited access**: Only authorized personnel can access user data
* **Incident response**: Procedures for detecting and responding to breaches
* **Vendor management**: Security requirements for third-party providers
### 5.3 Your Responsibilities
* Use strong, unique passwords
* Enable two-factor authentication (when available)
* **Never hard-code secrets** in your project codeโuse secret variables
* Regularly review your organization's member access
* Report suspected security issues to [security@triform.ai](mailto:security@triform.ai)
***
## 6. Data Retention
### 6.1 Active Accounts
* **Account data**: Retained while your account is active
* **Public projects**: Remain public indefinitely (per MIT License)
* **Execution data**: Retained for operational and improvement purposes
* **Logs and traces**: Retained for 90 days for debugging and support
### 6.2 Deleted Accounts
When you delete your account:
* Personal profile information is removed within 30 days
* Execution data stops being used for future training
* **Public code remains public** (cannot be deleted due to MIT License)
* Backups may persist for up to 90 days
* De-identified data in trained models cannot be extracted
### 6.3 Legal Retention
We may retain data longer where required by:
* Legal or regulatory obligations
* Dispute resolution and enforcement
* Security and fraud prevention
***
## 7. International Data Transfers
Triform is based in Sweden (EU/EEA). However, we use service providers that may store or process data outside the EU/EEA, including in the United States.
When we transfer personal data outside the EU/EEA, we ensure adequate protection through:
* **Standard Contractual Clauses (SCCs)**: EU-approved data transfer agreements
* **Adequacy decisions**: Transfers to countries with adequate data protection
* **Additional safeguards**: Encryption, access controls, and contractual protections
***
## 8. Children's Privacy
The Triform Community Version is **not intended for users under 16** (or the applicable age of digital consent in your jurisdiction, if higher). We do not knowingly collect personal information from children.
If we learn that we have collected personal data from a child without appropriate consent, we will delete that information promptly. If you believe a child has provided us with personal data, please contact us at [privacy@triform.ai](mailto:privacy@triform.ai).
***
## 9. Third-Party Services and Integrations
### 9.1 OAuth Authentication
We use third-party OAuth providers (Discord, GitHub) for authentication. These services have their own privacy policies:
* Discord Privacy Policy: [https://discord.com/privacy](https://discord.com/privacy)
* GitHub Privacy Policy: [https://docs.github.com/en/site-policy/privacy-policies](https://docs.github.com/en/site-policy/privacy-policies)
### 9.2 AI Model Providers
Your execution data may be processed by third-party AI providers (OpenAI, Anthropic, etc.) when you use AI-powered features. We:
* Use enterprise agreements with zero-retention policies where available
* **Do not** send secret data to these providers
* Strip PII before sending data for processing
### 9.3 External APIs
When your flows or actions call external APIs, those services are subject to their own privacy policies. You are responsible for:
* Understanding the privacy practices of APIs you integrate
* Obtaining necessary consents from end-users
* Complying with third-party API terms
***
## 10. Cookies and Tracking Technologies
We use cookies and similar technologies for:
### 10.1 Essential Cookies
* **Authentication**: Keep you logged in
* **Security**: Prevent fraud and abuse
* **Preferences**: Remember your settings
### 10.2 Analytics Cookies
* **Usage analytics**: Understand how you use the platform
* **Performance monitoring**: Identify and fix errors
* **Feature optimization**: Improve user experience
You can control cookies through your browser settings, but disabling essential cookies may impact platform functionality.
***
## 11. Your Choices and Controls
### 11.1 Account Settings
* Update your profile information
* Manage organization memberships
* Configure notification preferences
### 11.2 Data Controls
* **Secret variables**: Use these for all sensitive data
* **Project visibility**: Note that Community Version projects are public by default
* **Delete projects**: Remove projects you no longer need
* **Delete account**: Request full account deletion
### 11.3 Communication Preferences
You can opt out of:
* Marketing and promotional emails (you'll still receive essential service communications)
* Community newsletters and updates
***
## 12. California Privacy Rights (CCPA)
If you are a California resident, you have additional rights under the California Consumer Privacy Act (CCPA):
### 12.1 Right to Know
You can request information about:
* Categories of personal information collected
* Purposes for collection and use
* Categories of sources and third parties we share with
* Specific pieces of personal information we hold
### 12.2 Right to Delete
Request deletion of your personal information (subject to exceptions).
### 12.3 Right to Opt-Out
Opt out of "sale" of personal information. **Note:** We do not sell personal information in the traditional sense, but using de-identified data for training may qualify as a "sale" under CCPA. You can opt out by contacting us.
### 12.4 Right to Non-Discrimination
We will not discriminate against you for exercising your CCPA rights.
**To exercise CCPA rights**, contact us at [privacy@triform.ai](mailto:privacy@triform.ai) with "CCPA Request" in the subject line.
***
## 13. Changes to This Privacy Policy
We may update this Privacy Policy from time to time to reflect:
* Changes in our practices
* Legal or regulatory updates
* New features or services
When we make **material changes**, we will:
* Update the "Effective date" at the top
* Notify you via email or platform notification
* Provide a summary of key changes
Continued use of the platform after changes constitutes acceptance of the updated policy.
**Review regularly**: We encourage you to review this policy periodically.
***
## 14. Contact Us
For questions, concerns, or requests regarding this Privacy Policy or your personal data:
**Email:** [privacy@triform.ai](mailto:privacy@triform.ai)\
**Data Protection Officer:** [dpo@triform.ai](mailto:dpo@triform.ai)\
**General contact:** [contact@triform.ai](mailto:contact@triform.ai)\
**Mailing address:** Triform AB, Gรถtgatan 23, 116 46 Stockholm, Sweden
**Response time:** We aim to respond to privacy inquiries within 30 days.
***
## 15. Supervisory Authority
If you are located in the EU/EEA and believe we have not adequately addressed your privacy concerns, you have the right to lodge a complaint with your local data protection authority.
**Swedish Data Protection Authority (Datainspektionen)**\
Website: [https://www.datainspektionen.se](https://www.datainspektionen.se)\
Email: [datainspektionen@datainspektionen.se](mailto:datainspektionen@datainspektionen.se)
***
## Summary of Key Points
โ
**Your code is public and open source** in the Community Version\
โ
**You own your execution data**, but we can use de-identified versions for training\
โ
**Secret data is never used for training** or shared publicly\
โ
**We anonymize personal data** before any training or analysis\
โ
**You have control**: Access, correct, delete, or export your data\
โ
**Security is a priority**: Encryption, access controls, and regular audits\
โ
**Delete anytime**: Stop future training use (but models can't be "untrained")\
โ
**GDPR and CCPA compliant**: Full privacy rights for EU and California residents
***
By creating an account or using the Triform Community Version, you acknowledge that you have read and understood this Privacy Policy.
**Last updated:** November 10, 2025
# LLMs.txt
Source: https://docs.triform.ai/llms
Standardized file for LLM access to Triform documentation
# Triform
> Triform is a visual platform for building, running, and monitoring AI-powered systems. Users compose logic in the **Builder workspace** using a Canvas with Nodes (Agents, Flows, Actions) connected by Edges. Triton, the built-in AI assistant, helps build, modify, and debug Projects through natural conversation. The **Chat workspace** provides a conversational interface for using and interacting with completed agents.
## Core Concepts
**Projects** are complete, deployable AI systems containing Actions, Agents, and Flows. **Agents** are LLM-powered components with prompts, model configs, and tools. **Actions** are atomic Python functions with typed inputs/outputs. **Flows** are orchestration graphs connecting components with edges defining data flow.
**Important notes:**
* The **Builder workspace** contains the Canvas, Chat Panel (Triton), and Properties Panel for building
* The **Chat workspace** is for conversing with and using your agents (like ChatGPT)
* All components live within Organizations โ Projects โ Library hierarchy
* Executions are tracked with logs, traces, and metrics for debugging
* Projects deploy to staging/production and expose API endpoints
* Dependencies must be pure Python (no binary installs)
## Getting Started
* [Quickstart](/getting-started/quickstart): 5-minute guide to sign in, create a Flow with Triton, and use it in Chat
* [Workspace Overview](/getting-started/workspace-overview): Builder workspace, Chat workspace, and navigation
* [Login](/getting-started/login): Authentication via Discord or GitHub
## Core Concepts
* [Agents](/concepts/agents): LLM logic with prompts, tools, and observability patterns
* [Flows](/concepts/flows): Graph building blocks (Input/Output nodes, edges) and patterns (linear, branching, parallel)
* [Actions](/concepts/actions): Python structure, I/O contracts, and workflow
* [Glossary](/concepts/glossary): Comprehensive definitions of all Triform terms
* [Projects](/concepts/projects): Organization, structure, and deployment
* [Executions](/concepts/executions): Running components, viewing results, and debugging
* [Payloads](/concepts/payloads): JSON input data format and schema matching
* [Triggers](/concepts/triggers): Webhooks, schedules, and manual execution
## Triton AI Assistant
* [Triton Overview](/triton/overview): What Triton can do, how to use effectively, workflows, and limitations
* [Building with Triton](/triton/building): Creating Agents, Actions, Flows from natural language
* [Defining Projects](/triton/defining): Conversational Project creation and structure
* [Editing Components](/triton/editing): Modifying, debugging, and optimizing existing work
## Workspace Interface
### Builder Workspace (For Building)
* [Builder Overview](/workspace/builder/overview): Main development workspace
* [Canvas Overview](/workspace/canvas/overview): Visual workspace for building
* [Flow View Basics](/workspace/canvas/flow-view/basics): Nodes, edges, and graph visualization
* [Create and Connect](/workspace/canvas/flow-view/create-connect): Adding nodes and wiring components
* [Node Interactions](/workspace/canvas/flow-view/node-interactions): Selection, configuration, and manipulation
* [Properties Panel Overview](/workspace/properties/overview): Component configuration interface
* [Execute Panel](/workspace/properties/execute): Running components with payloads and viewing results
* [Chat Panel (Triton)](/workspace/chat-panel): Interacting with Triton for building
### Chat Workspace (For Using Agents)
* [Chat Overview](/workspace/chat/overview): Conversational workspace for using agents
* [Chat Interface](/workspace/chat/chat-interface): Main chat area
* [Chat History](/workspace/chat/chat-history): Managing conversations
* [Project Selector](/workspace/chat/project-selector): Enabling projects for your agent
## Tutorials
* [Build a New Project](/tutorials/build-a-new-project): End-to-end guide to creating a complete Project
* [Edit an Existing Project](/tutorials/edit-an-existing-project): Modifying and extending Projects
* [Edit a Specific Component](/tutorials/edit-a-specific-component): Focused changes to Actions, Agents, or Flows
* [Integrate Project into Your App](/tutorials/integrate-project-into-your-app): API keys, endpoints, and external integration
## API Reference
* [API Introduction](/api-reference/introduction): Authentication with Bearer tokens
* [OpenAPI Specification](/api-reference/openapi.json): Complete API schema
## Optional
* [Project Variables](/concepts/project/variables): Environment-specific configuration and secrets
* [API Keys](/concepts/project/api-keys): Creating and managing authentication tokens
* [Deployments](/concepts/project/deployments): Publishing to staging and production
* [Quick Reference](/appendix/quick-reference): Cheat sheet for common operations
* [Organization Admin](/orgs/admin): Managing Organizations
* [Members and Roles](/orgs/members): Team collaboration and permissions
* [Quotas Overview](/quotas/index): Account limits and resource usage
* [Security Overview](/security/overview): Data protection and compliance
* [Changelog](/changelog/index): Platform updates and new features
* [Community](/community/join-discord): Discord server and support channels
***
## About this file
This page follows the [llms.txt specification](https://llmstxt.org/) - a proposed standard for providing LLM-friendly information to help AI assistants use website documentation at inference time. The plain text version is available at `/llms.txt`.
# Organization Admin
Source: https://docs.triform.ai/orgs/admin
Central management for Owners/Admins
## What you can do
* Switch the active Organization.
* View members, invite users, and change roles.
* Configure visibility, licensing, and integrations (e.g., GitHub).
* Review usage and plan details.
## Access
* Open Profile โ Organization โ Overview / View.
> tip: Delegate routine tasks โ Give dayโtoโday responsibilities to Admins; reserve sensitive changes (billing, ownership) for Owners.
# Members & Invitations
Source: https://docs.triform.ai/orgs/members
View, invite, manage roles, and cautions
## View members
* Profile โ Organization โ View to see current members and roles.
## Invite users
* From the Organization view, Invite by email or provider identity.
* Assign a role (Member, Admin, or Owner transfer when appropriate).
## Manage roles
* Promote/demote users as responsibilities change.
* Remove users who no longer require access.
> warning: Owner transfers โ Transferring ownership grants full control, including billing and user removal. Proceed carefully.
# Roles & Permissions
Source: https://docs.triform.ai/orgs/roles-permissions
Owner, Admin, Member and guidance
Each user in an Organization has one of three roles.
| Role | Permissions |
| ---------- | ----------------------------------------------------------------- |
| **Owner** | Full access, including billing, GitHub linking, and user removal. |
| **Admin** | Manage Nodes, Projects, and users (except removing Owners). |
| **Member** | Create/edit/run Nodes; cannot manage users or billing. |
## Guidance
* Keep the number of Owners small.
* Promote trusted Members to Admin for dayโtoโday management.
* Review roles quarterly.
> tip: Principle of least privilege โ Grant only the access required to perform the job effectively.
# Quotas
Source: https://docs.triform.ai/quotas
Operational limits, enforcement, and design strategies
Quotas define the operational boundaries of your Organization, Projects, and components. They provide predictability, fairness, and safety.
## Quota Categories
### Execution-Based (Organization)
| Dimension | Description | When Exceeded |
| ------------------------- | --------------------------- | --------------------------------- |
| **Total Executions** | Runs per rolling window | New runs rejected until reset |
| **Concurrent Executions** | Max simultaneous runs | Runs queue or fail fast |
| **Max Duration** | Upper bound per run | Run terminated at limit |
| **Flow Depth** | Sequential node steps | Validation error before execution |
| **Recursion Depth** | Nested calls (Flows/Agents) | Triggering call blocked |
### Resource-Based
| Dimension | Description | When Exceeded |
| ------------------- | --------------------------- | ------------------------------ |
| **Payload Size** | Max input/output size | Validation error or truncation |
| **Script Size** | `Action.py` footprint | Build fails |
| **Stored Payloads** | Saved examples per Node | Cannot save until pruned |
| **Module Size** | Package size & dependencies | Publish fails |
### API & Integrations
| Dimension | Description | When Exceeded |
| ------------------------ | --------------------------------- | ---------------------------- |
| **Request Rate** | Requests per second/minute | HTTP 429, retry with backoff |
| **Endpoint Concurrency** | In-flight requests per endpoint | Requests queue or fail |
| **Schedule Frequency** | Minimum interval between triggers | Skipped or delayed ticks |
| **Build/Publish Rate** | Operations per window | Publishes deferred/rejected |
### Account-Specific
| Dimension | Description | When Exceeded |
| ---------------------- | -------------------------- | ------------------------- |
| **Environments** | Named environments per Org | Cannot create more |
| **Variables/Secrets** | Entries per environment | New entries rejected |
| **Alerts/Evaluations** | Rules per Project | Cannot add until archived |
## How Limits Are Enforced
* **Hard limits:** Requests rejected (HTTP 429 or validation error)
* **Soft limits:** Warnings issued, usage reduction encouraged
* **Windows:** Rolling counters reset after defined time periods
## Monitoring Your Usage
* Review execution history and metrics for run counts and durations
* Check project surfaces (APIs/Schedules) for request rates
* Create a dashboard Flow to periodically snapshot usage
## When You Hit a Limit
1. **Backoff and retry** โ Use exponential backoff for rate-limit errors
2. **Reduce payload sizes** โ Split work into smaller batches
3. **Parallelize smaller items** โ Fan-out with smaller payloads
4. **Upgrade your plan** โ If sustained traffic requires more capacity
## Design Strategies
> **Batch & Bound** โ Break large inputs into lists; toggle Parallel on consumer Nodes
> **Short-circuit** โ Validate inputs early and exit fast on no-op paths
> **Compose shallow** โ Use sub-Flows for reuse but keep run paths short
> **Time-box** โ Use conservative duration expectations; handle partial progress
> **Design for headroom** โ Target 70-80% of limits under peak load
## Good Hygiene
* Review Variables quarterly; remove dead flags and stale endpoints
* Keep secrets in secure storage; reference them, don't duplicate
* Tag Projects and Nodes with owners for quota notifications
* Use consistent naming (`SERVICE__ENV__KEY`) for Variables
> warning: Binary dependencies โ Only pure-Python packages are supported. Packages requiring binary installs are not available.
# Roadmap
Source: https://docs.triform.ai/roadmap
Upcoming features and planned capabilities
This page outlines features we're actively building or planning. Timelines are estimates and may change.
## In Progress
### Monitoring & Observability
**Target:** Q1 2026
Core observability infrastructure for understanding system behavior:
* **Logs** โ Structured runtime messages with contextual fields (Node, Project, Execution)
* **Traces** โ Step-by-step paths with timing across Nodes
* **Metrics** โ Quantitative indicators (counts, durations, error rates)
**How you'll use it:**
* Inspect Executions to see logs and trace waterfalls
* Drill from an erroring Node into its Action context
* Compare metrics across Deploys to validate improvements
**Current focus:**
* Consistent event schemas across Actions/Flows
* Lightweight log ingestion with contextual fields
* Trace propagation through Agent tool calls
> tip: Log with intent โ Emit concise, structured logs that capture what happened and why.
***
## Planned
### Chat Client
**Target:** Q2 2026
A customizable, embeddable chat widget connecting end-users directly to your Triform Agents.
**Key features:**
* Single-line JavaScript integration
* Customizable styling and branding
* Rich media support (images, code, forms)
* Built-in rate limiting and content filtering
* Mobile SDKs (iOS, Android, React Native, Flutter)
**Use cases:** Customer support bots, product assistants, internal tools, e-commerce
***
### Alerts
**Target:** Q2 2026
Proactive notifications when critical conditions occur.
**Capabilities:**
* Define rules on logs, metrics, or evaluation scores
* Send to email, chat, and webhooks
* Group, dedupe, and throttle noisy signals
* Link alerts to remediation runbooks
**Example rules:**
* Error rate exceeds N% over M minutes
* Evaluation score falls below threshold for k runs
* Latency p95 exceeds T ms after deploy
***
### Persistent Storage
**Target:** Q3 2026
Managed storage for state that persists across executions.
**Use cases:**
* Session state for multi-turn conversations
* Caching expensive computations
* Storing user preferences
* Accumulating data across runs
***
### Evaluations
**Target:** Q3 2026
Automated quality assessment for AI outputs.
**Capabilities:**
* Define evaluation criteria and scoring rubrics
* Run evaluations on historical executions
* Track quality trends over time
* Set thresholds that trigger alerts
***
### Community Library
**Target:** Q4 2026
Shared repository of reusable components.
**Features:**
* Browse and search community contributions
* One-click import into your Projects
* Version management and updates
* Rating and review system
***
### Advanced Logging & Metrics
**Target:** Q4 2026
Extended observability capabilities.
**Logging:**
* Structured logging with log levels
* Advanced search and filtering
* Log streaming (real-time tail)
* External integrations (Datadog, Splunk, CloudWatch)
**Metrics:**
* Custom metric definitions (counters, gauges, histograms)
* Custom dashboards with drag-and-drop widgets
* Metric-based alerting
* External export (Prometheus, Graphite)
***
### Traces (Advanced)
**Target:** Q4 2026
Enhanced execution tracing and analysis.
**Capabilities:**
* Distributed tracing with span details
* LLM-specific tracing (prompts, tool calls, token usage)
* Cost attribution per span
* OpenTelemetry export (Jaeger, Zipkin)
* Flamegraph visualization
***
### Schedules (Enhanced)
**Target:** 2027
Advanced scheduling capabilities.
**Features:**
* Complex cron expressions
* Timezone-aware scheduling
* Schedule dependencies
* Pause and resume schedules
* Schedule versioning
***
## Get Notified
Want early access to any feature?
* **Discord:** [discord.gg/triform](https://discord.gg/triform) โ Join #feature-requests
* **Email:** [product@triform.ai](mailto:product@triform.ai)
Your feedback shapes our priorities. Let us know what matters most to you!
# Compliance
Source: https://docs.triform.ai/security/compliance
Standards, certifications, and regulatory compliance
## Overview
Triform is committed to meeting industry standards and regulatory requirements to protect your data and ensure service reliability.
## Current compliance status
### GDPR (General Data Protection Regulation)
**Status:** โ
Compliant
**Scope:** All users in the European Union
**Key practices:**
* Lawful basis for processing (contract, consent, legitimate interest)
* Data minimization (collect only what's needed)
* Purpose limitation (use data only for stated purposes)
* Storage limitation (retain only as long as necessary)
* Security measures (encryption, access control)
* Data subject rights (access, deletion, portability)
* Cross-border transfer safeguards (Standard Contractual Clauses)
**Your rights under GDPR:**
* **Right to access** โ Request a copy of your data
* **Right to rectification** โ Correct inaccurate data
* **Right to erasure** โ "Right to be forgotten"
* **Right to portability** โ Export your data
* **Right to object** โ Object to certain processing
* **Right to restrict** โ Limit how we use your data
**Exercise rights:** Account Settings โ Privacy or email [privacy@triform.ai](mailto:privacy@triform.ai)
**DPO contact:** [dpo@triform.ai](mailto:dpo@triform.ai)
### CCPA (California Consumer Privacy Act)
**Status:** โ
Compliant
**Scope:** California residents
**Key practices:**
* Disclosure of data collection and use
* Opt-out of data "sales" (we don't sell data)
* Do Not Sell My Personal Information
* Equal service regardless of privacy choices
* Access and deletion rights
**Your rights under CCPA:**
* **Right to know** โ What data we collect and how it's used
* **Right to delete** โ Request deletion of your data
* **Right to opt-out** โ Opt out of "sales" (not applicableโwe don't sell)
* **Right to non-discrimination** โ Equal service regardless
**Exercise rights:** Email [privacy@triform.ai](mailto:privacy@triform.ai)
**Verification:** We'll verify your identity before fulfilling requests
### SOC 2 Type II
**Status:** ๐ก Planned (2026)
**Scope:** Trust Services Criteria
**Framework:**
* **Security** โ Protection against unauthorized access
* **Availability** โ Service uptime and reliability
* **Processing integrity** โ Complete, accurate, timely processing
* **Confidentiality** โ Protection of confidential information
* **Privacy** โ Collection, use, retention, disclosure aligned with commitments
**What this means:**
* Independent audit of our security controls
* Verification of implementation over time (6-12 months)
* Report available to customers upon request (when complete)
### ISO 27001
**Status:** ๐ก Planned (2026)
**Scope:** Information Security Management System (ISMS)
**Framework:**
* Risk assessment and treatment
* Security policies and procedures
* Asset management
* Access control
* Cryptography
* Physical and environmental security
* Operations security
* Communications security
* Supplier relationships
* Incident management
* Business continuity
* Compliance
**What this means:**
* International standard for information security
* Comprehensive security management
* Regular audits and continuous improvement
## Data protection measures
### Technical controls
**Encryption:**
* AES-256 at rest
* TLS 1.2+ in transit
* Encrypted backups
**Access control:**
* Role-based access (RBAC)
* Session management
* IP allowlisting (Enterprise)
**Network security:**
* Firewalls and network segmentation
* DDoS protection
* Intrusion detection
* Vulnerability scanning
**Code execution:**
* Sandboxed environments
* Resource limits
* Dependency scanning
* Static analysis
### Organizational controls
**Policies:**
* Information security policy
* Data retention policy
* Incident response plan
* Business continuity plan
**Vendor management:**
* Security questionnaires
* Contract reviews
* Regular assessments
**Physical security:**
* Data centers with 24/7 security
* Biometric access controls
* Video surveillance
* Environmental controls
## Sub-processors
We use trusted third-party services:
### Infrastructure
**Scaleway**
* **Service:** Cloud infrastructure
* **Data processed:** All customer data
* **Location:** France, EU/APAC
* **Compliance:** SOC 2, ISO 27001, GDPR, many others
* **DPA:** Standard Contractual Clauses
**6G AI Sweden**
* **Service:** Inference
* **Data processed:** Data sent through Agents
* **Location:** Sweden
* **Compliance:** SOC 2, ISO 27001, GDPR
* **DPA:** Standard Contractual Clauses
### Payment processing
**Polar**
* **Service:** Payment processing, Record of Merchant
* **Data processed:** Payment methods, billing info
* **Location:** Sweden
* **Compliance:** PCI DSS Level 1, SOC 2, ISO 27001, GDPR
* **DPA:** Standard Contractual Clauses
**Full list:** Available upon request to [compliance@triform.ai](mailto:compliance@triform.ai)
## Data Processing Agreement (DPA)
For GDPR and other regulations, we offer a Data Processing Agreement.
**What's included:**
* Roles and responsibilities (controller vs. processor)
* Data processing terms
* Security measures
* Sub-processor list
* Data breach notification procedures
* Audit rights
* Data deletion procedures
* Standard Contractual Clauses (for EU transfers)
**How to request:**
1. Email [compliance@triform.ai](mailto:compliance@triform.ai)
2. Provide Organization name and contact
3. We'll send DPA for review
4. Both parties sign
5. DPA effective upon execution
**Available to:** All Pro and Enterprise customers
## Audits and certifications
### Internal audits
* Quarterly security reviews
* Annual risk assessments
* Continuous penetration testing
* Code security reviews
* Access reviews
### External audits
* SOC 2 audit (planned)
* ISO 27001 (planned)
* Penetration tests (annual)
* Third-party security assessments
### Bug bounty program
**Status:** Coming soon (2026)
**Scope:** Responsible disclosure program
**Details:** Will be announced on our security page
## Regulatory response
### Data breach notification
**EU (GDPR):** Within 72 hours to supervisory authority, without undue delay to affected individuals
**California (CCPA):** Without unreasonable delay
**Other jurisdictions:** Per applicable law
**Our commitment:**
* Investigate thoroughly
* Notify promptly
* Provide clear information
* Assist with mitigation
## Industry-specific guidance
### Healthcare
**If you're in healthcare:**
* Use de-identified or anonymized data
* Implement additional access controls
* Document your compliance approach
### Financial services
**If you're in finance:**
* Use encryption (automatic)
* Enable audit logging (automatic)
* Implement access reviews
* Document your data flows
### Education
**If you're in education:**
* Minimize student data collection
* Use access controls (automatic)
* Review who has access regularly
* Implement data retention policies
### Government
**If you're in government:**
* Document security practices
* Consider on-premises options (contact sales)
## Requesting compliance documentation
**What's available:**
* Security whitepaper
* DPA (Data Processing Agreement)
* Sub-processor list
* SOC 2 report (when complete)
* Custom security questionnaires
**How to request:**
1. Email [compliance@triform.ai](mailto:compliance@triform.ai)
2. Specify what you need
3. Provide Organization name
4. Include your contact information
**NDA required for:** SOC 2 reports, detailed security architecture
**Response time:** 5 business days
## Attestations
We can provide attestations for:
* Data encryption practices
* Access control measures
* Backup and recovery procedures
* Incident response capabilities
* Business continuity planning
**Contact:** [compliance@triform.ai](mailto:compliance@triform.ai)
## FAQs
**Q: Where is my data stored?**\
A: EU by default. EU and APAC options for Enterprise.
**Q: Do you sell my data?**\
A: No, we never sell customer data.
**Q: Do you support on-premises deployment?**\
A: Contact sales for availability.
## Contact
**Compliance inquiries:** [compliance@triform.ai](mailto:compliance@triform.ai)\
**Privacy questions:** [privacy@triform.ai](mailto:privacy@triform.ai)\
**Security concerns:** [security@triform.ai](mailto:security@triform.ai)\
**DPO (Data Protection Officer):** [dpo@triform.ai](mailto:dpo@triform.ai)
**Response time:** 5 business days for compliance requests
## Related
Continue exploring the security documentation to learn about security overview, data retention, and compliance measures.
# Data Retention
Source: https://docs.triform.ai/security/data-retention
How long we store your data and how to manage it
## Overview
Triform retains different types of data for varying periods based on product functionality, legal requirements, and user preferences.
## Retention periods
### Project data
**What:** Projects, Actions, Agents, Flows, code, configurations
**Retention:** Indefinite while Project is active
**After deletion:** 30-day soft delete, then permanent
**Purpose:** Core product functionality
**User control:** Delete Projects anytime
### Execution data
**What:** Execution records, inputs, outputs, logs, traces
| Tier | Retention |
| ---------- | ----------------- |
| Free | 7 days |
| Pro | 30 days |
| Enterprise | 90 days or custom |
**After period:** Execution details deleted, summary statistics retained
**Purpose:** Debugging, monitoring, compliance
**User control:** Export before deletion, star important executions for longer retention
### Project Variables
**What:** Configuration values, secrets, API keys
**Retention:** Indefinite while active
**After deletion:** Immediate permanent deletion (no soft delete)
**Purpose:** Application configuration
**User control:** Delete Variables anytime
**Note:** Secrets deleted from our systems within 24 hours (key rotation cycle)
### API keys
**What:** API key metadata (not the secret itself)
**Retention:** Active until revoked or expired
**After revocation:** 90 days for audit purposes
**Purpose:** Authentication, audit trails
**User control:** Revoke anytime
**Note:** The secret key itself is hashed and cannot be recovered
### Audit logs
**What:** Security events, access logs, changes
**Retention:** 90 days (standard), 1+ year (Enterprise)
**Purpose:** Security, compliance, debugging
**User control:** Export anytime
**Compliance:** May be required longer for regulated industries
### User data
**What:** Account info, profile, email, preferences
**Retention:** While account is active
**After deletion:** 30-day soft delete, then permanent
**Purpose:** Account management, communication
**User control:** Delete account anytime
### Payment data
**What:** Billing history, invoices, payment methods
**Retention:** 7 years
**Purpose:** Legal/tax requirements, dispute resolution
**User control:** Cannot be deleted (legal obligation)
**Note:** We don't store full credit card numbers (tokenized via payment processor)
### Analytics data
**What:** Aggregated usage statistics, performance metrics
**Retention:** 2 years
**Purpose:** Product improvement, capacity planning
**User control:** Anonymized, cannot be deleted
**Note:** No personally identifiable information
## Soft deletion
Some data types use soft deletion for recovery.
### How it works
1. **Mark as deleted** โ Data hidden from UI and API
2. **Grace period** โ 30 days to recover
3. **Permanent deletion** โ After grace period
### What uses soft deletion
โ
**Projects** โ 30-day recovery window\
โ
**User accounts** โ 30-day recovery window\
โ **Project Variables** โ Immediate deletion (security)\
โ **API keys** โ Immediate revocation\
โ **Executions** โ Immediate deletion after retention period
### Recovery process
**Within grace period:**
1. Contact [support@triform.ai](mailto:support@triform.ai)
2. Provide Project/account ID
3. Confirm identity
4. We'll restore within 24 hours
**After grace period:** Cannot be recovered
## Data minimization
We collect and retain only what's necessary.
### What we collect
โ
**Necessary for service:**
* Project code and config
* Execution data for debugging and AI model training (only free community version)
* Account info for authentication
* Billing info for payments
โ **Not collected:**
* Personal data beyond account basics
* Tracking cookies (beyond essential)
* Browsing history outside Triform
* Third-party service credentials (unless you provide in Project Variables)
### Anonymization
**Analytics and training data** is anonymized:
* User IDs replaced with random identifiers
* IP addresses hashed
* Names and emails removed
* Aggregated only (no individual tracking)
## Geographic data storage
### Data residency
**Standard:** EU-based data centers
**Data localization:** Customer data stays in EU.
### Data transfer
**Within region:** No cross-border transfer
**GDPR compliance:** Data stored in EU
## Deletion procedures
### Deleting Projects
1. Project menu โ **Delete**
2. Confirm by typing Project name
3. Project soft-deleted
4. 30-day recovery window
5. Permanent deletion after
**What happens:**
* Project removed from UI
* Executions deleted per retention policy
* Audit logs retained
### Deleting account
1. Account Settings โ Privacy โ **Delete Account**
2. Confirm by typing email
3. Account soft-deleted
4. 30-day recovery window
5. Permanent deletion after
**What happens:**
* Account deactivated immediately
* Projects you own deleted (after grace period)
* Shared Projects remain (your access removed)
* Payment history retained (legal requirement)
* Audit logs retained (90 days)
### Deleting Organization
1. Organization Settings โ **Delete Organization**
2. Requires Admin role
3. Confirm by typing Organization name
4. All Projects deleted
5. All members removed
6. Billing canceled
**Cannot delete if:**
* You're not the last Admin (transfer ownership first)
* Active subscription (cancel first)
* Recent executions (wait for retention period)
## Data breach procedures
If a data breach occurs:
### Our response
**Within 72 hours:**
1. Identify scope and affected data
2. Contain the breach
3. Notify affected users
4. File regulatory reports (if required)
**Notification includes:**
* What data was affected
* How many users/records
* What we've done to fix it
* What you should do (e.g., rotate keys)
### User actions
**If notified of a breach:**
1. **Rotate API keys** immediately
2. **Update Project Variables** (especially secrets)
3. **Review audit logs** for suspicious activity
4. **Enable 2FA** if not already
5. **Monitor for unusual activity**
## Compliance
### GDPR (EU)
**Rights you have:**
* **Access:** Request copy of your data
* **Rectification:** Correct inaccurate data
* **Erasure:** "Right to be forgotten"
* **Portability:** Export in machine-readable format
* **Object:** Object to processing
**Exercise rights:** Account Settings โ Privacy or email [privacy@triform.ai](mailto:privacy@triform.ai)
### Other regulations
We comply with applicable data protection laws in EU.
## FAQs
**Q: Can I extend execution retention?**\
A: Enterprise plans offer custom retention. Contact sales.
**Q: What happens to my data if Triform shuts down?**\
A: We'll provide at least 90 days notice and export tools.
**Q: Are backups deleted too?**\
A: Yes, backups are deleted per the same schedule.
**Q: Can I request early deletion?**\
A: Yes, contact support for manual deletion requests.
**Q: Is deleted data truly unrecoverable?**\
A: After permanent deletion, yes. We use secure deletion methods.
## Contact
**Data requests:** [privacy@triform.ai](mailto:privacy@triform.ai)\
**Security concerns:** [security@triform.ai](mailto:security@triform.ai)\
**General support:** [support@triform.ai](mailto:support@triform.ai)
**Response time:** 5 business days for data requests, 24 hours for security issues
## Related
Continue exploring the security documentation to learn about compliance and data protection measures.
# Security Overview
Source: https://docs.triform.ai/security/overview
How Triform protects your data and systems
## Our commitment to security
Security is fundamental to Triform. We implement industry-standard practices to protect your Projects, data, and credentials.
## Data encryption
### At rest
All data stored in Triform is encrypted using **AES-256** encryption.
**Encrypted data includes:**
* Project code and configurations
* Execution logs and traces
* Project Variables
* API keys
* User information
* **OAuth credentials and tokens** โ Securely encrypted using Scaleway KMS
**Key management:** Encryption keys are managed using industry-standard key management services (Scaleway KMS), rotated regularly, and never stored alongside encrypted data.
### OAuth credential encryption
**Scaleway KMS Integration:**
* Dedicated key management service for OAuth tokens
* End-to-end encryption for third-party credentials
* Automatic key rotation support
* Secure encryption/decryption for token refresh
* Organization-specific encryption keys created on signup
### In transit
All communication with Triform uses **TLS 1.2+** encryption.
**Encrypted connections:**
* Web interface (HTTPS)
* API requests (HTTPS)
* Webhook callbacks (HTTPS)
* Database connections (encrypted)
* Internal service communication (mutual TLS)
**Certificate management:** We use trusted Certificate Authorities and monitor certificate expiration.
## Authentication
### Supported methods
**OAuth 2.0 providers:**
* Discord
* GitHub
* Google
* Microsoft
**Email:** Passwordless email authentication
**Benefits:**
* No password management burden
* Leverage provider security (2FA, etc.)
* Single sign-on capabilities
* Secure token refresh mechanisms
### Session management
**Security features:**
* Sessions expire after inactivity
* IP address validation (optional)
* Device fingerprinting
* Concurrent session limits
**User controls:**
* View active sessions
* Revoke individual sessions
* Revoke all sessions (sign out everywhere)
### Two-factor authentication (2FA)
**Strongly recommended for:**
* Organization Admins
* Users with deployment permissions
* Users handling sensitive Projects
**Supported methods:**
* Authenticator apps (TOTP)
* SMS (where available)
* Backup codes
**Enforcement:** Organization Admins can require 2FA for all members.
## Authorization
### Role-based access control (RBAC)
**Organization roles:**
* **Admin** โ Full access
* **Editor** โ Create, edit, execute
* **Viewer** โ Read-only
**Project-level permissions:**
* Fine-grained per-Project overrides
* Specific user grants
* Temporary access grants
### API key security
**Best practices enforced:**
* Keys are hashed in storage (irreversible)
* Keys shown only once upon creation
* Keys can be scoped to specific Projects
* Keys can be restricted by permissions
* Keys can expire automatically
* Key usage is logged
**User responsibilities:**
* Store keys securely (environment variables, secret managers)
* Rotate keys regularly (90-day recommendation)
* Revoke unused keys
* Never commit to version control
### OAuth token security
**Enterprise-grade OAuth 2.0 implementation:**
* **Secure credential storage** โ All OAuth tokens encrypted with Scaleway KMS
* **Automatic token refresh** โ Transparent refresh of expired tokens
* **Scope-based permissions** โ Fine-grained control over API access
* **Multi-provider support** โ Google, Microsoft, GitHub, GitLab, Slack, Linear, Notion, and more
* **Memcache layer** โ High-performance caching with TTL management
* **Provider-agnostic architecture** โ Consistent security across all OAuth providers
**Token lifecycle management:**
* Tokens encrypted at rest using KMS
* Secure token injection during action execution
* Automatic refresh before expiration
* Proper cleanup on revocation
* Real-time token status via WebSocket
## Network security
### API security
**Protection mechanisms:**
* Rate limiting (prevents abuse)
* DDoS mitigation
* Input validation and sanitization
**Monitoring:**
* Anomaly detection
* Suspicious activity alerts
* Failed authentication tracking
### Webhook security
**Verification options:**
* API key authentication
**Replay attack prevention:**
* Timestamp validation
* Nonce tracking
* Request idempotency
## Code execution security
### Sandboxed execution
Actions run in isolated environments:
**Isolation features:**
* Separate containers per execution
* No persistent file system
* Limited network access
* Resource quotas (CPU, memory, time)
* No access to Triform internals
**What Actions CANNOT do:**
* Access other users' data
* Modify Triform infrastructure
* Persist data between executions (unless using provided storage)
* Execute arbitrary system commands
* Fork processes or spawn daemons
### Dependency security
**Automated scanning:**
* Check for known vulnerabilities in dependencies
* Alert on critical CVEs
* Suggest updates for vulnerable packages
**User responsibilities:**
* Keep dependencies updated
* Review security advisories
* Avoid deprecated packages
* Audit third-party packages
### Code review
**Recommended for sensitive Projects:**
* Peer review before deployment
* Automated security scanning
* Manual audit of high-risk components
## Vulnerability management
### Responsible disclosure
Found a security issue? We appreciate responsible disclosure.
**Reporting:**
* Email: [security@triform.ai](mailto:security@triform.ai)
* Include detailed description
* Steps to reproduce (if applicable)
* Potential impact assessment
**Our commitment:**
* Acknowledge within 24 hours
* Triage and investigate promptly
* Keep you informed of progress
* Credit you in our security updates (unless anonymous)
**Please don't:**
* Publicly disclose before we've patched
* Exploit the vulnerability
* Access other users' data
### Security updates
**Communication:**
* Critical issues: Email all users immediately
* High severity: Status page + email within 24 hours
* Medium/low: Included in regular updates
**Patching:**
* Critical vulnerabilities: Emergency patch within hours
* High severity: Patch within 7 days
* Medium/low: Patch in next regular release
## Infrastructure monitoring
### Enhanced observability
Recent infrastructure improvements provide better security monitoring:
* **Kubernetes Promtail** โ Comprehensive log aggregation with label extraction and pipeline processing
* **Secure credential management** โ 1Password integration for automated, secure environment variable handling
* **Better deployment security** โ Automated dependency checks and secure secrets management
These improvements enhance our ability to detect, investigate, and respond to security events in real-time.
## Incident response
### Detection
**Monitoring systems:**
* Failed authentication attempts
* Unusual API usage patterns
* Data exfiltration attempts
* Privilege escalation attempts
* **Real-time log aggregation** โ Kubernetes-based monitoring for immediate anomaly detection
**Alerts trigger:** Automated response + human investigation
### Response process
1. **Detect & triage** โ Identify and assess severity
2. **Contain** โ Limit impact, isolate affected systems
3. **Investigate** โ Determine root cause and scope
4. **Remediate** โ Fix vulnerability, restore service
5. **Communicate** โ Inform affected users
6. **Learn** โ Post-mortem, improve processes
### User notification
**We notify if:**
* Data breach occurs
* Unauthorized access detected
* Service compromise affects your Projects
**Notification includes:**
* What happened
* What data was affected
* What we've done
* What you should do
## User security responsibilities
### Account security
> **Use strong passwords** โ If using email authentication
> **Monitor sessions** โ Review and revoke suspicious sessions
> **Keep email secure** โ Your account recovery method
### API key security
> **Never commit keys to git** โ Use environment variables
> **Rotate keys regularly** โ Every 90 days recommended
> **Scope keys minimally** โ Only grant needed permissions
> **Revoke unused keys** โ Reduce attack surface
### Code security
> **Validate inputs** โ Don't trust external data
> **Sanitize outputs** โ Prevent injection attacks
> **Review dependencies** โ Check for vulnerabilities
> **Keep secrets in Project Variables** โ Never hardcode
### Organization security
> **Audit members regularly** โ Remove ex-employees
> **Follow least privilege** โ Grant minimum necessary permissions
## Security features roadmap
**Coming soon:**
* SSO/SAML support (Enterprise)
* Advanced threat detection
* Custom security policies
* Bring Your Own Key (BYOK) encryption
* Enhanced audit logging
* Security compliance dashboards
## Security resources
### Contact
**Security issues:** [security@triform.ai](mailto:security@triform.ai)\
**General support:** Join our [Discord community](https://discord.gg/triform)
### External resources
* [OWASP Top 10](https://owasp.org/Top10/)
* [Cloud Security Alliance](https://cloudsecurityalliance.org/)
* [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
## Questions?
If you have security questions or concerns:
1. Review the security documentation
2. Contact [security@triform.ai](mailto:security@triform.ai)
3. For Enterprise, contact your account manager
# Support
Source: https://docs.triform.ai/support
Get help with Triform
## Quick Help
**Before contacting support:**
1. **Search docs** โ Press `Cmd+K` / `Ctrl+K` to search
2. **Ask Triton** โ Chat with the AI assistant in Builder workspace
3. **Check Discord** โ Search for similar questions in [discord.gg/triform](https://discord.gg/triform)
4. **Review logs** โ Check execution details in Properties โ Executions
## Support Channels
### Community Discord
**Best for:** Quick questions, community help, sharing ideas
* **Server:** [discord.gg/triform](https://discord.gg/triform)
* **Response:** Usually \< 1 hour during business hours
* **Channels:** `#help`, `#general`, `#showcase`, `#feature-requests`, `#bugs`
### Enterprise Support
**For:** Pro and Enterprise customers
* Dedicated Discord channel
* Phone and video support
* Custom onboarding
* 99.9% uptime SLA
**Contact:** Your account manager or [enterprise@triform.ai](mailto:enterprise@triform.ai)
## Common Issues
### Can't log in
1. Allow popups for `app.triform.ai`
2. Try incognito mode or clear cookies
3. Check OAuth provider status (Discord, GitHub)
4. For 2FA issues, resolve with your provider first
### Execution failing
1. Check logs in Properties โ Executions
2. Verify input payload matches schema
3. Test each component individually
4. Confirm Project Variables are set
5. Ask Triton: *"Why did execution #\[ID] fail?"*
### Deployment not working
1. Verify all components are configured and tested
2. Check Project Variables for production
3. Confirm API key has deployment permissions
4. Check for circular dependencies
### API requests failing
1. Verify API key is correct and active
2. Use header format: `Authorization: YOUR_KEY`
3. Set `Content-Type: application/json`
4. Confirm payload matches input schema
5. Check rate limits
## Reporting Issues
### Bugs
**Report via:** Bug icon in app, Discord `#bugs`, or [support@triform.ai](mailto:support@triform.ai)
**Include:**
* What you were doing
* What you expected vs. what happened
* Steps to reproduce
* Screenshots (if helpful)
### Security Issues
**Report to:** [security@triform.ai](mailto:security@triform.ai)
**Do NOT** post publicly or exploit the vulnerability.
We acknowledge within 24 hours and reward responsible disclosure.
## Contact
| Purpose | Contact |
| --------------- | ------------------------------------------------- |
| General support | [Discord](https://discord.gg/triform) `#help` |
| Sales & pricing | [sales@triform.ai](mailto:sales@triform.ai) |
| Partnerships | [sales@triform.ai](mailto:sales@triform.ai) |
| Press & media | [press@triform.ai](mailto:press@triform.ai) |
| Security | [security@triform.ai](mailto:security@triform.ai) |
**Office:** Gรถtgatan 23, 116 30 Stockholm, Sweden
**Hours:** Monday-Friday, 9 AM - 6 PM CET
## Social
* **Twitter/X:** [@triformai](https://x.com/triformai)
* **LinkedIn:** [linkedin.com/company/triformai](https://linkedin.com/company/triformai)
* **Discord:** [discord.gg/triform](https://discord.gg/triform)
# Building with Triton
Source: https://docs.triform.ai/triton/building
Create Projects, Agents, Flows, and Actions through conversation
## Overview
Once you've defined your Project description (and possibly requirements), Triton can build it for you. This guide covers how to effectively use Triton to generate components, connect them, and get a working system.
## Building Actions
Actions are Python functions that do specific tasks.
### Basic Action creation
**You:** *"Create an Action that fetches data from a REST API"*
**Triton generates:**
* `Action.py` with:
* Function signature
* Type hints
* Error handling
* Documentation
* Input/output schema
* `requirements.txt` with dependencies
**Example output:**
```python theme={null}
import requests
from typing import Dict, Any
import logging
logger = logging.getLogger(__name__)
def fetch_data(url: str, headers: Dict[str, str] = None) -> Dict[str, Any]:
"""
Fetches data from a REST API endpoint.
Args:
url: The API endpoint URL
headers: Optional HTTP headers
Returns:
JSON response as dictionary
Raises:
requests.exceptions.RequestException: If the request fails
"""
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
logger.error(f"Timeout fetching {url}")
raise
except requests.exceptions.RequestException as e:
logger.error(f"Error fetching {url}: {e}")
raise
```
### Action with specific requirements
**You:** *"Create an Action that validates email addresses using a regex and checks against our blocklist in Project Variables"*
**Triton:**
* Generates regex pattern
* Adds Global Variable reference
* Includes validation logic
* Tests it
### Action with API integration
**You:** *"Create an Action that integrates with the Stripe API"*
**Triton:**
* Uses the **Knowledge Store** to research API documentation and best practices
* Generates proper API authentication code
* Creates comprehensive testing flows
* Handles errors and edge cases
* Caches API research for future reference
The Knowledge Store system enables Triton to:
* Research external APIs intelligently
* Store and retrieve API integration patterns
* Generate better code with real-world API understanding
* Test API integrations comprehensively
### Action with OAuth integration
**You:** *"Create an Action that sends emails via Gmail"*
**Triton:**
1. Generates the action code with OAuth token access
2. Uses `get_oauth_token('google')` for authentication
3. Implements Gmail API calls with proper error handling
4. Prompts you to configure OAuth modifier for Google
**Generated code includes:**
```python theme={null}
from triform import get_oauth_token
import requests
def send_gmail(to: str, subject: str, body: str) -> dict:
"""Send email via Gmail API using OAuth"""
token = get_oauth_token('google')
# Gmail API implementation
response = requests.post(
'https://gmail.googleapis.com/gmail/v1/users/me/messages/send',
headers={'Authorization': f'Bearer {token.access_token}'},
json={...}
)
return response.json()
```
**Triton automatically:**
* Knows which OAuth providers are available (Google, Slack, GitHub, etc.)
* Generates proper token access patterns
* Handles token refresh transparently
* Includes error handling for OAuth failures
* Prompts you to configure the OAuth modifier before execution
### Data transformation Action
**You:** *"Create an Action that takes a list of user objects and returns just their email addresses"*
**Triton generates:**
```python theme={null}
from typing import List, Dict
def extract_emails(users: List[Dict]) -> List[str]:
"""
Extracts email addresses from a list of user objects.
Args:
users: List of user dictionaries with 'email' key
Returns:
List of email addresses
"""
emails = []
for user in users:
if 'email' in user and user['email']:
emails.append(user['email'])
return emails
```
### Action with loops
**You:** *"Create an Action that processes a batch of orders with retry logic"*
**Triton generates:**
* Action with **for loop** to iterate over orders
* **While loop** for retry logic with exponential backoff
* Proper loop state management
* Error handling for individual items
Actions now support full loop constructs (for/while) for batch processing and iterative operations.
## Building Agents
Agents are LLM-powered components with prompts and tools.
### Simple Agent
**You:** *"Create an Agent that summarizes text"*
**Triton creates:**
* System prompt:
```
You are a summarization expert. Given text input, create a concise
summary that captures the key points. Keep summaries under 200 words.
Use clear, professional language.
```
* Input schema: `{ "text": "string" }`
* Output schema: `{ "summary": "string" }`
* Model: GPT-4 (default)
### Agent with tools
**You:** *"Create an Agent that answers questions about our product catalog using a search Action"*
**Triton:**
1. First checks if `search_catalog` Action exists
2. If not, asks: *"Should I create the search\_catalog Action first?"*
3. Creates the Action
4. Creates the Agent with:
* System prompt mentioning available tools
* Tools configuration including `search_catalog`
* Examples of tool usage
**System prompt:**
```
You are a product expert helping customers find information about our catalog.
Available tools:
- search_catalog: Search products by keyword, category, or ID
When a customer asks about products:
1. Use search_catalog to find relevant products
2. Present the information clearly
3. Suggest related products if appropriate
Always be helpful and accurate. If you can't find something, say so clearly.
```
### Decision-making Agent
**You:** *"Create an Agent that triages support tickets into urgent/normal/low priority"*
**Triton creates:**
* Detailed system prompt with triage criteria
* Input schema: `{ "ticket": { "subject": "string", "body": "string", "user_tier": "string" } }`
* Output schema: `{ "priority": "enum", "reason": "string", "suggested_assignment": "string" }`
* Lower temperature (0.3) for consistent decisions
## Building Flows
Flows connect components into workflows.
### Linear Flow
**You:** *"Create a Flow that validates input, processes it, and returns results"*
**Triton creates:**
```
Input โ validate_input โ process_data โ format_output โ Output
```
Each node is properly connected with appropriate data mappings.
### Parallel processing Flow
**You:** *"Create a Flow that fetches data from 3 different sources simultaneously, then combines the results"*
**Triton creates:**
```
Input โ fetch_source_1 โ
โ fetch_source_2 โ combine_results โ Output
โ fetch_source_3 โ
```
Includes:
* Parallel execution of fetch Actions
* Combine node that waits for all inputs
* Proper error handling if any source fails
## Building complete Projects
Combine everything into a Project.
### End-to-end example
**You:** *"Build a complete Project for processing customer feedback: collect feedback, analyze sentiment, extract themes, generate report"*
**Triton creates:**
**1. Actions:**
* `validate_feedback` โ Check feedback format
* `store_feedback` โ Save to database
* `generate_report` โ Format results
**2. Agent:**
* `analyze_feedback` โ Sentiment analysis and theme extraction
**3. Main Flow:**
```
Input (feedback list)
โ validate_feedback (for each item)
โ store_feedback (batch)
โ analyze_feedback (Agent)
โ generate_report
โ Output (formatted report)
```
**4. Project node:**
* Exposes the main Flow as the Project entry point
* Configured with input/output schemas
* Ready to deploy
### Incremental building
You don't have to build everything at once:
**You:** *"Start a new Project called 'Email Processor'"*\
**Triton:** Creates empty Project
**You:** *"Add an Action to parse email headers"*\
**Triton:** Creates `parse_headers` Action
**You:** *"Add an Agent to classify emails"*\
**Triton:** Creates `classify_email` Agent
**You:** *"Connect them in a Flow"*\
**Triton:** Creates Flow linking parse\_headers โ classify\_email
**You:** *"Add error handling for malformed emails"*\
**Triton:** Adds validation Action and error routing
## Building with context
Triton understands your existing work.
### Building on existing components
**You:** *"Create a new Flow that uses my existing Actions: fetch\_data and process\_results"*
**Triton:**
* Scans your Project
* Finds both Actions
* Creates Flow with proper connections
* Uses correct input/output schemas
### Consistent naming and patterns
**You:** *"Add another Action similar to fetch\_user\_data but for products"*
**Triton:**
* Reviews `fetch_user_data` implementation
* Creates `fetch_product_data` with similar structure
* Maintains consistent error handling
* Uses same coding style
### Building variants
**You:** *"Create a version of this Agent that's more concise"*
**Triton:**
* Copies existing Agent
* Modifies system prompt for brevity
* Names it `{original_name}_concise`
* Keeps same tools and config
## Building best practices
> **Start with the core path** โ Build the main workflow first, add enhancements later
> **Test as you go** โ Use Execute panel to verify each component
> **Be specific about behavior** โ Tell Triton exactly what you want, including edge cases
> **Let Triton suggest** โ If unsure, ask "How should I structure this?"
> **Review generated code** โ Always check what Triton built before deploying
## Common building patterns
### Pattern: Extract-Transform-Load (ETL)
**You:** *"Build an ETL pipeline for customer data"*
**Triton creates:**
* Extract Action (API/database/file)
* Transform Agent/Action (cleanse, normalize)
* Load Action (destination)
* Flow connecting them with error handling
### Pattern: Request-Process-Notify
**You:** *"Build a workflow that takes requests, processes them, and notifies users"*
**Triton creates:**
* Validation Action
* Processing Agent/Flow
* Notification Action (email/webhook)
* Status tracking
### Pattern: Fan-out/Fan-in
**You:** *"Process 100 items in parallel, then aggregate results"*
**Triton creates:**
* Splitter (fan-out)
* Processing Action (parallel)
* Aggregator (fan-in)
* Flow with proper concurrency
### Pattern: Retry with backoff
**You:** *"Call this API with automatic retries"*
**Triton adds:**
* Retry decorator
* Exponential backoff
* Max attempts configuration
* Logging
## Troubleshooting building
### Problem: Triton doesn't understand the request
**Solution:** Break it down
* โ *"Build the whole system"*
* โ
*"First, create an Action that validates input"*
### Problem: Generated code doesn't match needs
**Solution:** Provide examples
* *"Create an Action like this: \[paste example]"*
* *"The output should look like: \[paste JSON]"*
### Problem: Components aren't connecting properly
**Solution:** Be explicit
* *"Connect the output of fetch\_data to the input of process\_data"*
* *"Map the 'results' field to 'data' in the next node"*
### Problem: Missing error handling
**Solution:** Ask for it
* *"Add try-catch to handle network failures"*
* *"What if the input is empty?"*
## Next steps
After building:
1. Test each component with Execute panel
2. Edit and refine as needed
3. Debug any issues
4. Deploy your Project
Continue exploring the Triton documentation to learn about defining Projects, editing components, and debugging.
# Defining Projects with Triton
Source: https://docs.triform.ai/triton/defining
Structure and plan your Projects through conversation
## Overview
Before building, it's helpful to define the high-level structure and goals of your Project. Triton can help you think through requirements, design decisions, and component architecture.
## Starting a new Project definition
### Describe the goal
Begin with what you want to accomplish:
**Examples:**
* *"I need a system that monitors social media for brand mentions and sends alerts"*
* *"I want to build a customer onboarding workflow that sends emails, provisions accounts, and notifies the team"*
* *"I'm building a content moderation system that flags inappropriate posts"*
Triton will ask clarifying questions:
* What inputs does it need?
* What outputs should it produce?
* What external services will it use?
* What's the expected volume/frequency?
### Sketch the architecture
Let Triton help you structure it:
**You:** *"I want to build a research assistant that gathers information from multiple sources"*
**Triton might propose:**
```
Project: Research Assistant
โโโ Input: Research query, sources list
โโโ Flow: Orchestration
โ โโโ Action: fetch_from_source (for each source)
โ โโโ Agent: synthesize_results
โ โโโ Action: format_output
โโโ Output: Formatted research report
```
You can then refine: *"Actually, add a validation step to filter low-quality sources first"*
## Defining component types
Triton helps you choose the right component for each task.
### When to use Actions
**Criteria:**
* Deterministic logic
* API calls
* Data transformation
* File operations
**Ask:** *"Should this be an Action or an Agent?"*
**Example:**\
*"I need to validate email addresses and check if they're on our blocklist"*\
**Triton:** This should be an Actionโit's deterministic validation logic.
### When to use Agents
**Criteria:**
* Natural language processing
* Decision-making with context
* Creative generation
* Tool orchestration
**Ask:** *"Do I need an Agent here?"*
**Example:**\
*"I need to read customer feedback and categorize it into themes"*\
**Triton:** Yes, an Agent is appropriateโit requires understanding nuanced text.
### When to use Flows
**Criteria:**
* Multi-step processes
* Branching logic
* Parallel operations
* Composing other components
**Ask:** *"How should I structure this workflow?"*
**Example:**\
*"I need to process uploads, validate them, store them, and notify users"*\
**Triton:** Create a Flow with:
1. Input (file upload)
2. Validation Action
3. Storage Action
4. Notification Action
5. Output (confirmation)
## Defining inputs and outputs
Be clear about data shapes upfront:
### Input definition
**You:** *"My Project will receive user requests"*
**Triton:** *"What fields will each request have?"*
**You:** *"User ID, request type, and optional parameters"*
**Triton proposes:**
```json theme={null}
{
"user_id": "string (required)",
"request_type": "enum: ['support', 'feature', 'bug'] (required)",
"parameters": "object (optional)",
"priority": "enum: ['low', 'medium', 'high'] (default: 'medium')"
}
```
### Output definition
**You:** *"It should return a status and details"*
**Triton proposes:**
```json theme={null}
{
"status": "enum: ['success', 'pending', 'failed']",
"message": "string",
"details": {
"ticket_id": "string",
"assigned_to": "string",
"estimated_resolution": "ISO 8601 datetime"
}
}
```
## Defining dependencies
Clarify what external resources you'll need:
### API dependencies
**You:** *"I need to integrate with Stripe and SendGrid"*
**Triton notes:**
* Actions will need `stripe` and `sendgrid` Python packages
* Project Variables needed: `STRIPE_API_KEY`, `SENDGRID_API_KEY`
* Rate limits to consider: Stripe (100/sec), SendGrid (varies by plan)
### Data dependencies
**You:** *"The system needs access to our product catalog"*
**Triton asks:**
* How is the catalog stored? (Database, API, file)
* How often does it change?
* Should we cache it?
### Authentication requirements
**You:** *"Users need to authenticate before making requests"*
**Triton suggests:**
* Add authentication Action or use built-in API key validation
* Define user roles if needed
* Handle token refresh if using OAuth
## Defining error handling
Plan for failures upfront:
**You:** *"What if the API call fails?"*
**Triton proposes:**
* Retry logic with exponential backoff
* Fallback to cached data if available
* Return graceful error message
* Log failure for monitoring
**You:** *"What if the input is malformed?"*
**Triton suggests:**
* Validation Action at Flow entry
* Return 400 error with clear message
* Log validation failures
## Defining scale and performance
Think about volume:
**You:** *"I expect about 1000 requests per day"*
**Triton notes:**
* Sequential processing is fine
* No special optimization needed
* Standard quotas should cover this
**You:** *"Actually, 1000 requests per hour during peak times"*
**Triton adjusts:**
* Consider parallel processing
* Add caching layer
* Monitor for rate limits
* Use batching where possible
## Example: Complete definition session
### You
*"I want to build a meeting notes processor"*
### Triton
What should it do with the meeting notes?
### You
*"Take transcripts, extract action items, identify owners, and send reminders"*
### Triton proposes
**Project: Meeting Notes Processor**
**Input:**
```json theme={null}
{
"transcript": "string (long text)",
"participants": ["string"],
"meeting_date": "ISO 8601 datetime"
}
```
**Components:**
1. **Agent: extract\_action\_items**
* Input: transcript, participants
* Output: list of action items with owners and due dates
* Tools: none needed
2. **Action: validate\_participants**
* Input: participants list
* Output: validated participants with contact info
* External: Query user database
3. **Action: send\_reminders**
* Input: action items with owners
* Output: reminder status
* External: Email service (SendGrid)
4. **Flow: orchestration**
* validate\_participants โ extract\_action\_items โ send\_reminders
**Output:**
```json theme={null}
{
"action_items": [
{
"description": "string",
"owner": "string",
"due_date": "ISO 8601 date",
"reminder_sent": "boolean"
}
],
"summary": "string"
}
```
**Dependencies:**
* OpenAI/Anthropic API for Agent
* SendGrid for emails
* User database access
**Error handling:**
* If participant validation fails: continue with available participants
* If email sending fails: log and retry later
* If extraction fails: return transcript with error message
### You
*"Perfect! Let's build it."*
### Triton
I'll start with the `extract_action_items` Agent...
## Best practices for defining
> **Think through errors early** โ It's easier to plan for failures than to add handling later
> **Be specific about data types** โ Clear schemas prevent integration issues
> **Consider the happy path and edge cases** โ Don't just think about perfect inputs
> **Start simple, then elaborate** โ Define core functionality before adding features
> **Ask "what if"** โ What if the API is down? What if input is huge? What if...
## Common definition anti-patterns
### โ Too vague
*"Make something that does AI stuff with data"*
### โ
Specific
*"Create a Project that takes CSV files, extracts customer sentiment from a 'feedback' column, and returns a summary with positive/negative/neutral counts"*
***
### โ Skipping error handling
*"Just build it to work"*
### โ
Planning for failure
*"Add retry logic for API calls, validation for inputs, and graceful degradation if the ML model is unavailable"*
***
### โ No clear boundaries
*"It should do everything related to customers"*
### โ
Focused scope
*"This Project handles customer onboarding: account creation, welcome email, initial setup wizard. Support and billing are separate Projects"*
## Next steps
Once you've defined your Project, continue with:
1. Building it with Triton
2. Editing and refining components
Explore the Triton documentation for more details on these topics.
# Editing with Triton
Source: https://docs.triform.ai/triton/editing
Modify and refine your Projects using AI assistance
## Overview
After building components, you'll often need to refine them. Triton can help you modify code, update prompts, restructure Flows, and optimize performance through natural conversation.
## Editing Actions
### Code modifications
**Simple changes:**
*"Add logging to this Action"*\
*"Add a timeout parameter"*\
*"Remove the deprecated function"*\
*"Rename the parameter from 'data' to 'input\_data'"*
**Refactoring:**
*"Extract the validation logic into a separate function"*\
*"Convert this to async/await"*\
*"Replace the for loop with a list comprehension"*\
*"Add type hints to all functions"*
**Error handling:**
*"Add try-catch for JSON parsing errors"*\
*"Handle the case where the API returns 404"*\
*"Add validation for negative numbers"*\
*"Return a default value if the request fails"*
### Example: Adding retry logic
**You:** *"Add retry logic to this API call"*
**Triton modifies:**
Before:
```python theme={null}
def fetch_data(url: str) -> dict:
response = requests.get(url)
return response.json()
```
After:
```python theme={null}
from tenacity import retry, stop_after_attempt, wait_exponential
import requests
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10)
)
def fetch_data(url: str) -> dict:
"""Fetches data with automatic retry on failure."""
response = requests.get(url, timeout=10)
response.raise_for_status()
return response.json()
```
And updates `requirements.txt`:
```
requests==2.31.0
tenacity==8.2.3
```
### Performance optimizations
*"Cache the results of this expensive function"*\
*"Batch the API calls instead of calling one at a time"*\
*"Use a connection pool"*\
*"Add async for I/O operations"*
## Editing Agents
### Prompt refinement
**Tone adjustments:**
*"Make this Agent more formal"*\
*"Make responses more concise"*\
*"Add a friendly, conversational tone"*\
*"Make it sound like a technical expert"*
**Behavior changes:**
*"Always ask for confirmation before taking actions"*\
*"Include sources for all facts mentioned"*\
*"Format responses as markdown"*\
*"Add step-by-step reasoning"*
**Example: Refining a support Agent**
**You:** *"Make this support Agent more empathetic and proactive"*
**Triton updates system prompt:**
Before:
```
You are a customer support assistant. Answer questions about our products.
```
After:
```
You are an empathetic customer support specialist dedicated to helping customers succeed.
Approach:
1. Acknowledge the customer's situation and any frustration
2. Provide clear, actionable solutions
3. Proactively suggest related help or preventive measures
4. Always confirm if the issue is resolved
Tone: Warm, patient, and professional. Show genuine care for the customer's experience.
Use available tools to check account status, create tickets, or look up documentation.
Always explain what you're doing and why.
```
### Tool management
**Adding tools:**
*"Add the search\_documentation Action as a tool"*\
*"Give this Agent access to the billing\_update Flow"*
**Removing tools:**
*"Remove the delete\_account toolโit's too risky"*\
*"This Agent shouldn't have access to user\_data anymore"*
**Tool usage guidance:**
*"Update the prompt to encourage using the search tool first"*\
*"Add examples of when to use each tool"*\
*"Clarify that create\_ticket should be used only when unable to resolve"*
### Model and parameter adjustments
*"Switch this Agent to Claude instead of GPT-4"*\
*"Lower the temperature to 0.2 for more consistent output"*\
*"Increase max tokens to 2000 for longer responses"*\
*"Add top\_p=0.9 to reduce repetition"*
## Editing Flows
### Structural changes
**Adding nodes:**
*"Add a validation Action before processing"*\
*"Insert a logging step after each Action"*\
*"Add an error handler at the end"*
**Removing nodes:**
*"Remove the deprecated transform\_data Action"*\
*"Delete the unused notification step"*
**Reordering:**
*"Swap the order of validation and normalization"*\
*"Move the notification to happen before storage, not after"*
### Converting serial to parallel
**You:** *"Make this Flow process items in parallel instead of sequentially"*
**Triton restructures:**
Before:
```
Input โ process_item_1 โ process_item_2 โ process_item_3 โ Output
```
After:
```
Input โ [parallel]
โ process_item_1 โ
โ process_item_2 โ [merge] โ Output
โ process_item_3 โ
```
### Adding conditional logic
**You:** *"Route premium users to enhanced\_process and regular users to standard\_process"*
**Triton adds:**
```
Input โ check_user_tier โ [premium] โ enhanced_process โ Output
โ [regular] โ standard_process โ Output
```
### Error handling in Flows
*"Add error routing so failed items go to a retry queue"*\
*"If validation fails, log the error and continue with the next item"*\
*"Add a fallback path if the primary API is down"*
## Editing entire Projects
### High-level modifications
**Feature additions:**
*"Add rate limiting to this Project"*\
*"Add authentication checks"*\
*"Implement caching throughout"*\
*"Add comprehensive logging"*
**Architectural changes:**
*"Split this monolithic Flow into three smaller sub-Flows"*\
*"Move all validation logic into a dedicated validation Flow"*\
*"Create a shared error handling Flow that all components use"*
**Performance improvements:**
*"Optimize this Project to handle 10x more requests"*\
*"Reduce the number of API calls"*\
*"Add batching to reduce execution time"*
### Refactoring for reusability
**You:** *"Extract the email sending logic so other Projects can use it"*
**Triton:**
1. Creates a new Action: `send_email`
2. Extracts the logic from the current Flow
3. Replaces inline logic with the new Action
4. Updates dependencies
Now multiple Projects can use `send_email`.
## Contextual editing
Triton understands your Project context when editing.
### Editing multiple related components
**You:** *"Update all Actions to use the new error logging format"*
**Triton:**
1. Scans all Actions in the Project
2. Identifies logging statements
3. Updates each one consistently
4. Reports what was changed
### Maintaining consistency
**You:** *"Make this new Action follow the same patterns as my existing ones"*
**Triton:**
* Reviews your existing Actions
* Matches coding style
* Uses same error handling approach
* Follows same naming conventions
### Bulk edits
**You:** *"Add a timeout parameter to all Actions that make API calls"*
**Triton:**
* Finds all relevant Actions
* Adds `timeout` parameter to each
* Updates function signatures
* Sets reasonable defaults
## Iterative refinement
Edit through conversation:
### Iteration example
**You:** *"Create an Action that fetches user data"*\
**Triton:** \[Creates basic Action]
**You:** *"Add caching"*\
**Triton:** \[Adds cache logic]
**You:** *"Cache should expire after 5 minutes"*\
**Triton:** \[Adds TTL]
**You:** *"Add logging when cache hits vs misses"*\
**Triton:** \[Adds logging]
**You:** *"Handle the case where the user doesn't exist"*\
**Triton:** \[Adds not-found handling]
Each iteration builds on the previous changes.
## Editing with constraints
Give Triton constraints to guide edits:
**Performance:**
* *"Optimize this, but keep it under 100ms"*
* *"Reduce API calls without changing functionality"*
**Compatibility:**
* *"Update this but maintain backward compatibility"*
* *"Migrate to the new API while supporting the old one"*
**Style:**
* *"Refactor this to follow PEP 8"*
* *"Make this more Pythonic"*
**Safety:**
* *"Add input sanitization but don't break existing tests"*
* *"Improve error handling without changing output format"*
## Reviewing Triton's edits
Always review changes:
1. **Check the diff** โ What exactly changed?
2. **Test the component** โ Does it still work?
3. **Verify edge cases** โ Does it handle errors properly?
4. **Review new dependencies** โ Are they necessary and safe?
If something's not right:
* *"Undo that change"*
* *"That broke the validation, please fix"*
* *"Actually, let's try a different approach"*
## Best practices for editing
> **Be specific** โ *"Add error handling"* is vague; *"Add try-catch for JSON decode errors"* is clear
> **Test after edits** โ Always run Execute to verify changes work
> **Edit incrementally** โ One change at a time is easier to debug
> **Explain why** โ *"Add caching because this API is rate-limited"* gives Triton better context
> **Review before deploying** โ Changes look different in production
## Common editing scenarios
### Scenario: Action is failing in production
**Diagnosis:** *"Execution #1234 failed. What's wrong?"*
**Triton identifies:** Timeout error on API call
**Fix:** *"Add retry with exponential backoff and increase timeout to 30s"*
**Triton edits:** Adds tenacity retry decorator, increases timeout
**Verify:** Test with Execute, redeploy
### Scenario: Agent responses are too verbose
**Problem:** *"This Agent is writing essays instead of concise answers"*
**Fix:** *"Update the prompt to limit responses to 2-3 sentences"*
**Triton edits:** Adds constraint to system prompt
**Verify:** Test with sample inputs
### Scenario: Flow is too slow
**Problem:** *"This Flow takes 30 seconds to process 50 items"*
**Analysis:** *"Why is it slow?"*
**Triton identifies:** Sequential processing of independent items
**Fix:** *"Convert to parallel processing"*
**Triton edits:** Restructures Flow for parallel execution
**Result:** Processing time drops to \~5 seconds
## Advanced editing techniques
### Conditional edits
*"If the Action uses requests, add retry logic"*\
*"For all Agents that use tools, add tool usage examples in the prompt"*
### Pattern-based edits
*"Find all places where we call external APIs and add timeout handling"*\
*"Update all validation Actions to return structured error objects"*
### Version-based edits
*"Create a v2 of this Agent with the improvements, but keep v1 for now"*\
*"Update all components to use the new API, but create a flag to fall back to the old one"*
# Triton Overview
Source: https://docs.triform.ai/triton/overview
Your AI assistant for building, editing, and debugging Triform Projects
## What is Triton?
Triton is Triform's built-in AI assistant that helps you build, modify, and debug your Projects through natural conversation. Instead of manually wiring nodes and writing code from scratch, you can describe what you want and Triton handles the implementation.
## Where to find Triton
Triton lives in the **Chat Panel** at the bottom of the **Builder workspace**. Click the chat icon or press `Cmd+K` (Mac) / `Ctrl+K` (Windows) to open it.
> note: Triton is for **building** your systems. To **use** your agents conversationally, switch to the **Chat workspace** from the Top Bar.
## What Triton can do
### Build new components
* **Create Projects** โ *"Build me a Project for processing customer feedback"*
* **Generate Agents** โ *"Create an Agent that classifies support tickets by urgency"*
* **Write Actions** โ *"Make an Action that fetches data from the GitHub API"*
* **Design Flows** โ *"Build a Flow that validates input, processes it, and sends notifications"*
### Modify existing work
* **Update code** โ *"Add error handling to this Action"*
* **Restructure Flows** โ *"Convert this sequential Flow to run Actions in parallel"*
* **Refine prompts** โ *"Make this Agent more concise in its responses"*
* **Add features** โ *"Add logging to all Actions in this Project"*
### Debug and troubleshoot
* **Explain errors** โ *"Why did this execution fail?"*
* **Analyze behavior** โ *"Why is this Agent not using the tools?"*
* **Optimize performance** โ *"How can I make this Flow faster?"*
* **Find issues** โ *"What's causing the timeout in this Action?"*
### Answer questions
* **Explain concepts** โ *"How do Project Variables work?"*
* **Provide guidance** โ *"What's the best way to structure a multi-step workflow?"*
* **Review code** โ *"Is this Action following best practices?"*
* **Suggest improvements** โ *"How can I improve this Agent's prompt?"*
## How to use Triton effectively
### Be specific
โ **Vague:** *"Fix this"*\
โ
**Specific:** *"Add retry logic with exponential backoff to the API call in this Action"*
โ **Vague:** *"Make it better"*\
โ
**Specific:** *"Optimize this Flow to process items in parallel instead of sequentially"*
### Provide context
When asking about errors or issues:
* Mention which component (Action, Agent, Flow)
* Describe what you expected vs. what happened
* Share relevant error messages
* Indicate when it works vs. when it fails
**Example:**\
*"The `fetch_news` Action works in testing but times out in production when processing more than 10 sources. Can you add batching?"*
### Break down complex requests
Instead of: *"Build a complete customer service system with ticket routing, sentiment analysis, auto-responses, and escalation"*
Try:
1. *"Create an Agent that classifies support tickets"*
2. *"Add sentiment analysis to the ticket classifier"*
3. *"Build a Flow that routes tickets based on classification"*
4. *"Add auto-response Action for common issues"*
5. *"Implement escalation logic for high-priority tickets"*
### Iterate and refine
Triton's first attempt might not be perfect. Provide feedback:
* *"That's close, but make the prompt more formal"*
* *"Good, now add error handling"*
* *"The logic works, but can you add logging?"*
## Triton's workflow
When you make a request, Triton:
1. **Analyzes** your current Project context
2. **Plans** the implementation approach
3. **Executes** the changes (creates/modifies components)
4. **Validates** the changes work together
5. **Explains** what was done and next steps
You'll see this happening in real-time in the Chat Panel.
## Triton's capabilities
### Code generation
Triton writes production-ready Python code for Actions:
* Proper error handling
* Type hints
* Logging
* Input validation
* Idiomatic patterns
### Graph understanding
Triton comprehends your Flow structures:
* Identifies bottlenecks
* Suggests optimizations
* Maintains data flow integrity
* Preserves connections when editing
### Prompt engineering
For Agents, Triton crafts effective prompts:
* Clear instructions
* Example patterns
* Tool usage guidance
* Error handling behavior
### Best practices
Triton follows Triform conventions:
* Naming conventions
* Project structure
* Security patterns
* Performance optimizations
## Limitations
While Triton is powerful, it:
* **Can't** execute Projects (use Execute panel for that)
* **Can't** access external systems (unless via your Actions)
* **Can't** modify deployed Projects (must redeploy after changes)
* **May** need multiple iterations for complex requests
* **Works best** with clear, specific instructions
## Tips for success
> **Start with "why"** โ Explain the goal, not just the task. "I need to process 1000 items quickly" gives better context than "make this parallel"
> **Review changes** โ Always check what Triton built before executing. It's your code!
> **Use it for learning** โ Ask "How does this work?" or "Why did you do it this way?"
> **Iterate incrementally** โ Build and test small pieces, then expand
> **Combine with Execute** โ Use Triton to build, Execute panel to test
## Common patterns
### Create-test-refine loop
1. *"Create an Action that calls the weather API"*
2. Test it with Execute panel
3. *"Add caching to reduce API calls"*
4. Test again
5. *"Add error handling for network failures"*
6. Test edge cases
7. Deploy
### Explore-then-modify
1. *"What does this Project do?"*
2. *"Why is this Agent using 3 tools?"*
3. *"How can I make it faster?"*
4. *"Implement that optimization"*
### Debug-fix-verify
1. *"Why did execution #123 fail?"*
2. *"Fix the null pointer error in the validation Action"*
3. Re-run execution
4. *"Add tests to prevent this in the future"*
## Next steps
Continue exploring the Triton documentation to learn about:
* Defining Projects conversationally
* Building components step-by-step
* Editing and modifying existing work
## Examples
See Triton in action:
### Example 1: Build a sentiment analyzer
**You:** *"Create an Agent that analyzes sentiment of customer reviews"*
**Triton:** Creates:
* Agent with appropriate system prompt
* Input schema for review text
* Output schema for sentiment (positive/negative/neutral) and confidence
* Example test case
### Example 2: Optimize a slow Flow
**You:** *"This Flow is taking 30 seconds to process 100 items. How can I speed it up?"*
**Triton:**
* Analyzes the Flow structure
* Identifies sequential bottleneck
* Suggests parallel processing
* Implements batching with 10 items per batch
* Estimates new processing time (\~5 seconds)
### Example 3: Fix an error
**You:** *"Execution failed with 'KeyError: source\_url'. What's wrong?"*
**Triton:**
* Reviews the execution logs
* Identifies the Action expecting `source_url` but receiving `url`
* Suggests either: (1) fix the input mapping, or (2) update the Action to accept `url`
* Implements your chosen solution
## Feedback
Triton improves based on usage. If you encounter issues or have suggestions:
* Report via [Support](/support/report-a-bug)
* Share patterns that work well
* Request new capabilities
Your feedback shapes Triton's evolution!
# Build a New Project
Source: https://docs.triform.ai/tutorials/build-a-new-project
Create a complete AI system from scratch
## Overview
In this tutorial, you'll build a **News Aggregator Project** that collects articles from multiple sources, summarizes them, and outputs a daily digest. You'll learn to:
* Create a Project from scratch
* Build Actions for data collection
* Design Flows for orchestration
* Configure an Agent for summarization
* Test and deploy your system
**Time required:** 20-30 minutes
## Step 1: Create the Project
1. Click the **Home** icon in the Top Bar
2. Click **New Project**
3. Name it `News Aggregator`
4. Add description: `Collects and summarizes news from multiple sources`
5. Click **Create**
Your Canvas now shows an empty Project node.
## Step 2: Build the fetch Action
Let's create an Action to fetch news from an API:
1. Open the Chat Panel
2. Say: *"Create an Action called `fetch_news` that takes a source URL and returns a list of articles"*
3. Triton will generate the Action with:
* Input: `source_url` (string)
* Output: `articles` (list of dicts)
* Basic HTTP request logic
4. Review the generated `Action.py` in the Properties Panel
5. Adjust if needed (add error handling, rate limiting, etc.)
## Step 3: Create the aggregation Flow
Now build a Flow to call the Action for multiple sources:
1. Ask Triton: *"Create a Flow that takes a list of news sources and calls fetch\_news for each one"*
2. Triton will create:
* Input node with `sources` parameter
* Loop or parallel execution of `fetch_news`
* Output node with combined `articles`
3. Double-click the Flow node to inspect the structure
4. Verify the connections are correct
## Step 4: Add a summarization Agent
Create an Agent to summarize the collected articles:
1. Say: *"Create an Agent called `news_summarizer` that takes articles and creates a concise daily digest"*
2. Triton will configure:
* System prompt for summarization
* Input/output schema
* Model selection (GPT-4 or Claude recommended)
3. Review and refine the system prompt:
```
You are a news summarization expert. Given a list of news articles,
create a concise, informative daily digest. Group by topic, highlight
key trends, and maintain neutral tone. Output as structured markdown.
```
## Step 5: Connect the components
Wire everything together:
1. Create a main Flow called `daily_news_digest`
2. Structure it as:
```
Input (sources list)
โ fetch_news_flow (aggregation)
โ news_summarizer (Agent)
โ Output (formatted digest)
```
3. You can do this via Triton or manually:
* Drag components from the Agent Toolbox
* Connect them with edges (click and drag from output to input ports)
* Configure each node's parameters
## Step 6: Test with sample data
Execute your system:
1. Select the `daily_news_digest` Flow
2. Open Properties โ Execute
3. Enter test payload:
```json
{
"sources": [
"https://newsapi.org/v2/top-headlines?country=us",
"https://api.example.com/tech-news",
"https://api.example.com/world-news"
]
}
```
4. Click **Execute**
5. Monitor execution in real-time
6. Review the output digest
## Step 7: Debug and iterate
If something goes wrong:
* Check execution logs in Properties โ Executions
* Verify each component's input/output schema
* Test Actions individually before running the full Flow
* Ask Triton: *"Why did the execution fail?"*
Common issues:
* API authentication missing โ Add API keys to Global Variables
* Timeout errors โ Adjust Action timeout settings
* Empty results โ Verify API endpoints are accessible
## Step 8: Deploy as API
Make your Project accessible:
1. Click **Deploy** in the Top Bar
2. Select deployment target (e.g., production)
3. Configure:
* Endpoint path: `/daily-digest`
* HTTP method: POST
* Authentication: API key required
4. Click **Deploy Now**
5. Copy the generated endpoint URL
6. Test with curl:
```bash
curl -X POST https://api.triform.ai/v1/your-project/daily-digest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sources": ["..."]}'
```
## Step 9: Schedule daily execution
Set up automatic runs:
1. In the Project Properties, go to **Triggers**
2. Click **Add Trigger**
3. Select **Schedule**
4. Configure:
* Schedule: Daily at 6:00 AM UTC
* Payload: Your default sources list
* Notification: Email on success/failure
5. Save the trigger
## Next steps
Now that you've built a complete Project:
* **Enhance it** โ Add sentiment analysis, language detection, custom formatting
* **Monitor it** โ Set up alerts for failures or anomalies
* **Share it** โ Invite team members to collaborate
* **Extend it** โ Create variations for different news categories
## Tips for success
> **Start simple** โ Build and test each component individually before connecting them
> **Use Project Variables** โ Store API keys, base URLs, and configuration centrally
> **Save test payloads** โ Keep example inputs for regression testing
> **Version your work** โ Use meaningful names and descriptions for components
> **Iterate with Triton** โ Don't hesitate to ask for modifications or explanations
# Edit a Specific Component
Source: https://docs.triform.ai/tutorials/edit-a-specific-component
Modify individual Agents, Flows, or Actions in detail
## Overview
This tutorial focuses on editing individual components (Agents, Flows, Actions) within a Project. You'll learn component-specific techniques for each type.
**Time required:** 10-15 minutes per component type
## Editing Actions
Actions are Python functions with inputs, outputs, and dependencies.
### Opening an Action
1. In the **Builder workspace**, double-click the Action node on the Canvas
2. The Properties Panel shows:
* **Content tab** โ Code editor for `Action.py`
* **Input/Output tab** โ Schema definition
* **Requirements** โ Python dependencies
### Modifying the code
**Example:** Add logging to a data processing Action
1. Select the Action
2. Open Properties โ Content
3. Update the code:
```python theme={null}
import logging
from typing import Dict, List
logger = logging.getLogger(__name__)
def process_data(data: List[Dict]) -> List[Dict]:
logger.info(f"Processing {len(data)} items")
processed = []
for item in data:
try:
# processing logic
result = transform(item)
processed.append(result)
except Exception as e:
logger.error(f"Failed to process item: {e}")
continue
logger.info(f"Successfully processed {len(processed)} items")
return processed
```
4. Update `requirements.txt` if adding dependencies
5. Click **Test** to run with sample input
6. Save (auto-saves)
### Changing input/output schema
1. Go to Properties โ Input/Output
2. Modify the schema:
* Add new fields
* Change types
* Update descriptions
* Set required vs. optional
3. Update the code to match
4. Test with new schema
### Best practices for Actions
> **Keep them focused** โ One clear purpose per Action
> **Type everything** โ Use proper type hints for all parameters
> **Handle errors** โ Don't let exceptions propagate unhandled
> **Test independently** โ Each Action should work standalone
## Editing Flows
Flows are graphs of connected nodes.
### Opening a Flow
1. Click the Flow node
2. The Canvas zooms into the Flow's internal structure
3. You see: Input node, processing nodes, Output node, edges
### Adding nodes
**Via Triton:**
1. Ask: *"Add a data validation Action to this Flow"*
2. Triton adds the node and suggests connections
**Manually:**
1. Right-click the Canvas
2. Select **Add Node**
3. Choose from: Actions, Agents, sub-Flows
4. Drag to position
### Connecting nodes
1. Click and drag from an output port
2. Drop on an input port of another node
3. The edge shows data flow direction
4. Orange edges = control flow, Blue edges = data flow
### Modifying the structure
**Serial to parallel conversion:**
Before (serial):
```
Input โ Action A โ Action B โ Action C โ Output
```
After (parallel):
```
Input โ Action A โ
Action B โ Merge โ Output
Action C โ
```
Steps:
1. Add a Merge/Join node
2. Disconnect B and C from serial chain
3. Connect both to Merge
4. Connect Merge to Output
### Conditional routing
Add branching logic:
1. Add a Router node (or use Agent to decide)
2. Connect multiple output paths
3. Each path processes different scenarios
4. Reconnect at a Merge node if needed
Example:
```
Input โ Router โ [if premium] โ Enhanced Processing โ Output
โ [if basic] โ Standard Processing โ Output
```
### Best practices for Flows
> **Left to right** โ Arrange nodes in execution order
> **Group visually** โ Related nodes should be close together
> **Name clearly** โ Label nodes with their purpose
> **Test incrementally** โ Verify each section works before adding more
## Editing Agents
Agents are LLM-powered components with prompts and tools.
### Opening an Agent
1. Double-click the Agent node
2. Properties Panel shows:
* **Content tab** โ Prompts and model config
* **Toolbox** โ Available tools (Actions/Flows)
* **Execute tab** โ Testing interface
### Modifying the System Prompt
The System Prompt defines the Agent's behavior.
**Example:** Improve a customer service Agent
Before:
```
You are a helpful assistant.
```
After:
```
You are a customer service expert for TechCorp, specializing in
subscription management and technical support.
Guidelines:
- Always be polite and professional
- Verify the user's identity before accessing account information
- Offer solutions, not just explanations
- Escalate to human support if unable to resolve
- Document all actions taken in the conversation
Available tools:
- check_subscription_status: Get current subscription details
- update_billing: Modify billing information
- reset_password: Send password reset email
- escalate_to_human: Transfer to human support
Always confirm actions before executing them.
```
### Adding/removing tools
1. Go to Properties โ Content โ Toolbox
2. Click **Add Tool**
3. Select from available Actions/Flows
4. Tools appear in the Agent's context
5. Update the System Prompt to mention new tools
### Configuring model parameters
Adjust for your use case:
| Parameter | Low Value | High Value | Use Case |
| ----------- | --------- | ---------- | ---------------------------------------------------- |
| Temperature | 0.0-0.3 | 0.7-1.0 | Low: factual, consistent
High: creative, varied |
| Top P | 0.1-0.5 | 0.9-1.0 | Low: focused
High: exploratory |
| Max Tokens | 100-500 | 2000-4000 | Low: concise
High: detailed |
### Testing Agent changes
1. Go to Properties โ Execute
2. Enter a test message or payload:
```json theme={null}
{
"messages": [
{"role": "user", "content": "I need to cancel my subscription"}
]
}
```
3. Click **Execute**
4. Review:
* Agent's response
* Tools called
* Reasoning/chain of thought
* Token usage
5. Iterate on prompts based on results
### Best practices for Agents
> **Be specific** โ Vague prompts lead to unpredictable behavior
> **Limit tools** โ Too many options confuse the Agent
> **Test edge cases** โ Try to break it with unusual inputs
> **Monitor usage** โ Track token costs and latency
## Using Triton for edits
Triton can help with all component types:
### For Actions
* *"Add error handling to this Action"*
* *"Optimize this function for large datasets"*
* *"Add logging at each step"*
### For Flows
* *"Add parallel processing to this Flow"*
* *"Insert a validation step after the input"*
* *"Add error routing to this Flow"*
### For Agents
* *"Make this Agent more concise in responses"*
* *"Add a tool for checking inventory"*
* *"Improve the prompt for customer service"*
## Version management
Track changes to components:
1. **Export before major changes**
* Right-click component โ Export
* Save the JSON locally
2. **Meaningful naming**
* Rename nodes with version info if needed
* `CustomerServiceAgent_v2`
3. **Test before overwriting**
* Create a copy to test changes
* Compare performance
* Merge if improvement is confirmed
## Common editing scenarios
### Scenario 1: Action is too slow
**Diagnosis:** Profile the Action, find bottlenecks
**Solutions:**
* Add caching for expensive operations
* Use async/await for I/O operations
* Batch API calls instead of one-by-one
* Optimize algorithms (O(nยฒ) โ O(n log n))
### Scenario 2: Flow produces wrong output
**Diagnosis:** Trace the data through each node
**Solutions:**
* Check schema mismatches between nodes
* Add logging to intermediate nodes
* Test each node individually
* Verify edge connections are correct
### Scenario 3: Agent doesn't use tools
**Diagnosis:** Prompt doesn't encourage tool use
**Solutions:**
* Explicitly instruct: "Use available tools to answer"
* Provide examples of tool usage in prompt
* Reduce temperature for more deterministic behavior
* Simplify tool descriptions
### Scenario 4: Component works in test, fails in production
**Diagnosis:** Environment differences
**Solutions:**
* Check Project Variables are set in production
* Verify API keys and credentials
* Review rate limits and quotas
* Check for hardcoded values (don't do this!)
## Next steps
Continue exploring the documentation to learn about building new Projects, integrating them into your apps, and understanding Actions, Agents, and Flows.
# Edit an Existing Project
Source: https://docs.triform.ai/tutorials/edit-an-existing-project
Modify and enhance Projects you've built or inherited
## Overview
This tutorial covers how to safely modify existing Projects, whether you created them, inherited them from teammates, or are exploring community templates.
**Time required:** 15-20 minutes
## Step 1: Open the Project
1. Navigate to **Home** in the Top Bar
2. Find your Project in the Projects list
3. Click to open it in the **Builder workspace**
You'll see the Project's component graph on the Canvas.
## Step 2: Understand the structure
Before making changes, map out what exists:
1. **Review the Canvas** โ Note all Flows, Agents, and Actions
2. **Check dependencies** โ See which components depend on others
3. **Read documentation** โ Look for README or descriptions
4. **Ask Triton** โ Type: *"Explain what this Project does"*
Triton will analyze the structure and provide a summary.
## Step 3: Identify what to change
Common modification scenarios:
### Adding a new feature
**Example:** Add email notifications to a data processing pipeline
1. Create a new Action: `send_email`
2. Add it to the relevant Flow
3. Connect it after the processing step
4. Configure SMTP settings in Project Variables
### Modifying an existing component
**Example:** Update an Agent's prompt
1. Select the Agent node
2. Open Properties โ Content
3. Edit the System Prompt
4. Save changes (auto-saved)
5. Test with a sample payload
### Replacing a component
**Example:** Swap out an Action for a better implementation
1. Create the new Action
2. Ensure it has the same input/output schema
3. Disconnect the old Action
4. Connect the new one
5. Delete the old Action
6. Test thoroughly
### Debugging an issue
**Example:** A Flow is failing intermittently
1. Go to Properties โ Executions
2. Find failed execution
3. Examine logs and errors
4. Identify the failing component
5. Ask Triton: *"Why is this Action failing?"*
6. Apply the fix
7. Re-run execution
## Step 4: Make the changes
Let's walk through a specific example: **Adding retry logic to an API call**
### Current state
Your `fetch_data` Action sometimes fails due to network timeouts.
### Goal
Add automatic retry with exponential backoff.
### Steps
1. **Open the Action**
* Double-click the `fetch_data` node
* Review the current `Action.py`
2. **Ask Triton for help**
* *"Add retry logic with exponential backoff to this Action"*
* Triton will update the code with a retry decorator
3. **Review the changes**
```python theme={null}
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10)
)
def fetch_data(url: str) -> dict:
# existing implementation
```
4. **Update requirements.txt**
* Add `tenacity==8.2.3`
5. **Test the change**
* Execute with a payload that previously failed
* Verify retries happen (check logs)
* Confirm eventual success
## Step 5: Test your changes
Always test modifications before deploying:
### Unit test individual components
1. Select the modified component
2. Use Properties โ Execute with test data
3. Verify expected behavior
### Integration test the full Flow
1. Select the top-level Flow
2. Execute with realistic payloads
3. Check all outputs are correct
### Edge case testing
Test with:
* Empty inputs
* Maximum size inputs
* Invalid data
* Network failures (if applicable)
## Step 6: Document your changes
Help your future self and teammates:
1. **Update descriptions**
* Select the component
* Update the description field
* Note what changed and why
2. **Update README**
* If the Project has a README, add notes
* Document new dependencies or requirements
3. **Add comments in code**
* Explain non-obvious logic
* Note any workarounds or constraints
## Step 7: Deploy the updates
Once tested:
1. Click **Deploy** in the Top Bar
2. Select the environment
3. Review changes (diff view if available)
4. Add deployment notes
5. Click **Deploy Now**
For production Projects:
* Deploy to staging first
* Run smoke tests
* Monitor for issues
* Then deploy to production
## Step 8: Monitor post-deployment
After deploying:
1. **Watch initial executions**
* Check the first few runs succeed
* Look for unexpected errors
2. **Compare metrics**
* Success rate before vs. after
* Execution time
* Error types
3. **Set up alerts**
* Get notified if new issues arise
* Track key metrics
## Common modification patterns
### Adding authentication
1. Create Project Variable for API key
2. Update relevant Actions to use the key
3. Test with valid and invalid keys
### Scaling for more data
1. Identify bottlenecks (single-threaded Actions)
2. Add parallel processing in Flows
3. Implement batching if needed
4. Test with large payloads
### Improving error handling
1. Add try-catch blocks in Actions
2. Return structured error responses
3. Add error routing in Flows
4. Set up failure notifications
### Optimizing performance
1. Profile slow components
2. Add caching where appropriate
3. Reduce unnecessary data passing
4. Parallelize independent operations
## Best practices
> **Version control** โ Save the current state before major changes (export/backup)
> **Small iterations** โ Make one change at a time, test, then move on
> **Ask for help** โ Use Triton to explain complex parts before modifying
> **Test thoroughly** โ Don't skip testing, especially for production Projects
> **Communicate** โ If working in a team, coordinate changes
## Troubleshooting
**Problem:** Changes aren't taking effect\
**Solution:** Ensure you saved, redeploy if already deployed, clear any caches
**Problem:** Breaking existing functionality\
**Solution:** Review execution logs, compare with previous version, test each component
**Problem:** Can't understand the existing code\
**Solution:** Ask Triton to explain it, check for documentation, trace execution flow
**Problem:** Changes work locally but fail in production\
**Solution:** Check environment differences, verify Project Variables are set, review logs
## Next steps
Continue exploring the documentation to learn about editing specific components, integrating Projects into your apps, and deployment best practices.
# Integrate Project into Your App
Source: https://docs.triform.ai/tutorials/integrate-project-into-your-app
Connect your Triform Project to external applications via API
## Overview
Once you've built and tested a Project in Triform, you'll want to integrate it into your application. This tutorial covers API integration, authentication, and best practices.
**Time required:** 20-30 minutes
## Prerequisites
* A deployed Triform Project
* API key for authentication
* Basic knowledge of HTTP requests
## Step 1: Deploy your Project
Before integrating, deploy your Project:
1. Open your Project on the Canvas
2. Click **Deploy** in the Top Bar
3. Select the target environment (staging or production)
4. Configure the deployment:
* **Endpoint name:** Choose a memorable name (e.g., `news-digest`)
* **HTTP method:** POST (most common) or GET
* **Authentication:** API key required (recommended)
5. Click **Deploy Now**
6. Copy the generated endpoint URL:
```
https://api.triform.ai/v1/your-org/news-digest
```
## Step 2: Generate an API key
1. Go to Profile โ API Keys
2. Click **Create New Key**
3. Name it: `Production Integration`
4. Set permissions: Execute Projects
5. Copy the key (shown only once!)
6. Store securely (use environment variables)
> **Security note:** Never commit API keys to version control. Use environment variables or secret managers.
## Step 3: Make your first API call
### Using cURL
```bash
curl -X POST https://api.triform.ai/v1/your-org/news-digest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sources": [
"https://newsapi.org/v2/top-headlines?country=us",
"https://api.example.com/tech-news"
]
}'
```
### Using Python
```python
import requests
import os
API_KEY = os.environ.get('TRIFORM_API_KEY')
ENDPOINT = 'https://api.triform.ai/v1/your-org/news-digest'
headers = {
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
}
payload = {
'sources': [
'https://newsapi.org/v2/top-headlines?country=us',
'https://api.example.com/tech-news'
]
}
response = requests.post(ENDPOINT, json=payload, headers=headers)
if response.status_code == 200:
result = response.json()
print('Success:', result)
else:
print('Error:', response.status_code, response.text)
```
### Using JavaScript (Node.js)
```javascript
const axios = require('axios');
const API_KEY = process.env.TRIFORM_API_KEY;
const ENDPOINT = 'https://api.triform.ai/v1/your-org/news-digest';
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
const payload = {
sources: [
'https://newsapi.org/v2/top-headlines?country=us',
'https://api.example.com/tech-news'
]
};
axios.post(ENDPOINT, payload, { headers })
.then(response => {
console.log('Success:', response.data);
})
.catch(error => {
console.error('Error:', error.response?.status, error.response?.data);
});
```
### Using JavaScript (Browser/React)
```javascript
const callTriformAPI = async () => {
const API_KEY = process.env.REACT_APP_TRIFORM_API_KEY;
const ENDPOINT = 'https://api.triform.ai/v1/your-org/news-digest';
try {
const response = await fetch(ENDPOINT, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
sources: [
'https://newsapi.org/v2/top-headlines?country=us',
'https://api.example.com/tech-news'
]
})
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log('Success:', data);
return data;
} catch (error) {
console.error('Error:', error);
}
};
```
## Step 4: Handle responses
Triform API responses follow this structure:
### Success response (200 OK)
```json
{
"execution_id": "exec_abc123",
"status": "completed",
"output": {
"digest": "Top stories today include...",
"article_count": 42,
"topics": ["technology", "politics", "science"]
},
"execution_time_ms": 3420,
"timestamp": "2025-10-01T10:30:00Z"
}
```
### Error response (4xx/5xx)
```json
{
"error": {
"code": "invalid_input",
"message": "Field 'sources' is required",
"details": {
"field": "sources",
"expected_type": "array"
}
},
"request_id": "req_xyz789"
}
```
### Handling in code
```python
def call_triform_api(payload):
response = requests.post(ENDPOINT, json=payload, headers=headers)
if response.status_code == 200:
data = response.json()
return {
'success': True,
'data': data['output'],
'execution_id': data['execution_id']
}
elif response.status_code == 400:
error = response.json()['error']
return {
'success': False,
'error': error['message'],
'code': error['code']
}
elif response.status_code == 429:
# Rate limit exceeded
return {
'success': False,
'error': 'Rate limit exceeded. Try again later.'
}
elif response.status_code >= 500:
# Server error
return {
'success': False,
'error': 'Triform service temporarily unavailable'
}
else:
return {
'success': False,
'error': f'Unexpected error: {response.status_code}'
}
```
## Step 5: Implement error handling
### Retry logic with exponential backoff
```python
import time
from typing import Optional
def call_with_retry(payload, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(
ENDPOINT,
json=payload,
headers=headers,
timeout=30
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# Rate limited, wait and retry
wait_time = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait_time)
continue
elif response.status_code >= 500:
# Server error, retry
wait_time = 2 ** attempt
time.sleep(wait_time)
continue
else:
# Client error, don't retry
raise Exception(f"API error: {response.text}")
except requests.exceptions.Timeout:
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
continue
raise
except requests.exceptions.RequestException as e:
if attempt < max_retries - 1:
time.sleep(2 ** attempt)
continue
raise
raise Exception(f"Failed after {max_retries} attempts")
```
### Timeout handling
Always set timeouts to prevent hanging requests:
```python
# Set reasonable timeout (connect timeout, read timeout)
response = requests.post(
ENDPOINT,
json=payload,
headers=headers,
timeout=(5, 30) # 5s to connect, 30s to read
)
```
## Step 6: Integrate into your application
### Example: Web dashboard
```python
# Flask app
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/dashboard')
def dashboard():
return render_template('dashboard.html')
@app.route('/api/refresh-news', methods=['POST'])
def refresh_news():
sources = request.json.get('sources', [])
result = call_triform_api({
'sources': sources
})
if result['success']:
return jsonify({
'digest': result['data']['digest'],
'article_count': result['data']['article_count']
})
else:
return jsonify({'error': result['error']}), 400
```
### Example: Scheduled job
```python
# Daily cron job
import schedule
import time
def fetch_daily_news():
print("Fetching daily news digest...")
payload = {
'sources': [
'https://newsapi.org/v2/top-headlines?country=us',
'https://api.example.com/tech-news'
]
}
result = call_with_retry(payload)
# Save to database or send email
save_to_database(result['output']['digest'])
send_email_digest(result['output']['digest'])
print("Daily news digest completed")
# Schedule for 6 AM daily
schedule.every().day.at("06:00").do(fetch_daily_news)
while True:
schedule.run_pending()
time.sleep(60)
```
### Example: Real-time processing
```python
# Process incoming webhooks
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
@app.post('/webhook/new-content')
async def handle_new_content(data: dict, background_tasks: BackgroundTasks):
# Trigger Triform processing in background
background_tasks.add_task(process_with_triform, data)
return {'status': 'processing'}
def process_with_triform(data):
result = call_triform_api({
'content': data['content'],
'metadata': data['metadata']
})
# Store results
store_results(result)
```
## Step 7: Monitor and optimize
### Track API usage
```python
import logging
logger = logging.getLogger(__name__)
def call_triform_api_with_logging(payload):
start_time = time.time()
try:
response = requests.post(ENDPOINT, json=payload, headers=headers)
elapsed = time.time() - start_time
logger.info(f"Triform API call completed in {elapsed:.2f}s, status: {response.status_code}")
return response.json()
except Exception as e:
elapsed = time.time() - start_time
logger.error(f"Triform API call failed after {elapsed:.2f}s: {str(e)}")
raise
```
### Caching results
```python
from functools import lru_cache
import hashlib
import json
# Simple in-memory cache
cache = {}
CACHE_TTL = 3600 # 1 hour
def get_cache_key(payload):
return hashlib.md5(json.dumps(payload, sort_keys=True).encode()).hexdigest()
def call_triform_cached(payload):
cache_key = get_cache_key(payload)
# Check cache
if cache_key in cache:
cached_data, timestamp = cache[cache_key]
if time.time() - timestamp < CACHE_TTL:
logger.info("Returning cached result")
return cached_data
# Call API
result = call_triform_api(payload)
# Store in cache
cache[cache_key] = (result, time.time())
return result
```
## Best practices
> **Use environment variables** โ Never hardcode API keys
> **Implement retries** โ Network issues happen; retry with backoff
> **Set timeouts** โ Don't let requests hang indefinitely
> **Log everything** โ Track success/failure for debugging
> **Cache when appropriate** โ Save API calls for expensive operations
> **Monitor quota** โ Track usage against your plan limits
> **Test error paths** โ Ensure your app handles API failures gracefully
> **Version your integration** โ Track which API version you're using
## Troubleshooting
**Problem:** 401 Unauthorized\
**Solution:** Check API key is correct and has Execute permissions
**Problem:** 429 Too Many Requests\
**Solution:** Implement rate limiting, add delays between requests
**Problem:** 500 Server Error\
**Solution:** Retry with backoff, check Triform status page
**Problem:** Slow responses\
**Solution:** Optimize your Project, add caching, use async requests
**Problem:** Unexpected output format\
**Solution:** Verify Project schema matches your expectations, check docs
## Next steps
Continue exploring the documentation to learn about deployments, API key management, monitoring, quotas, and security best practices.
# Builder: Overview
Source: https://docs.triform.ai/workspace/builder/overview
Visual workspace for designing, building, and debugging AI systems
## What you see
The Builder workspace is where you design, compose, and debug your AI systems using visual tools and components.
**Canvas** โ Visual workspace with nodes and edges\
**Chat Panel (Triton)** โ AI assistant for building\
**Properties Panel** โ Configuration and execution controls
## Why use the Builder workspace
* **Visual composition** โ See your system architecture at a glance
* **Component building** โ Create agents, flows, actions, and projects
* **Debugging** โ Test and refine components with execution controls
* **Triton assistance** โ Get help building from the AI assistant
## When to use Builder vs Chat
**Use Builder when you want to:**
* Design and compose flows visually
* Create new agents, flows, or actions
* Debug component connections
* Configure properties and test executions
* Build and modify your system architecture
**Use Chat when you want to:**
* Interact with completed agents
* Test agent behavior conversationally
* Use your agent for actual work
* Share agent access with teammates
## Core components
### Canvas
The visual workspace where you:
* Compose nodes (Agents, Flows, Actions, Projects)
* Connect nodes with edges to define logic flow
* Organize your system architecture visually
* Navigate between nested components
### Chat Panel (Triton)
Your AI building assistant that can:
* Author components from natural language
* Wire connections between nodes
* Run test executions
* Explain structures and help debug
### Properties Panel
Configuration and control center where you:
* View and edit component properties
* Configure inputs and outputs
* Execute components with test payloads
* Manage project variables
> tip: Use Triton in the Chat Panel to quickly build components by describing what you want, then refine them visually on the Canvas.
## Quick start
1. Navigate to the Builder workspace from the top bar
2. Create or open a Project on the Canvas
3. Ask Triton to build something, or drag components from the toolbox
4. Configure and execute from the Properties Panel
## Best practices
**Keep flows modular** โ Break complex logic into reusable components\
**Name clearly** โ Use descriptive names for all nodes\
**Test frequently** โ Execute components as you build\
**Use Triton** โ Leverage the AI assistant for faster development
# Agent Toolbox View
Source: https://docs.triform.ai/workspace/canvas/agent-toolbox
Configure agent tools and tips for curation
## Characteristics
* Toolbox items are not connected by Edges.
* Tools are available for the Agent to invoke during execution.
* Tools can themselves contain other components.
## Creating tools
* Click the large ๏ผ to add a tool:
* Action โ atomic Python logic
* Flow โ orchestrated logic
* Agent โ nested agent for complex strategies
## Tips
* Keep tools small and testable.
* Prefer descriptive names (e.g., `fetch_user_profile`).
* Start with a few highโvalue tools; expand as needs grow.
> note: Execution control โ The Agent decides when to use tools; you define which tools it can use by curating the toolbox.
# Flow View
Source: https://docs.triform.ai/workspace/canvas/flow-view
Navigate and understand Flow internals
## Overview
When you double-click a Flow node on the Canvas, you enter **Flow View**โa detailed visualization of the Flow's internal structure showing all nodes, edges, and data flow.
## What you see in Flow View
### Nodes
* **Input Node** (green) โ Entry point(s) for the Flow
* **Processing Nodes** (blue/purple) โ Actions, Agents, sub-Flows
* **Output Node** (orange) โ Exit point(s) from the Flow
* **Control Nodes** (gray) โ Routers, merges, loops
### Edges
* **Blue edges** โ Data flow connections
* **Orange edges** โ Control flow (conditions, loops)
* **Dotted edges** โ Optional connections
### Ports
* **Input ports** (left side) โ Where data enters a node
* **Output ports** (right side) โ Where data exits a node
* **Named ports** โ Labeled for clarity (e.g., "success", "error")
## Basic interactions
### Navigation
* **Pan** โ Click and drag on empty Canvas space
* **Zoom** โ Mouse wheel or trackpad pinch
* **Fit to screen** โ Press `F` or click the fit icon
* **Reset view** โ Press `R` or click reset icon
### Selection
* **Select node** โ Click on it
* **Multi-select** โ Hold `Shift` and click multiple nodes
* **Select all** โ `Cmd+A` (Mac) / `Ctrl+A` (Windows)
* **Deselect** โ Click on empty Canvas space
### Node details
* **View properties** โ Click a node, check Properties Panel
* **Edit node** โ Double-click to open (if it's a Flow/Agent)
* **See connections** โ Hover over ports to highlight edges
## Understanding data flow
### Following execution path
Edges show how data moves through your Flow:
```
Input โ validate โ [if valid] โ process โ format โ Output
[if invalid] โ error_handler โ Output
```
**Left to right** โ Execution generally flows from left to right\
**Branching** โ Multiple outgoing edges = conditional routing\
**Merging** โ Multiple incoming edges = combining results
## Common Flow patterns
### Linear Flow
```
Input โ Action A โ Action B โ Action C โ Output
```
Sequential processing, simple and predictable.
### Parallel Flow
```
Input โ Action A โ
Action B โ Merge โ Output
โ Action C โ
```
Independent operations run simultaneously, then results combine.
### Conditional Flow
```
Input โ Router โ [condition 1] โ Action A โ Output
โ [condition 2] โ Action B โ Output
โ [else] โ Action C โ Output
```
Different paths based on input data or logic.
### Loop Flow
```
Input โ Process Item โบ (for each item) โ Collect Results โ Output
```
Repeat an operation for multiple items.
### Error handling Flow
```
Input โ Action โ [success] โ Format โ Output
โ [error] โ Log Error โ Retry or Fail
```
Separate paths for success and failure scenarios.
## Creating and connecting nodes
### Adding nodes
**Method 1: Via Triton**
* *"Add a Action that validates output to this Flow"*
* Triton adds and suggests connections
**Method 2: Right-click menu**
1. Right-click on Canvas
2. Select **Add Node**
3. Choose: Action, Agent, Flow, Control
4. Position the node
### Connecting nodes
1. **Click and drag** from an output port
2. **Drop** on an input port of another node
3. The edge appears, showing data flow
**Tips:**
* You can only connect compatible types
* Hover over ports to see data schema
* Hold `Shift` while dragging for precise placement
### Disconnecting nodes
1. **Click** the edge to select it
2. **Press** `Delete` or `Backspace`
3. Or **right-click** edge โ **Delete**
## Node interactions
### Moving nodes
* **Drag** to reposition
* **Arrow keys** for fine adjustment
* **Hold Shift** while dragging to constrain to axis
### Copying nodes
1. Select node(s)
2. `Cmd+C` / `Ctrl+C` to copy
3. `Cmd+V` / `Ctrl+V` to paste
### Deleting nodes
1. Select node(s)
2. Press `Delete` or `Backspace`
3. Confirm deletion (edges are also removed)
### Renaming nodes
1. Select the node
2. Edit the name in Properties Panel
3. Or double-click the node label (if editable)
## Input and Output nodes
### Input Node
Defines what data enters the Flow.
**Configuration:**
* **Schema** โ Define expected fields and types
* **Validation** โ Set required vs. optional fields
* **Defaults** โ Provide default values
* **Description** โ Document what this input represents
**Example:**
```json theme={null}
{
"user_id": "string (required)",
"action": "enum: ['create', 'update', 'delete'] (required)",
"data": "object (optional)"
}
```
### Output Node
Defines what data exits the Flow.
**Configuration:**
* **Schema** โ Define output fields and types
* **Multiple outputs** โ Named exit points (success, error, etc.)
* **Mapping** โ Map internal data to output format
* **Description** โ Document what this output represents
**Example:**
```json theme={null}
{
"status": "string",
"result": "object",
"execution_time_ms": "number"
}
```
## Advanced Flow View features
### Minimap
Shows the full Flow with current viewport indicator.
* Toggle with `M` key
* Click to jump to that area
* Useful for large Flows
### Node search
Find nodes in complex Flows:
1. Press `Cmd+F` / `Ctrl+F`
2. Type node name
3. Canvas highlights and zooms to matching nodes
### Layout auto-arrange
Organize messy Flows:
1. Select all nodes (or leave unselected for all)
2. Right-click โ **Auto Layout**
3. Choose: Horizontal, Vertical, or Grid
4. Flow rearranges automatically
### Comments and annotations
Add notes to your Flow:
1. Right-click empty space
2. Select **Add Comment**
3. Type your note
4. Position it near relevant nodes
Use comments to:
* Explain complex logic
* Mark TODOs
* Document assumptions
* Highlight temporary workarounds
## Debugging in Flow View
### Viewing execution state
When an execution is selected:
* **Green nodes** โ Executed successfully
* **Red nodes** โ Failed
* **Gray nodes** โ Skipped (not in execution path)
* **Yellow nodes** โ Currently executing (live view)
### Inspecting node outputs
1. Select an execution in Properties โ Executions
2. Click a node in Flow View
3. Properties Panel shows:
* Input data received
* Output data produced
* Execution time
* Logs and errors
### Finding bottlenecks
Node execution times are displayed:
* **Thick borders** โ Slower nodes (longer execution)
* **Thin borders** โ Fast nodes
* **Tooltip** โ Shows exact timing on hover
Identify slow nodes to optimize.
## Best practices for Flow View
> **Left-to-right flow** โ Arrange nodes in execution order
> **Group related nodes** โ Position them close together
> **Use vertical space** โ Separate parallel branches vertically
> **Minimize edge crossings** โ Crossing edges are hard to follow
> **Label nodes clearly** โ Descriptive names beat generic ones
> **Add comments** โ Document non-obvious logic
> **Keep it shallow** โ If too deep, split into sub-Flows
## Keyboard shortcuts
| Action | Shortcut (Mac) | Shortcut (Windows) |
| -------------- | -------------- | ------------------ |
| Fit to screen | `F` | `F` |
| Reset view | `R` | `R` |
| Select all | `Cmd+A` | `Ctrl+A` |
| Copy | `Cmd+C` | `Ctrl+C` |
| Paste | `Cmd+V` | `Ctrl+V` |
| Delete | `Delete` | `Delete` |
| Undo | `Cmd+Z` | `Ctrl+Z` |
| Redo | `Cmd+Shift+Z` | `Ctrl+Shift+Z` |
| Find | `Cmd+F` | `Ctrl+F` |
| Toggle minimap | `M` | `M` |
## Troubleshooting
**Problem:** Can't connect two nodes\
**Solution:** Check that output type matches input type. Hover over ports to see schemas.
**Problem:** Flow is too large to see\
**Solution:** Press `F` to fit all, use minimap, or zoom out with mouse wheel.
**Problem:** Edges are crossing and confusing\
**Solution:** Use auto-layout, rearrange nodes manually, or split into sub-Flows.
**Problem:** Don't know what a node does\
**Solution:** Select it, check Properties Panel for description, or ask Triton.
## Next steps
* Practice building a simple Flow
* Experiment with different patterns (linear, parallel, conditional)
* Use Triton to generate and modify Flows
* Review execution traces to understand behavior
* See [Flows concept](/concepts/flows) for deeper understanding
# Canvas: Overview
Source: https://docs.triform.ai/workspace/canvas/overview
Compose systems visually with Nodes and Edges
## What you see
* Nodes: visual building blocks (Agents, Flows, Actions, Projects).
* Edges: connections that define data & control flow.
## Core interactions
* Select: click a Node.
* Open: doubleโclick to drill into Projects, Agents, or Flows.
* Context menu: rightโclick a Node or the Canvas for actions.
* Rearrange: drag Nodes to clarify structure.
## Why Canvas
* Makes complex logic legible at a glance.
* Encourages modular, reusable patterns.
* Enables debugging without diving into raw logs.
> note: Where execution happens โ You run Nodes from Properties โ Execute. The Canvas reflects structure; the Properties panel manages configuration and runs.
## Best practices
* Name Nodes clearly (e.g., `Normalize Input`, `Route by Type`).
* Group related Nodes visually.
* Keep flows shallow where possible; compose via subโFlows.
# Project View
Source: https://docs.triform.ai/workspace/canvas/project-view
Topโlevel components overview and common actions
## Key points
* Items are not connected here; itโs an overview/list.
* Only topโlevel Agents/Flows can be exposed via API or Schedule.
* Topโlevel components can contain other components.
## Common actions
* Open a topโlevel Agent/Flow to work inside it.
* Create a new Agent or Flow from the Canvas.
* Rename and organize to reflect your domain.
> tip: Design for exposure โ If you plan to expose something as an API or Schedule, keep it topโlevel and give it a stable name early.
# Chat Panel (Triton)
Source: https://docs.triform.ai/workspace/chat-panel
Conversational interface in Builder to author, wire, run, and explain
## What is the Chat Panel
The Chat Panel in the **Builder workspace** provides access to Triton, your AI assistant for building and designing systems. This is different from the **Chat workspace**, which is for using and conversing with your completed agents.
**Builder Chat Panel (Triton)** โ Build, wire, debug\
**Chat Workspace** โ Use and converse with agents
## What you can do
* Author components ("Create a Flow named ingest with input `text`").
* Wire connections ("Connect `Input.text` to `normalize.input`").
* Run executions ("Run the Flow with `{ \"text\": \"hello\" }`").
* Explain structures ("What does this Flow do?").
## @โcontext
* Type `@` to reference a component (e.g., `@summarize_text`).
* Triton focuses actions and answers on what you mention.
## Activity updates
* Triton posts status messages when it performs changes or runs tasks.
> tip: Be explicit โ Include component names and ports in your messages to avoid ambiguity and speed up Triton's actions.
# Chat History
Source: https://docs.triform.ai/workspace/chat/chat-history
Manage your conversations and chat sessions
## What you see
The left panel displays your chat history, showing all your conversation sessions with the agent.
## Core features
### Chat list
* **Recent chats** โ Your most recent conversations appear at the top
* **Chat titles** โ Auto-generated or custom names for easy identification
* **Timestamps** โ See when each chat was last active
* **Search** โ Find specific conversations quickly
### Creating chats
**New chat** โ Click the New Chat button to start a fresh conversation\
**Auto-save** โ Chats save automatically as you message\
**Naming** โ Rename chats for better organization
### Managing chats
**Switch chats** โ Click any chat to load that conversation\
**Delete chats** โ Remove conversations you no longer need\
**Pin favorites** โ Keep important chats at the top (if supported)\
**Archive old chats** โ Clean up your list without deleting (if supported)
## Organization
Keep your workspace tidy:
* Use clear, descriptive names for important chats
* Delete test or outdated conversations
* Pin frequently-used chats for quick access
* Use search to find specific topics
## Chat context
When you switch between chats:
* Each chat maintains its own conversation history
* Enabled projects may differ between chats
* The agent has no memory across different chat sessions
* Previous context is preserved when you return to a chat
> tip: Create separate chats for different projects or tasks to keep conversations focused and organized.
## Search and filters
**Search by content** โ Find chats containing specific keywords\
**Sort options** โ Order by recent, alphabetical, or custom\
**Filter by project** โ Show chats using specific projects (if supported)
# Chat Interface
Source: https://docs.triform.ai/workspace/chat/chat-interface
The main conversation area for interacting with your agent
## What you see
The central chat interface where you communicate with your AI agent, displaying your messages and the agent's responses in a conversational format.
## Core interactions
**Send messages** โ Type your message and press Enter or click Send\
**View responses** โ Agent replies appear below your messages\
**Scroll history** โ Review the full conversation thread\
**Format content** โ Markdown is supported for rich text formatting
## Features
### Message composition
* Type naturally, just like any chat interface
* Multi-line messages supported (Shift + Enter for new line)
* Paste images and files (if supported)
* Edit recent messages (depending on configuration)
### Response formatting
Agent responses can include:
* Plain text explanations
* Code blocks with syntax highlighting
* Lists and structured data
* Links and references
* Status updates and progress indicators
* **Execution steps** โ Real-time visibility into action execution with detailed step-by-step progress
* **Interactive actions** โ Actionable buttons and UI elements within chat responses
* **Chat actions** โ Quick reply buttons at the end of messages for common follow-up actions
### OAuth Widgets
When authentication is needed, interactive OAuth widgets appear directly in chat:
**How it works:**
1. The agent detects you need to connect a third-party service
2. An OAuth button appears in the chat message
3. Click to open the authorization popup
4. Complete login with the provider (Google, Slack, GitHub, etc.)
5. Popup closes automatically on success
6. Chat continues with the new connection active
**Features:**
* **Inline authorization** โ No need to leave the conversation
* **Real-time status** โ See connection progress in the chat
* **Multiple widgets** โ Connect several providers in one session
* **Automatic completion** โ Widget state tracks across messages
* **All OAuth providers supported** โ Google, Microsoft, GitHub, Slack, Linear, Notion, and more
### Chat Actions (Quick Buttons)
At the end of agent messages, you may see quick action buttons:
* **Suggested follow-ups** โ Common next steps based on context
* **Color-coded buttons** โ Visual distinction for different action types
* **Single-click actions** โ Execute actions without typing
* **Stateful interactions** โ Buttons update based on your choices
**Example buttons:**
* "Run this flow" โ Execute the current workflow
* "Deploy to production" โ Quick deploy action
* "Show me the code" โ View generated Action code
* "Edit this" โ Jump to editing mode
### Context awareness
The agent has access to:
* The full conversation history
* All enabled projects (from the right panel)
* Your organization's data and permissions
* Previous chat sessions (depending on configuration)
* **Execution context** โ Live execution data and step tracking for debugging
* **Enhanced tool calling** โ Improved reliability and error handling for agent tools
## Best practices
**Be specific** โ Clear requests get better responses\
**Reference projects** โ Mention specific project names when relevant\
**Break down complex tasks** โ Ask step-by-step for complex workflows\
**Review enabled projects** โ Make sure the agent has access to needed capabilities
> tip: If the agent doesn't have the capabilities you need, check the right panel to ensure the relevant projects are enabled.
## Keyboard shortcuts
`Enter` โ Send message\
`Shift + Enter` โ New line in message\
`Ctrl/Cmd + K` โ Clear input (if supported)\
`Up Arrow` โ Edit last message (if supported)
# Chat: Overview
Source: https://docs.triform.ai/workspace/chat/overview
Interact with your AI agents through a conversational interface
## What you see
The Chat workspace provides a dedicated environment for conversing with your AI agents, similar to ChatGPT or other chat interfaces.
**Left Panel** โ Chat history and conversation management\
**Middle Panel** โ Active chat interface with your agent\
**Right Panel** โ Project selector to enable agent capabilities
## Why use the Chat workspace
* **End-to-end conversations** โ Have extended dialogues with your agents
* **Project-powered agents** โ Enable specific projects to give your agent access to those capabilities
* **Clean interface** โ Focus on conversation without the building tools
* **History management** โ Review and continue past conversations
## When to use Chat vs Builder
**Use Chat when you want to:**
* Interact with completed agents
* Test agent behavior conversationally
* Share agent access with teammates
* Use your agent for actual work (not building)
**Use Builder when you want to:**
* Design and compose flows visually
* Debug component connections
* Configure agent tools and actions
* Build and modify your system
## Quick start
1. Navigate to the Chat workspace from the top bar
2. Select or create a new chat in the left panel
3. Enable relevant projects in the right panel
4. Start conversing with your agent in the middle
> tip: Enable projects strategically โ only enable the projects your agent needs for the current task to keep responses focused and efficient.
# Project Selector
Source: https://docs.triform.ai/workspace/chat/project-selector
Enable projects to give your agent specific capabilities
## What you see
The right panel shows all available projects in your organization that you can enable for the current agent conversation.
## How it works
**Enabled projects** = **Agent capabilities**
When you enable a project, you give the agent access to:
* All flows within that project
* All actions within that project
* All agents within that project (for nested agent calls)
* The project's variables and configuration
## Enabling and disabling projects
**Toggle on** โ Click to enable a project for this chat\
**Toggle off** โ Click to disable a project\
**Real-time updates** โ Changes take effect immediately\
**Per-chat settings** โ Each chat can have different enabled projects
## Project information
For each project, you can see:
* **Project name** โ The identifier and title
* **Description** โ What the project does
* **Components** โ Number of agents, flows, and actions
* **Status** โ Whether it's enabled for this chat
## Strategic enabling
**Enable only what you need:**
* Faster responses when fewer projects are active
* Clearer agent focus on relevant capabilities
* Reduced token usage and costs
* Less chance of unintended behavior
**When to enable multiple projects:**
* Tasks that span different domains
* Complex workflows requiring many tools
* Exploratory conversations where scope is unclear
## Permissions
You can only enable projects where you have:
* Read access at minimum
* Projects from your organization
* Projects shared with you
> tip: Start with just one or two relevant projects enabled. You can always enable more if the agent needs additional capabilities.
## Example use cases
**Customer support chat:**
* Enable: `customer_data` project
* Enable: `ticket_management` project
* Leave disabled: Internal tools, analytics projects
**Data analysis chat:**
* Enable: `data_processing` project
* Enable: `visualization` project
* Leave disabled: Customer-facing projects
**General assistant chat:**
* Enable: Multiple projects for flexibility
* Adjust based on what you're working on
# Properties โ Execute
Source: https://docs.triform.ai/workspace/properties/execute
Run components and manage exposure and API keys
## Run a component
1. Select a Node (Project, Flow, Agent, or Action).
2. Open Execute.
3. Edit the JSON payload (starting from the default).
4. **Add Modifiers** (optional) โ Configure OAuth credentials or other execution modifiers.
5. Click Run.
## Modifiers
Enhance your executions with additional context and credentials:
* **OAuth Modifiers** โ Connect third-party services (Google, Slack, GitHub, etc.)
* **Secure credential injection** โ OAuth tokens automatically passed to action execution
* **Automatic token refresh** โ No manual token management required
* **Multiple providers** โ Attach multiple OAuth connections to a single action
See [Modifiers](/concepts/modifiers) for detailed information on configuring OAuth and other modifiers.
## Projectโlevel exposure
* APIs/Schedules: choose which topโlevel components to expose.
* API key: create and manage keys for access (Project scope).
## Tips
* Keep small, realistic payload examples for quick regression checks.
* Use parallel inputs thoughtfully (see Input & Output).
* Configure modifiers before running to test OAuth integrations.
* Test with real credentials in the Execute panel before deployment.
> note: Traceability โ Executions emit logs, traces, and metrics that you can inspect later to understand runtime behavior.
# Properties โ Input & Output
Source: https://docs.triform.ai/workspace/properties/input-output
Define ports, types, defaults, and parallelism
## Controls
* Parallel (toggle) โ when ON, the component expects a list of inputs and executes each in parallel.
* Inputs/Outputs โ add or remove ports (unless theyโre fixed).
* Typing โ annotate the expected type for each I/O.
* Defaults โ set default input values used at execution time.
## Usage examples
* Add input `text: string` with default `"hello"`.
* Add output `summary: string`.
* Toggle Parallel ON to process an array of `text` items concurrently.
> tip: Keep contracts stable โ Changing I/O shapes breaks downstream edges. Stabilize names and types early to reduce refactors.
# Properties Panel: Overview
Source: https://docs.triform.ai/workspace/properties/overview
Configure and run components; sections and context awareness
## Sections
* Global โ Organization/Projectโlevel settings available to all components in the Project (e.g., Variables).
* Components โ Definition/Information and Content for the selected Node.
* Execute โ Run the selected Node with a JSON payload.
* **Modifiers** โ Configure OAuth credentials and execution modifiers (within Execute)
* Input & Output โ Define inputs/outputs, types, defaults, and parallel execution behavior.
## Modifiers Panel
Within the Execute section, you can configure modifiers that enhance your executions:
* **OAuth Modifiers** โ Connect third-party services like Google, Slack, GitHub, Microsoft, etc.
* **Credential Management** โ Securely authorize and manage OAuth connections
* **Scope Configuration** โ Set fine-grained permissions for each OAuth provider
* **Real-time Status** โ See connection status and token health
Modifiers allow your actions to securely access external APIs with automatic token management and refresh.
> note: Context aware โ The Properties Panel shows only the sections relevant to your current selection (Project, Flow, Agent, or Action).
# Properties โ Project Variables
Source: https://docs.triform.ai/workspace/properties/project-variables
Define and reference Projectโscoped configuration
## What to store
* Configuration values (e.g., feature flags, dataset names).
* Nonโsecret constants used across Actions and Flows.
## Referencing variables
* Use variables in your Actions and configuration to avoid duplicating values.
## Tips
* Prefer descriptive names (e.g., `default_temperature`, `region`).
* Scope values per Project to keep experiments isolated.
> warning: Secrets โ Store sensitive credentials in your secure mechanism of choice. Avoid committing secrets directly as plain variables.
# Top Bar
Source: https://docs.triform.ai/workspace/top-bar
Navigation, workspace switcher, breadcrumbs, profile, and deploy controls
## What you see
The top bar is consistent across both the Chat and Builder workspaces, providing global navigation and controls.
## Workspace Switcher
* Toggle between **Chat** and **Builder** workspaces
* Chat: for using and conversing with agents
* Builder: for designing and building systems
## Breadcrumbs
* Always shows your current context (e.g., Org / Project / Flow).
* Click any crumb to jump directly to that level.
## Home
* Click the Triform logo to go to the Projects dashboard.
## Profile Menu
* Organization โ switch active Org or open Organizations overview.
* Account โ account overview (coming soon).
* Log out โ end session and clear tokens.
## Deploy button
* Appears when local changes are ahead of the last deployed state.
* Click to deploy the latest changes for your current Project.
> tip: When in doubt, use breadcrumbs โ fastest way to move between Project view, Flow view, and back to the Org without losing your place.