Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
254 changes: 180 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,87 +14,165 @@

---

Exosphere is open source infrastructure to run AI agents at scale for large data and long running flows.
# Exosphere: Distributed AI Workflow Infrastructure

Exosphere lets you define plug and playable nodes that can then be run on a reliable backbone in the form of a workflow, with:
- Dynamic State Creation at runtime
- Infinite parallel agents
- Persistent state management
- Failure handling
**Exosphere** is an open-source, Kubernetes-native infrastructure platform designed to run distributed AI workflows and autonomous agents at scale. Built with Python and based on a flexible node-based architecture, Exosphere enables developers to create, deploy, and manage robust AI workflows that can handle large-scale data processing and long-running operations.

This allows developers to deploy production agents that can scale beautifully to build robust autonomous AI workflows.
![Example Workflow Run](/assets/workflow-run.png)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix image path: absolute root may break on GitHub/npm docs.

Use a relative path to ensure it renders in forks and package registries.

-![Example Workflow Run](/assets/workflow-run.png)
+![Example Workflow Run](assets/workflow-run.png)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
![Example Workflow Run](/assets/workflow-run.png)
![Example Workflow Run](assets/workflow-run.png)
🤖 Prompt for AI Agents
In README.md around line 21, the image uses an absolute path
(/assets/workflow-run.png) which can break rendering in forks and package
registries; change it to a relative path (for example assets/workflow-run.png or
./assets/workflow-run.png) so the image resolves correctly across GitHub forks
and npm docs, and commit the updated README line.


## 🚀 What Exosphere Can Do

Exosphere provides a powerful foundation for building and orchestrating AI applications with these key capabilities:

## Getting Started
### **Reliable AI Workflows at Scale**
- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
- **Dynamic State Management**: Create and manage state at runtime with persistent storage
- **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability
- **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store

- ### Installation
```bash
uv add exospherehost
```
### **Smooth Developer Experience**
- **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched
- **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs
- **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools

- ### Define your first node
Each node is an atomic reusable unit on Exosphere. Once registered, you can plug it into any workflow going forward. This could be an agent, an api call, or existing code, anything you want to be a unit of your workflow.
```python
from exospherehost import BaseNode
from pydantic import BaseModel
### **Production Ready Infrastructure**
- **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability
- **State Persistence**: Maintain workflow state across restarts and failures
- **API Integration**: Connect to external services and APIs through configurable nodes

class MyFirstNode(BaseNode):
### **Built for AI Agents**
- **Autonomous Execution**: Build agents that can make decisions and execute complex workflows
- **Data Processing**: Handle large datasets with distributed processing capabilities
- **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely

Comment on lines +27 to 47
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Markdown spacing: add blank lines after headings and before lists.

Multiple MD022/MD032 hits. Add a blank line after each heading and before its list (repeat for sections at Lines 27, 33, 39, 43).

-### **Reliable AI Workflows at Scale**
-- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
+### **Reliable AI Workflows at Scale**
+
+- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### **Reliable AI Workflows at Scale**
- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
- **Dynamic State Management**: Create and manage state at runtime with persistent storage
- **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability
- **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store
- ### Installation
```bash
uv add exospherehost
```
### **Smooth Developer Experience**
- **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched
- **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs
- **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools
- ### Define your first node
Each node is an atomic reusable unit on Exosphere. Once registered, you can plug it into any workflow going forward. This could be an agent, an api call, or existing code, anything you want to be a unit of your workflow.
```python
from exospherehost import BaseNode
from pydantic import BaseModel
### **Production Ready Infrastructure**
- **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability
- **State Persistence**: Maintain workflow state across restarts and failures
- **API Integration**: Connect to external services and APIs through configurable nodes
class MyFirstNode(BaseNode):
### **Built for AI Agents**
- **Autonomous Execution**: Build agents that can make decisions and execute complex workflows
- **Data Processing**: Handle large datasets with distributed processing capabilities
- **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely
### **Reliable AI Workflows at Scale**
- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
- **Dynamic State Management**: Create and manage state at runtime with persistent storage
- **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability
- **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store
### **Smooth Developer Experience**
- **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched
- **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs
- **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools
### **Production Ready Infrastructure**
- **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability
- **State Persistence**: Maintain workflow state across restarts and failures
- **API Integration**: Connect to external services and APIs through configurable nodes
### **Built for AI Agents**
- **Autonomous Execution**: Build agents that can make decisions and execute complex workflows
- **Data Processing**: Handle large datasets with distributed processing capabilities
- **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


28-28: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


34-34: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


38-38: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


39-39: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


43-43: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


44-44: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In README.md around lines 27 to 47, several headings lack a blank line after the
heading and before the following list (MD022/MD032 at lines 27, 33, 39, 43); fix
by inserting a single blank line immediately after each heading and ensure there
is a blank line before each list so each section follows the pattern: heading,
blank line, list content.

class Inputs(BaseModel):
city:str
#Define inputs taken by node
Whether you're building data pipelines, AI agents, or complex workflow orchestrations, Exosphere provides the infrastructure backbone to make your AI applications production-ready and scalable.

class Outputs(BaseModel):
description:str
#Output fields from this node
## 🎯 Use Cases & Applications

async def execute(self) -> Outputs:
return Outputs(descriptor_agent(self.inputs.city))
#Execution function:
# >>Agent
# >>Existing Code
# >>Anything else you want to do!
```
Exosphere is perfect for a wide range of AI and automation scenarios:

- **Data Processing & ETL Pipelines**
- **AI Agent Orchestration**
- **Content Generation & Analysis**
- **API Integration & Automation**

## Architecture Overview
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Remove extra space in H2.

Resolves MD019.

-##  Architecture Overview
+## Architecture Overview
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Architecture Overview
## Architecture Overview
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

59-59: Multiple spaces after hash on atx style heading

(MD019, no-multiple-space-atx)

🤖 Prompt for AI Agents
In README.md around lines 59 to 59, the H2 header has an extra space; remove the
extra space so the header uses a single space after the two hashes and no
trailing spaces (i.e., convert the current malformed header into a standard
Markdown H2 with exactly one space after "##" and no leading/trailing
whitespace).


Exosphere is built on a flexible, node-based architecture that makes it easy to create complex workflows:

![Exosphere Architecture](assets/exosphere-concepts.png)

### **Core Components**

- **Nodes**: Atomic, reusable units of work that can be AI agents, API calls, data processors, or any custom logic
- **Runtime**: The execution environment that manages and orchestrates your nodes
- **State Manager**: Handles persistent state across workflow executions
- **Dashboard**: Visual interface for monitoring and managing workflows
- **Graphs**: Define the flow and dependencies between nodes

### **Key Concepts**

![Building blocks of Exosphere](assets/exosphere-components.png)

- **Fanout**: Distribute work across multiple parallel instances of a node
- **Unite**: Combine results from multiple parallel executions
- **Signals**: Inter-node communication and event handling
- **Retry Policy**: Configurable failure handling and recovery
- **Store**: Persistent storage for workflow state and data

### **Deployment Options**

- **Local Development**: Run with Docker Compose for quick setup
- **Kubernetes**: Production-ready deployment on K8s clusters
- **Cloud**: Deploy on any cloud provider with Kubernetes support

## 🚀 Getting Started

### Prerequisites

- Python 3.12+
- [uv](https://docs.astral.sh/uv/) (recommended) or pip

### Step 1: Installation

```bash
uv add exospherehost
```

Comment on lines +98 to +101
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Offer pip alternative alongside uv.

Helps users without uv installed.

 ```bash
 uv add exospherehost
+pip install exospherehost  # alternatively, if you prefer pip

<details>
<summary>🤖 Prompt for AI Agents</summary>

In README.md around lines 98 to 101, the current install snippet only shows the
"uv add exospherehost" command; update the code block to offer a pip alternative
for users without uv by adding a second line with "pip install exospherehost"
(clearly labeled as an alternative), keeping the bash code block and formatting
consistent with the surrounding documentation.


</details>

<!-- fingerprinting:phantom:triton:chinchilla -->

<!-- This is an auto-generated comment by CodeRabbit -->

### Step 2: Create Your First Node

Each node is an atomic, reusable unit in Exosphere. Once registered, you can plug it into any workflow. Nodes can be AI agents, API calls, data processors, or any custom logic you want to execute.

```python
from exospherehost import BaseNode
from pydantic import BaseModel

class CityAnalyzerNode(BaseNode):
"""A node that analyzes and describes a city using AI"""

class Inputs(BaseModel):
city: str
analysis_type: str = "general" # general, tourism, business, etc.

class Outputs(BaseModel):
description: str
key_features: str
score: str

class Secrets(BaseModel):
openai_api_key: str # Optional: for AI-powered analysis

async def execute(self) -> Outputs:
# Your custom logic here - could be:
# - AI agent calls
# - API requests
# - Data processing
# - Database queries
# - Any Python code!

description = f"Analysis of {self.inputs.city}"
features = ["culture", "economy", "lifestyle"]
score = 8.5

return self.Outputs(
description=description,
key_features=json.dumps(features),
score=str(score)
)
```



Create the node and add it to a runtime to enable execution:
### Step 3: Create and Start the Runtime

Create the runtime and register your nodes:
```python
from exospherehost import Runtime

Runtime(
name="my-first-runtime",
namespace="hello-world",
nodes=[
MyFirstNode
]
).start()
# Initialize the runtime with your nodes
runtime = Runtime(
name="city-analysis-runtime",
namespace="my-project",
nodes=[CityAnalyzerNode]
)

# Start the runtime (this will block the main thread)
runtime.start()
```
Comment on lines +146 to 161
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Fenced code blocks: remove indentation and add surrounding blank lines.

Fixes MD031 and improves rendering.

-  ```python
+```python
 from exospherehost import Runtime
@@
-  # Initialize the runtime with your nodes
-  runtime = Runtime(
+ # Initialize the runtime with your nodes
+ runtime = Runtime(
@@
-  # Start the runtime (this will block the main thread)
-  runtime.start()
-  ```
+ # Start the runtime (this will block the main thread)
+ runtime.start()
+```
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

149-149: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
In README.md around lines 146 to 161, the fenced Python code block is indented
and missing surrounding blank lines which triggers MD031 and renders
incorrectly; remove the leading indentation from the fenced code block and
ensure there is a blank line before the opening ```python and after the closing
``` so the block is top-level and properly delimited, and also adjust the
internal comment indentation so the code lines are left-aligned inside the
fence.


- ### Define your first graph (Beta)
**Run your application:**
```bash
uv run main.py
```

Your runtime is now running and ready to process workflows! 🎉

Comment on lines +163 to +169
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Also add blank lines around this fenced block.

Resolves MD031.

-  **Run your application:**
-  ```bash
+  **Run your application:**
+
+```bash
   uv run main.py
-  ```
+```
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

164-164: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
In README.md around lines 163 to 169, the fenced code block lacks surrounding
blank lines which violates MD031; add one blank line before the bold "Run your
application:" line and one blank line after the closing ``` so the section reads
with a blank line, the bold line, another blank line, the fenced block, then
another blank line before the following text.

### Step 4: Define Your First Graph

Graphs can be defined using JSON objects or with the new model-based Python SDK (beta) for better type safety and validation. See [Graph definitions](https://docs.exosphere.host/exosphere/create-graph/) for more examples.

**JSON Definition (Traditional):**
```json
{
"secrets": {},
"nodes": [
{
"node_name": "MyFirstNode",
"namespace": "hello-world",
"identifier": "describe_city",
"inputs": {
"city": "initial"
},
"next_nodes": []
}
]
}
```

**Model-Based Definition (Beta):**

```python
from exospherehost import StateManager, GraphNodeModel, RetryPolicyModel, RetryStrategyEnum

Expand Down Expand Up @@ -146,40 +224,68 @@ docker compose -f docker-compose-with-mongodb.yml up -d
- Docker Compose automatically loads `.env` files from the working directory
- Create your `.env` file in the same directory as your docker-compose file

> **⚠️ Security Note**: Variables prefixed with `NEXT_PUBLIC_` are embedded in client bundles and visible to browsers. Never store real secrets in `NEXT_PUBLIC_` variables - use server-side environment variables instead.

Access your services:

- **Dashboard**: `http://localhost:3000`
- **API**: `http://localhost:8000`

> **📝 Note**: This configuration is for **development and testing only**. For production deployments, environment variable customization, and advanced configuration options, please read the complete **[Docker Compose Setup Guide](https://docs.exosphere.host/docker-compose-setup)**.

## Documentation
## 📚 Documentation & Resources

### **Essential Guides**
- **[Getting Started Guide](https://docs.exosphere.host/getting-started)**: Complete walkthrough for new users
- **[Docker Compose Setup](https://docs.exosphere.host/docker-compose-setup)**: Run Exosphere locally in minutes
- **[Architecture Guide](https://docs.exosphere.host/exosphere/architecture)**: Understand core concepts like fanout and unite
- **[Youtube Walkthroughs](https://www.youtube.com/@exospherehost)**: Step by step demos on Exosphere and how to build reliable flows with sample code.
- **[Featured Exosphere Projects](https://github.com/exospherehost/exosphereprojects)**: Templates on common projects on Exosphere, pull and run!

### **Advanced Topics**
- **[State Manager Setup](https://docs.exosphere.host/exosphere/state-manager-setup)**: Production deployment guide
- **[Dashboard Guide](https://docs.exosphere.host/exosphere/dashboard)**: Visual workflow management
- **[Graph Definitions](https://docs.exosphere.host/exosphere/create-graph/)**: Building complex workflows

### **Community & Support**
- **[Official Documentation](https://docs.exosphere.host)**: Complete reference and tutorials
- **[Discord Community](https://discord.com/invite/zT92CAgvkj)**: Get help and connect with other developers
- **[GitHub Issues](https://github.com/exospherehost/exospherehost/issues)**: Report bugs and request features
- **[PyPI Package](https://pypi.org/project/exospherehost/)**: Latest stable releases

Comment on lines +234 to 253
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Headings/lists need blank lines in “Documentation & Resources”.

Fix MD022/MD032 by inserting blank lines after each subsection heading and before list items.

-### **Essential Guides**
-- **[Getting Started Guide](...)**
+### **Essential Guides**
+
+- **[Getting Started Guide](...)**

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

236-236: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


237-237: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


243-243: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


244-244: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


248-248: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


249-249: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In README.md around lines 234 to 253, the "Documentation & Resources" section is
missing blank lines after subsection headings and before list items which
triggers MD022/MD032; add a single blank line after each "Essential Guides",
"Advanced Topics", and "Community & Support" heading (and any other subsection
headings in this block) and ensure there is a blank line immediately before each
list block so each heading is separated from its list items.

For comprehensive documentation and guides, check out:

- **[Docker Compose Setup](https://docs.exosphere.host/docker-compose-setup)**: Complete guide for running Exosphere locally with Docker Compose.
- **[Getting Started Guide](https://docs.exosphere.host/getting-started)**
- **[State Manager Setup Guide](https://docs.exosphere.host/exosphere/state-manager-setup)**: Step-by-step instructions for running the Exosphere backend locally or in production.
- **[Dashboard Guide](https://docs.exosphere.host/exosphere/dashboard)**: Learn how to set up and use the Exosphere web dashboard.
- **[Architecture](https://docs.exosphere.host/exosphere/architecture)**: Understand core ideas on building graphs like fanout and unite.

You can also visit the [official documentation site](https://docs.exosphere.host) for the latest updates and more resources.

## 🌟 Open Source Commitment

We believe that open source is the foundation of innovation and progress. Exosphere is our contribution to this movement, and we're committed to supporting the community in multiple ways:

### **Our Promise to the Community**

## Open Source Commitment
1. **🔄 Open Source First**: The majority of our codebase is open source and available to everyone
2. **💰 Giving Back**: A portion of our profits goes directly to supporting open source projects and communities
3. **🎓 Mentorship**: We actively collaborate with student programs to mentor the next generation of developers
4. **🤝 Community Driven**: We welcome contributions, feedback, and collaboration from developers worldwide

We believe that humanity would not have been able to achieve the level of innovation and progress we have today without the support of open source and community, we want to be a part of this movement and support the open source community. In following ways:
### **Get Involved**

1. We will be open sourcing majority of our codebase for exosphere.host and making it available to the community. We welcome all sort of contributions and feedback from the community and will be happy to collaborate with you.
2. For whatever the profits which we generate from exosphere.host, we will be donating a portion of it to open source projects and communities. If you have any questions, suggestions or ideas.
3. We would be further collaborating with various open source student programs to provide with the support and encourage and mentor the next generation of open source contributors.
- **Contributors**: Help us build the future of AI infrastructure
- **Users**: Your feedback shapes our roadmap and priorities
- **Students**: Join our mentorship programs and grow your skills
- **Organizations**: Partner with us to advance open source AI tools

Please feel free to reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host). Lets push the boundaries of possibilities for humanity together!
**Ready to make a difference?** Reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host) and let's push the boundaries of what's possible together! 🚀

Comment on lines 256 to 276
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Minor copy edit: email CTA.

Optional: replace “Reach out to us at … and let's …” with a neutral CTA to suit org tone; current is fine if brand voice prefers casual.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

256-256: Multiple consecutive blank lines
Expected: 1; Actual: 4

(MD012, no-multiple-blanks)

🤖 Prompt for AI Agents
In README.md around lines 256 to 276, the email call-to-action uses a casual
phrase "Reach out to us at [nivedit@exosphere.host] and let's push the
boundaries..." — replace that sentence with a neutral, professional CTA (for
example: "Contact us at [nivedit@exosphere.host] to learn more or discuss
collaboration.") to match a more formal org tone while keeping the existing
email link; ensure punctuation and markdown mailto syntax remain correct.

## 🎯 Ready to Get Started?

Exosphere is designed to make AI workflow development accessible, scalable, and production-ready. Whether you're building your first AI agent or scaling to thousands of parallel workflows, Exosphere provides the infrastructure you need.

### **Next Steps:**
1. **⭐ Star this repository** to show your support
2. **🚀 Try the quick start** with our Docker Compose setup
3. **💬 Join our Discord** community for help and discussions
4. **📖 Read the docs** for comprehensive guides and examples
5. **🤝 Contribute** to help us build the future of AI infrastructure

Comment on lines +281 to +287
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Add blank line after “Next Steps” heading.

Resolves MD022/MD032.

-### **Next Steps:**
-1. **⭐ Star this repository** to show your support
+### **Next Steps:**
+
+1. **⭐ Star this repository** to show your support
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### **Next Steps:**
1. **⭐ Star this repository** to show your support
2. **🚀 Try the quick start** with our Docker Compose setup
3. **💬 Join our Discord** community for help and discussions
4. **📖 Read the docs** for comprehensive guides and examples
5. **🤝 Contribute** to help us build the future of AI infrastructure
### **Next Steps:**
1. **⭐ Star this repository** to show your support
2. **🚀 Try the quick start** with our Docker Compose setup
3. **💬 Join our Discord** community for help and discussions
4. **📖 Read the docs** for comprehensive guides and examples
5. **🤝 Contribute** to help us build the future of AI infrastructure
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

281-281: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


282-282: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In README.md around lines 281 to 287, the "### **Next Steps:**" heading is
immediately followed by the list which violates MD022/MD032; insert a single
blank line after the heading so the heading is separated from the list (ensure
exactly one empty line and no extra trailing spaces) to satisfy the Markdown
lint rules.

---

## Contributing

Expand Down
Binary file added assets/exosphere-components.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/exosphere-concepts.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/workflow-run.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.