├── backend ├── .gitignore ├── .env.template ├── Makefile ├── README.md ├── pyproject.toml ├── src │ ├── settings.py │ ├── auth.py │ ├── open_interpreter.py │ └── e2b_tool.py ├── Dockerfile └── server.py ├── .gitignore ├── supabase-auth.png ├── frontend ├── public │ ├── favicon.ico │ ├── favicon-old.ico │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-48x48.png │ ├── agentboard_logo.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ └── thirteen.svg ├── app │ ├── opengraph-image.png │ ├── twitter-image.png │ ├── error │ │ └── page.tsx │ ├── middleware.ts │ ├── page.tsx │ ├── auth │ │ └── callback │ │ │ └── route.ts │ ├── api │ │ ├── create-sandbox │ │ │ └── route.ts │ │ └── upload-file │ │ │ └── route.ts │ ├── globals.css │ ├── layout.tsx │ └── privacypolicy │ │ └── page.js ├── assets │ └── fonts │ │ ├── Inter-Bold.woff │ │ └── Inter-Regular.woff ├── postcss.config.js ├── .npmrc ├── lib │ ├── constants.ts │ ├── utils.ts │ ├── fonts.ts │ ├── agents.ts │ └── hooks │ │ ├── use-at-bottom.tsx │ │ ├── use-enter-submit.tsx │ │ ├── use-copy-to-clipboard.tsx │ │ └── use-agent.tsx ├── next-env.d.ts ├── utils │ ├── supabase │ │ ├── client.ts │ │ ├── server.ts │ │ └── middleware.ts │ └── posthog-server.ts ├── .env.template ├── README.md ├── components │ ├── markdown.tsx │ ├── feedback.tsx │ ├── providers.tsx │ ├── tailwind-indicator.tsx │ ├── external-link.tsx │ ├── chat-scroll-anchor.tsx │ ├── ui │ │ ├── separator.tsx │ │ ├── tooltip.tsx │ │ ├── button.tsx │ │ ├── dropdown-menu.tsx │ │ ├── dialog.tsx │ │ ├── codeblock.tsx │ │ └── icons.tsx │ ├── button-scroll-to-bottom.tsx │ ├── chat-message-actions.tsx │ ├── chat-list.tsx │ ├── header.tsx │ ├── anon-shield.tsx │ ├── login-button.tsx │ ├── empty-screen.tsx │ ├── chat-panel.tsx │ ├── agent-selector.tsx │ ├── user-menu.tsx │ ├── prompt-form.tsx │ ├── chat-message.tsx │ └── chat.tsx ├── next.config.js ├── .gitignore ├── LICENSE ├── .eslintrc.json ├── tsconfig.json ├── prettier.config.cjs ├── package.json └── tailwind.config.js ├── .env.template ├── docker-compose.yml ├── sandbox-template ├── e2b.Dockerfile ├── e2b.toml ├── requirements.txt └── README.md ├── terraform ├── init │ ├── variables.tf │ ├── outputs.tf │ └── main.tf └── github-action │ ├── variables.tf │ └── main.tf ├── .github └── workflows │ ├── template.yml │ ├── backend.yml │ └── deploy.yml ├── Makefile ├── README.md ├── variables.tf ├── .terraform.lock.hcl └── main.tf /backend/.gitignore: -------------------------------------------------------------------------------- 1 | backend-env/ 2 | __pycache__/ -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vercel 2 | agent_frameworks 3 | .idea 4 | .vscode 5 | .env 6 | .next 7 | -------------------------------------------------------------------------------- /supabase-auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/supabase-auth.png -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /backend/.env.template: -------------------------------------------------------------------------------- 1 | # Required 2 | SUPABASE_URL= 3 | SUPABASE_KEY= 4 | OPENAI_API_KEY= 5 | E2B_API_KEY= 6 | -------------------------------------------------------------------------------- /frontend/app/opengraph-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/app/opengraph-image.png -------------------------------------------------------------------------------- /frontend/app/twitter-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/app/twitter-image.png -------------------------------------------------------------------------------- /frontend/public/favicon-old.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/favicon-old.ico -------------------------------------------------------------------------------- /.env.template: -------------------------------------------------------------------------------- 1 | # Required for Terraform 2 | GCP_PROJECT_ID= 3 | GCP_REGION= 4 | GCP_ZONE= 5 | TERRAFORM_STATE_BUCKET= 6 | -------------------------------------------------------------------------------- /frontend/app/error/page.tsx: -------------------------------------------------------------------------------- 1 | export default function ErrorPage() { 2 | return
Sorry, something went wrong
3 | } 4 | -------------------------------------------------------------------------------- /frontend/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/favicon-16x16.png -------------------------------------------------------------------------------- /frontend/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/favicon-32x32.png -------------------------------------------------------------------------------- /frontend/public/favicon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/favicon-48x48.png -------------------------------------------------------------------------------- /frontend/assets/fonts/Inter-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/assets/fonts/Inter-Bold.woff -------------------------------------------------------------------------------- /frontend/public/agentboard_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/agentboard_logo.png -------------------------------------------------------------------------------- /frontend/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/apple-touch-icon.png -------------------------------------------------------------------------------- /frontend/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /frontend/assets/fonts/Inter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/assets/fonts/Inter-Regular.woff -------------------------------------------------------------------------------- /frontend/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/e2b-dev/agentboard/HEAD/frontend/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | backend: 3 | build: 4 | context: backend 5 | ports: 6 | - "8080:8080" 7 | env_file: backend/.env 8 | -------------------------------------------------------------------------------- /frontend/.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true 2 | auto-install-peers=true 3 | exclude-links-from-lockfile=true 4 | prefer-workspace-packages=false 5 | link-workspace-packages=false -------------------------------------------------------------------------------- /frontend/lib/constants.ts: -------------------------------------------------------------------------------- 1 | const CHAT_API_ENDPOINT = 2 | process.env.NODE_ENV === 'development' 3 | ? 'http://localhost:8080/chat' 4 | : `${process.env.NEXT_PUBLIC_AGENTBOARD_API_URL}/chat` 5 | export { CHAT_API_ENDPOINT } 6 | -------------------------------------------------------------------------------- /frontend/next-env.d.ts: -------------------------------------------------------------------------------- 1 | ///27 | Agentboard is the easiest way to use an AI agent in the browser. 28 |
29 |30 | Specify a task, and Agentboard will write and execute code to complete 31 | it. 32 |
33 |34 | You'll find it useful for CSV analysis, image manipulation, or 35 | web scraping. 36 |
37 |38 | Try one of the following examples: 39 |
40 |{children}
77 | },
78 | a({ children, href }) {
79 | if (href && href.includes('/home/user/')) {
80 | const extractedPath =
81 | '/home/user/' + href.split('/home/user/')[1]
82 | return (
83 |
90 | )
91 | }
92 | return {children}
93 | },
94 | p({ children }) {
95 | return {children}
96 | }, 97 | code({ node, inline, className, children, ...props }) { 98 | if (children.length) { 99 | if (children[0] == '▍') { 100 | return ( 101 | ▍ 102 | ) 103 | } 104 | 105 | children[0] = (children[0] as string).replace('`▍`', '▍') 106 | } 107 | 108 | const match = /language-(\w+)/.exec(className || '') 109 | 110 | if (inline) { 111 | return ( 112 |
113 | {children}
114 |
115 | )
116 | }
117 |
118 | return (
119 | 443 | Drop files to upload 444 |
445 |Finishing sandbox bootup...
460 |
461 |
Last updated: December 18, 2023
12 |13 | This Privacy Policy describes Our policies and procedures on the 14 | collection, use and disclosure of Your information when You use the 15 | Service and tells You about Your privacy rights and how the law protects 16 | You. 17 |
18 |19 | We use Your Personal data to provide and improve the Service. By using 20 | the Service, You agree to the collection and use of information in 21 | accordance with this Privacy Policy. This Privacy Policy has been 22 | created with the help of the{' '} 23 | 27 | Free Privacy Policy Generator 28 | 29 | . 30 |
31 |34 | The words of which the initial letter is capitalized have meanings 35 | defined under the following conditions. The following definitions shall 36 | have the same meaning regardless of whether they appear in singular or 37 | in plural. 38 |
39 |For the purposes of this Privacy Policy:
41 |44 | Account means a unique account created for You to 45 | access our Service or parts of our Service. 46 |
47 |50 | Affiliate means an entity that controls, is 51 | controlled by or is under common control with a party, where 52 | "control" means ownership of 50% or more of the shares, 53 | equity interest or other securities entitled to vote for election of 54 | directors or other managing authority. 55 |
56 |59 | Company (referred to as either "the 60 | Company", "We", "Us" or "Our" in 61 | this Agreement) refers to Agentboard. 62 |
63 |66 | Cookies are small files that are placed on Your 67 | computer, mobile device or any other device by a website, containing 68 | the details of Your browsing history on that website among its many 69 | uses. 70 |
71 |74 | Country refers to: New York, United States 75 |
76 |79 | Device means any device that can access the Service 80 | such as a computer, a cellphone or a digital tablet. 81 |
82 |85 | Personal Data is any information that relates to an 86 | identified or identifiable individual. 87 |
88 |91 | Service refers to the Website. 92 |
93 |96 | Service Provider means any natural or legal person 97 | who processes the data on behalf of the Company. It refers to 98 | third-party companies or individuals employed by the Company to 99 | facilitate the Service, to provide the Service on behalf of the 100 | Company, to perform services related to the Service or to assist the 101 | Company in analyzing how the Service is used. 102 |
103 |106 | Third-party Social Media Service refers to any 107 | website or any social network website through which a User can log 108 | in or create an account to use the Service. 109 |
110 |113 | Usage Data refers to data collected automatically, 114 | either generated by the use of the Service or from the Service 115 | infrastructure itself (for example, the duration of a page visit). 116 |
117 |120 | Website refers to Agentboard, accessible from{' '} 121 | 126 | https://agentboard.dev 127 | 128 |
129 |132 | You means the individual accessing or using the 133 | Service, or the company, or other legal entity on behalf of which 134 | such individual is accessing or using the Service, as applicable. 135 |
136 |142 | While using Our Service, We may ask You to provide Us with certain 143 | personally identifiable information that can be used to contact or 144 | identify You. Personally identifiable information may include, but is 145 | not limited to: 146 |
147 |Email address
150 |First name and last name
153 |Phone number
156 |Usage Data
159 |Usage Data is collected automatically when using the Service.
163 |164 | Usage Data may include information such as Your Device's Internet 165 | Protocol address (e.g. IP address), browser type, browser version, the 166 | pages of our Service that You visit, the time and date of Your visit, 167 | the time spent on those pages, unique device identifiers and other 168 | diagnostic data. 169 |
170 |171 | When You access the Service by or through a mobile device, We may 172 | collect certain information automatically, including, but not limited 173 | to, the type of mobile device You use, Your mobile device unique ID, the 174 | IP address of Your mobile device, Your mobile operating system, the type 175 | of mobile Internet browser You use, unique device identifiers and other 176 | diagnostic data. 177 |
178 |179 | We may also collect information that Your browser sends whenever You 180 | visit our Service or when You access the Service by or through a mobile 181 | device. 182 |
183 |185 | The Company allows You to create an account and log in to use the 186 | Service through the following Third-party Social Media Services: 187 |
188 |196 | If You decide to register through or otherwise grant us access to a 197 | Third-Party Social Media Service, We may collect Personal data that is 198 | already associated with Your Third-Party Social Media Service's 199 | account, such as Your name, Your email address, Your activities or Your 200 | contact list associated with that account. 201 |
202 |203 | You may also have the option of sharing additional information with the 204 | Company through Your Third-Party Social Media Service's account. If 205 | You choose to provide such information and Personal Data, during 206 | registration or otherwise, You are giving the Company permission to use, 207 | share, and store it in a manner consistent with this Privacy Policy. 208 |
209 |211 | We use Cookies and similar tracking technologies to track the activity 212 | on Our Service and store certain information. Tracking technologies used 213 | are beacons, tags, and scripts to collect and track information and to 214 | improve and analyze Our Service. The technologies We use may include: 215 |
216 |236 | Cookies can be "Persistent" or "Session" Cookies. 237 | Persistent Cookies remain on Your personal computer or mobile device 238 | when You go offline, while Session Cookies are deleted as soon as You 239 | close Your web browser. Learn more about cookies on the{' '} 240 | 244 | Free Privacy Policy website 245 | {' '} 246 | article. 247 |
248 |249 | We use both Session and Persistent Cookies for the purposes set out 250 | below: 251 |
252 |255 | Necessary / Essential Cookies 256 |
257 |Type: Session Cookies
258 |Administered by: Us
259 |260 | Purpose: These Cookies are essential to provide You with services 261 | available through the Website and to enable You to use some of its 262 | features. They help to authenticate users and prevent fraudulent use 263 | of user accounts. Without these Cookies, the services that You have 264 | asked for cannot be provided, and We only use these Cookies to 265 | provide You with those services. 266 |
267 |270 | Cookies Policy / Notice Acceptance Cookies 271 |
272 |Type: Persistent Cookies
273 |Administered by: Us
274 |275 | Purpose: These Cookies identify if users have accepted the use of 276 | cookies on the Website. 277 |
278 |281 | Functionality Cookies 282 |
283 |Type: Persistent Cookies
284 |Administered by: Us
285 |286 | Purpose: These Cookies allow us to remember choices You make when 287 | You use the Website, such as remembering your login details or 288 | language preference. The purpose of these Cookies is to provide You 289 | with a more personal experience and to avoid You having to re-enter 290 | your preferences every time You use the Website. 291 |
292 |295 | For more information about the cookies we use and your choices regarding 296 | cookies, please visit our Cookies Policy or the Cookies section of our 297 | Privacy Policy. 298 |
299 |The Company may use Personal Data for the following purposes:
301 |304 | To provide and maintain our Service, including to 305 | monitor the usage of our Service. 306 |
307 |310 | To manage Your Account: to manage Your registration 311 | as a user of the Service. The Personal Data You provide can give You 312 | access to different functionalities of the Service that are 313 | available to You as a registered user. 314 |
315 |318 | For the performance of a contract: the development, 319 | compliance and undertaking of the purchase contract for the 320 | products, items or services You have purchased or of any other 321 | contract with Us through the Service. 322 |
323 |326 | To contact You: To contact You by email, telephone 327 | calls, SMS, or other equivalent forms of electronic communication, 328 | such as a mobile application's push notifications regarding 329 | updates or informative communications related to the 330 | functionalities, products or contracted services, including the 331 | security updates, when necessary or reasonable for their 332 | implementation. 333 |
334 |337 | To provide You with news, special offers and 338 | general information about other goods, services and events which we 339 | offer that are similar to those that you have already purchased or 340 | enquired about unless You have opted not to receive such 341 | information. 342 |
343 |346 | To manage Your requests: To attend and manage Your 347 | requests to Us. 348 |
349 |352 | For business transfers: We may use Your information 353 | to evaluate or conduct a merger, divestiture, restructuring, 354 | reorganization, dissolution, or other sale or transfer of some or 355 | all of Our assets, whether as a going concern or as part of 356 | bankruptcy, liquidation, or similar proceeding, in which Personal 357 | Data held by Us about our Service users is among the assets 358 | transferred. 359 |
360 |363 | For other purposes: We may use Your information for 364 | other purposes, such as data analysis, identifying usage trends, 365 | determining the effectiveness of our promotional campaigns and to 366 | evaluate and improve our Service, products, services, marketing and 367 | your experience. 368 |
369 |We may share Your personal information in the following situations:
372 |414 | The Company will retain Your Personal Data only for as long as is 415 | necessary for the purposes set out in this Privacy Policy. We will 416 | retain and use Your Personal Data to the extent necessary to comply with 417 | our legal obligations (for example, if we are required to retain your 418 | data to comply with applicable laws), resolve disputes, and enforce our 419 | legal agreements and policies. 420 |
421 |422 | The Company will also retain Usage Data for internal analysis purposes. 423 | Usage Data is generally retained for a shorter period of time, except 424 | when this data is used to strengthen the security or to improve the 425 | functionality of Our Service, or We are legally obligated to retain this 426 | data for longer time periods. 427 |
428 |430 | Your information, including Personal Data, is processed at the 431 | Company's operating offices and in any other places where the 432 | parties involved in the processing are located. It means that this 433 | information may be transferred to — and maintained on — computers 434 | located outside of Your state, province, country or other governmental 435 | jurisdiction where the data protection laws may differ than those from 436 | Your jurisdiction. 437 |
438 |439 | Your consent to this Privacy Policy followed by Your submission of such 440 | information represents Your agreement to that transfer. 441 |
442 |443 | The Company will take all steps reasonably necessary to ensure that Your 444 | data is treated securely and in accordance with this Privacy Policy and 445 | no transfer of Your Personal Data will take place to an organization or 446 | a country unless there are adequate controls in place including the 447 | security of Your data and other personal information. 448 |
449 |451 | You have the right to delete or request that We assist in deleting the 452 | Personal Data that We have collected about You. 453 |
454 |455 | Our Service may give You the ability to delete certain information about 456 | You from within the Service. 457 |
458 |459 | You may update, amend, or delete Your information at any time by signing 460 | in to Your Account, if you have one, and visiting the account settings 461 | section that allows you to manage Your personal information. You may 462 | also contact Us to request access to, correct, or delete any personal 463 | information that You have provided to Us. 464 |
465 |466 | Please note, however, that We may need to retain certain information 467 | when we have a legal obligation or lawful basis to do so. 468 |
469 |472 | If the Company is involved in a merger, acquisition or asset sale, Your 473 | Personal Data may be transferred. We will provide notice before Your 474 | Personal Data is transferred and becomes subject to a different Privacy 475 | Policy. 476 |
477 |479 | Under certain circumstances, the Company may be required to disclose 480 | Your Personal Data if required to do so by law or in response to valid 481 | requests by public authorities (e.g. a court or a government agency). 482 |
483 |485 | The Company may disclose Your Personal Data in the good faith belief 486 | that such action is necessary to: 487 |
488 |502 | The security of Your Personal Data is important to Us, but remember that 503 | no method of transmission over the Internet, or method of electronic 504 | storage is 100% secure. While We strive to use commercially acceptable 505 | means to protect Your Personal Data, We cannot guarantee its absolute 506 | security. 507 |
508 |510 | Our Service does not address anyone under the age of 13. We do not 511 | knowingly collect personally identifiable information from anyone under 512 | the age of 13. If You are a parent or guardian and You are aware that 513 | Your child has provided Us with Personal Data, please contact Us. If We 514 | become aware that We have collected Personal Data from anyone under the 515 | age of 13 without verification of parental consent, We take steps to 516 | remove that information from Our servers. 517 |
518 |519 | If We need to rely on consent as a legal basis for processing Your 520 | information and Your country requires consent from a parent, We may 521 | require Your parent's consent before We collect and use that 522 | information. 523 |
524 |526 | Our Service may contain links to other websites that are not operated by 527 | Us. If You click on a third party link, You will be directed to that 528 | third party's site. We strongly advise You to review the Privacy 529 | Policy of every site You visit. 530 |
531 |532 | We have no control over and assume no responsibility for the content, 533 | privacy policies or practices of any third party sites or services. 534 |
535 |537 | We may update Our Privacy Policy from time to time. We will notify You 538 | of any changes by posting the new Privacy Policy on this page. 539 |
540 |541 | We will let You know via email and/or a prominent notice on Our Service, 542 | prior to the change becoming effective and update the "Last 543 | updated" date at the top of this Privacy Policy. 544 |
545 |546 | You are advised to review this Privacy Policy periodically for any 547 | changes. Changes to this Privacy Policy are effective when they are 548 | posted on this page. 549 |
550 |552 | If you have any questions about this Privacy Policy, You can contact us: 553 |
554 |