+
+
+{{< how-to-expand "Get started" "1" "BEGINNER-FRIENDLY" "light" >}}
+{{< cards >}}
+{{% card link="/data-ai/get-started/capture-sync/" noimage="true" %}}
+{{< /cards >}}
+{{< /how-to-expand >}}
+
+{{< how-to-expand "Manage data" "4" "BEGINNER-FRIENDLY" "middle" >}}
+{{< cards >}}
+{{% card link="/data-ai/data/query/" noimage="true" %}}
+{{% card link="/data-ai/data/visualize/" noimage="true" %}}
+{{% card link="/data-ai/data/alert-on-data/" noimage="true" %}}
+{{% card link="/data-ai/data/export/" noimage="true" %}}
+{{< /cards >}}
+{{< /how-to-expand >}}
+
+{{< how-to-expand "Leverage AI" "8" "INTERMEDIATE" "dark" >}}
+{{< cards >}}
+{{% card link="/data-ai/ai/create-dataset/" noimage="true" %}}
+{{% card link="/data-ai/ai/train-tflite/" noimage="true" %}}
+{{% card link="/data-ai/ai/train/" noimage="true" %}}
+{{% card link="/data-ai/ai/deploy/" noimage="true" %}}
+{{% card link="/data-ai/ai/run-inference/" noimage="true" %}}
+{{% card link="/data-ai/ai/alert/" noimage="true" %}}
+{{% card link="/data-ai/ai/act/" noimage="true" %}}
+{{< /cards >}}
+{{< /how-to-expand >}}
\ No newline at end of file
diff --git a/docs/data-ai/reference/data/_index.md b/docs/data-ai/reference/data/_index.md
index c11448dd9e..22d52cab7c 100644
--- a/docs/data-ai/reference/data/_index.md
+++ b/docs/data-ai/reference/data/_index.md
@@ -19,6 +19,7 @@ aliases:
no_service: true
date: "2022-01-01"
# updated: "" # When the content was last entirely checked
+toc_hide: true
---
The data management service captures data from one or more {{< glossary_tooltip term_id="resource" text="resources" >}} locally, and syncs it to cloud storage when a connection to the cloud is available.
diff --git a/docs/data-ai/reference/ml.md b/docs/data-ai/reference/ml.md
index 5da7d8985b..9ee201216e 100644
--- a/docs/data-ai/reference/ml.md
+++ b/docs/data-ai/reference/ml.md
@@ -20,6 +20,7 @@ images: ["/services/icons/ml.svg"]
date: "2024-09-03"
# updated: "" # When the content was last entirely checked
# SME: Aaron Casas
+toc_hide: true
---
Machine learning (ML) provides your machines with the ability to adjust their behavior based on models that recognize patterns or make predictions.
diff --git a/docs/data-ai/reference/vision/_index.md b/docs/data-ai/reference/vision/_index.md
index 018e076807..ccdf358e59 100644
--- a/docs/data-ai/reference/vision/_index.md
+++ b/docs/data-ai/reference/vision/_index.md
@@ -20,6 +20,7 @@ aliases:
date: "2022-01-01"
# updated: "" # When the content was last entirely checked
# SMEs: Bijan, Khari
+toc_hide: true
---
The vision service enables your machine to use its on-board [cameras](/components/camera/) to intelligently see and interpret the world around it.
diff --git a/docs/manage/_index.md b/docs/manage/_index.md
index 2cca5fea55..eba20339a9 100644
--- a/docs/manage/_index.md
+++ b/docs/manage/_index.md
@@ -9,43 +9,45 @@ open_on_desktop: true
overview: true
---
+
+{{}}
+
+
-
-
+{{< /how-to-expand >}}
diff --git a/docs/manage/fleet/provision/_index.md b/docs/manage/fleet/provision/_index.md
index ed8a401439..5f89b430c1 100644
--- a/docs/manage/fleet/provision/_index.md
+++ b/docs/manage/fleet/provision/_index.md
@@ -1,529 +1,8 @@
---
linkTitle: "Provision devices"
-title: "Provision devices using viam-agent"
+title: "Provision devices"
weight: 68
+layout: "empty"
type: "docs"
-description: "Provision a machine as it first comes online with a pre-defined configuration - in the factory or when the machine is taken into service."
-tags: ["fleet management", "viam-server", "viam-agent"]
-images: ["/installation/thumbnails/install.png"]
-imageAlt: "Install Viam"
-languages: []
-viamresources: []
-platformarea: ["fleet"]
-level: "Intermediate"
-date: "2024-08-21"
-prev: "/manage/fleet/reuse-configuration/"
-next: "/manage/fleet/provision/end-user-setup/"
-aliases:
- - "/build/provision/"
- - "/fleet/provision/"
-# updated: "" # When the tutorial was last entirely checked
-# SMEs: James, Ale
-cost: "0"
+empty_node: true
---
-
-You can install [`viam-agent`](/configure/agent/) as part of your manufacturing process and provision machines with a pre-defined configuration as they come online.
-When the end user sets the machine up, they provide network access and `viam-agent` installs `viam-server` and your latest software.
-
-Consider a company that sells machines that monitor weather conditions on a maritime craft and provide navigation advice based on those readings.
-The machines use the data management service to regularly capture and upload a stream of sensor readings.
-To parse the readings and provide tailored guidance to a ship's captain, the company writes their own proprietary application.
-
-By having the end customer set up the machine, the company:
-
-- eliminates per-device setup and individualization at the factory
-- allows for tailored configurations per customer as needed
-- allows customer to provide their own WiFi credentials
-
-This guide will show you how to install and configure `viam-agent`.
-
-## Prerequisites
-
-{{% expand "One or more physical devices with supported operating system" %}}
-
-To find out more about supported systems, see [`viam-server` Platform requirements](/installation/viam-server-setup/#platform-requirements) and [`viam-micro-server` Platform requirements](/installation/viam-micro-server-setup/#platform-requirements).
-
-If you are flashing a Raspberry Pi using the Raspberry Pi Imager, flash a 64-bit image to your SD card and customize at least the hostname when prompted by the Raspberry Pi Imager.
-
-When you customize the hostname or other settings, the Raspberry Pi Imager creates `firstrun.sh` which is required to set up provisioning.
-
-Eject and reinsert the card to make sure it's mounted with the newly written contents.
-
-{{% /expand%}}
-
-{{< alert title="Support Notice" color="note" >}}
-
-Provisioning is supported and tested only on Debian 11 (Bullseye), and 12 (Bookworm) but should work on most distros using NetworkManager v1.42 (or newer) as well.
-For Bullseye, the installation of `viam-agent` changes the network configuration to use NetworkManager.
-
-{{< /alert >}}
-
-## Decide on the provisioning method
-
-You can choose to let your end users complete machine setup by using a captive web portal or a mobile app.
-
-If you choose to have a mobile app experience, you can use the [Viam mobile app](/fleet/control/#control-interface-in-the-viam-mobile-app) or create your own custom mobile app using the [Flutter SDK](https://flutter.viam.dev/viam_protos.provisioning.provisioning/ProvisioningServiceClient-class.html) or the [TypeScript SDK](https://github.com/viamrobotics/viam-typescript-sdk/blob/main/src/app/provisioning-client.ts) to connect to `viam-agent` and provision your machines.
-
-The Viam mobile app allows end users to create a new machine in the app, and `agent-provisioning` will then install `viam-server` and run it with a provided configuration.
-If you choose to use the Viam mobile app, you must provide a {{< glossary_tooltip term_id="fragment" text="fragment" >}} for provisioning.
-If you do not yet have a fragment, follow the steps to [Create a configuration fragment](/how-tos/one-to-many/) and make a note of the fragment ID.
-
-{{< alert title="Tip" color="tip" >}}
-If you are not using Flutter or TypeScript and would like to use provisioning, please [contact us](mailto:support@viam.com).
-{{< /alert >}}
-
-If you choose to use the captive web portal, you can optionally create a machine in advance and provide its machine cloud credentials file at /etc/viam.json.
-
-You can get the machine cloud credentials by clicking the copy icon next to **Machine cloud credentials** in the part status dropdown to the right of your machine's name on the top of the page.
-
-{{}}
-
-{{% expand "Want to create a machine and obtain its machine cloud credentials programmatically?" %}}
-
-You can use the [Fleet Management API](/appendix/apis/fleet/) to create machines, and obtain their machine cloud credentials:
-
-```python {class="line-numbers linkable-line-numbers"}
-import asyncio
-import requests
-
-from viam.rpc.dial import DialOptions, Credentials
-from viam.app.viam_client import ViamClient
-from viam.app.app_client import APIKeyAuthorization
-
-# Replace "" (including brackets) with your API key
-API_KEY = ""
-# Replace "" (including brackets) with your API key ID
-API_KEY_ID = ""
-# The id of the location to create the machine in
-LOCATION_ID = ""
-# The name for the machine to create
-MACHINE_NAME = ""
-
-
-async def connect() -> ViamClient:
- dial_options = DialOptions(
- credentials=Credentials(
- type="api-key",
- payload=API_KEY,
- ),
- auth_entity=API_KEY_ID
- )
- return await ViamClient.create_from_dial_options(dial_options)
-
-
-async def main():
-
- # Make a ViamClient
- viam_client = await connect()
- # Instantiate an AppClient called "cloud"
- # to run fleet management API methods on
- cloud = viam_client.app_client
- new_machine_id = await cloud.new_robot(
- name=MACHINE_NAME, location_id=LOCATION_ID)
- print("Machine created: " + new_machine_id)
- list_of_parts = await cloud.get_robot_parts(
- robot_id=new_machine_id)
- print("Part id: " + list_of_parts[0].id)
-
- org_list = await cloud.list_organizations()
- print(org_list[0].id)
-
- auth = APIKeyAuthorization(
- role="owner",
- resource_type="robot",
- resource_id=new_machine_id
- )
- api_key, api_key_id = await cloud.create_key(
- org_list[0].id, [auth], "test_provisioning_key")
- print(api_key, api_key_id)
-
- headers = {
- 'key_id': api_key_id,
- 'key': api_key
- }
- params = {
- "client": 'true',
- "id": list_of_parts[0].id
- }
- res = requests.get(
- 'https://app.viam.com/api/json1/config',
- params=params,
- headers=headers,
- timeout=10
- )
- print(res.text)
-
- with open("viam.json", "w") as text_file:
- text_file.write(res.text)
-
- viam_client.close()
-
-if __name__ == '__main__':
- asyncio.run(main())
-```
-
-{{% /expand%}}
-
-## Configure `agent-provisioning`
-
-{{< table >}}
-
-{{% tablestep link="/fleet/provision/#configuration" %}}
-**1. Configure provisioning**
-
-If you are using the captive portal, this step is optional.
-If you are using a mobile app, you must create a provisioning configuration file, specifying at least a `fragment_id`.
-
-Create a file called viam-provisioning.json with the following format and customize the [attributes](/fleet/provision/#configuration):
-
-{{< tabs >}}
-{{% tab name="Template" %}}
-
-```json {class="line-numbers linkable-line-numbers"}
-{
- "manufacturer": "", # your company name
- "model": "", # the machine's model
- "fragment_id": "", # the fragment id, required for mobile app
- "hotspot_prefix": "", # machine creates a hotspot during setup
- "disable_dns_redirect": true, # disable if using a mobile app
- "hotspot_password": "", # password for the hotspot
- "networks" : []
-}
-```
-
-{{% /tab %}}
-{{% tab name="Example" %}}
-
-```json {class="line-numbers linkable-line-numbers"}
-{
- "manufacturer": "Skywalker",
- "model": "C-3PO",
- "fragment_id": "2567c87d-7aef-41bc-b82c-d363f9874663",
- "hotspot_prefix": "skywalker-setup",
- "disable_dns_redirect": true,
- "hotspot_password": "skywalker123",
- "roaming_mode": false,
- "offline_timeout": "3m30s",
- "user_timeout": "2m30s",
- "fallback_timeout": "15m"
-}
-```
-
-This file configures some basic metadata, specifies a [fragment](/fleet/fragments/) to use to configure the machine, and provides the WiFi hotspot network name and password to use on startup.
-It also configures timeouts to control how long `viam-agent` waits for a valid local WiFi network to come online before creating its hotspot network, and how long to keep the hotspot active before terminating it.
-
-{{% /tab %}}
-{{< /tabs >}}
-
-{{% expand "Click to view attribute information" %}}
-
-
-| Name | Type | Required? | Description |
-| ---------- | ------ | --------- | ----------- |
-| `manufacturer` | string | Optional | Purely informative. May be displayed on captive portal or provisioning app. Default: `"viam"`. |
-| `model` | string | Optional | Purely informative. May be displayed on captive portal or provisioning app. Default: `"custom"`. |
-| `fragment_id` | string | Optional | The `fragment_id` of the fragment to configure machines with. Required when using the Viam mobile app for provisioning. The Viam mobile app uses the fragment to configure the machine. |
-| `hotspot_prefix` | string | Optional | `viam-agent` will prepend this to the hostname of the device and use the resulting string for the provisioning hotspot SSID. Default: `"viam-setup"`. |
-| `disable_dns_redirect` | boolean | Optional | By default, ALL DNS lookups using the provisioning hotspot will redirect to the device. This causes most phones/mobile devices to automatically redirect the user to the captive portal as a "sign in" screen. When disabled, only domains ending in .setup (ex: viam.setup) will be redirected. This generally avoids displaying the portal to users and is mainly used in conjunction with a mobile provisioning application workflow. Default: `false`. |
-| `hotspot_password` | string | Optional | The Wifi password for the provisioning hotspot. Default: `"viamsetup"`. |
-| `roaming_mode` | boolean | Optional | By default, the device will only attempt to connect to a single wifi network (the one with the highest priority), provided during initial provisioning/setup using the provisioning mobile app or captive web portal. Wifi connection alone is enough to consider the device as "online" even if the global internet is not reachable. If the primary network configured during provisioning cannot be connected to and roaming mode is enabled, the device will attempt connections to all configured networks in `networks`, and only consider the device online if the internet is reachable. Default: `false`. |
-| `offline_timeout` | boolean | Optional | Will only enter provisioning mode (hotspot) after being disconnected longer than this time. Useful on flaky connections, or when part of a system where the device may start quickly, but the wifi/router may take longer to be available. Default: `"2m"` (2 minutes). |
-| `user_timeout` | boolean | Optional | Amount of time before considering a user (using the captive web portal or provisioning app) idle, and resuming normal behavior. Used to avoid interrupting provisioning mode (for example for network tests/retries) when a user might be busy entering details. Default: `"5m"` (5 minutes). |
-| `fallback_timeout` | boolean | Optional | Provisioning mode will exit after this time, to allow other unmanaged (for example wired) or manually configured connections to be tried. Provisioning mode will restart if the connection/online status doesn't change. Default: `"10m"` (10 minutes). |
-| `networks` | array | Optional | Add additional networks the machine can connect to for provisioning. We recommend that you add WiFi settings in the operating system (for example, directly in NetworkManager) rather than in this file, or in the corresponding machine config in the Viam app, if networks aren't needed until after initial provisioning. See [Networks](/configure/agent/#networks). Default: `[]`. |
-
-{{% /expand%}}
-
-{{% /tablestep %}}
-{{% tablestep %}}
-**2. Configure Networks (optional)**
-
-During the provisioning process, a machine connects to a network to install `viam-server`.
-If you provide an app to your end user or are asking them to use the Viam mobile app, the user will provide network details through that app.
-
-If you know in advance which other networks a machine should be able to connect to, we recommend that you add WiFi settings in the operating system (for example, directly in NetworkManager).
-
-However, if you want to add additional networks to the provisioning configuration you can add them to the `networks` field value.
-
-{{< alert title="Important" color="note" >}}
-You must enable `roaming_mode` in the [`agent-provisioning` configuration](#configuration) of the machine to allow the machine to connect to the specified networks after provisioning.
-{{< /alert >}}
-
-If `roaming_mode` is enabled, `agent-provisioning` will try to connect to each specified network in order of `priority` from highest to lowest.
-
-
-| Name | Type | Description |
-| ---------- | ------ | ----------- |
-| `type` | string | The type of the network. Options: `"wifi"`|
-| `ssid` | string | The network's SSID. |
-| `psk` | string | The network pass key. |
-| `priority` | int | Priority to choose the network with. Values between -999 and 999. Default: `0`. |
-
-The following configuration defines the connection information and credentials for two WiFi networks named `fallbackNetOne` and `fallbackNetTwo`:
-
-```json {class="line-numbers linkable-line-numbers"}
-{
- "manufacturer": "Skywalker",
- "model": "C-3PO",
- "fragment_id": "2567c87d-7aef-41bc-b82c-d363f9874663",
- "hotspot_prefix": "skywalker-setup",
- "disable_dns_redirect": true,
- "hotspot_password": "skywalker123",
- "roaming_mode": false,
- "offline_timeout": "3m30s",
- "user_timeout": "2m30s",
- "fallback_timeout": "15m",
- "roaming_mode": true,
- "networks": [
- {
- "type": "wifi",
- "ssid": "otherNetworkOne",
- "psk": "myFirstPassword",
- "priority": 30
- },
- {
- "type": "wifi",
- "ssid": "otherNetworkTwo",
- "psk": "mySecondPassword",
- "priority": 10
- }
- ]
-}
-```
-
-{{% /tablestep %}}
-{{< /table >}}
-
-## Install `viam-agent`
-
-`viam-agent` is a self-updating service manager that maintains the lifecycle for several Viam services and keeps them updated.
-
-The following instructions will preinstall `viam-agent` into an image.
-
-**Only use the following method for offline pre-installs with images. For live systems, follow the instructions on a machine's setup tab to [install `viam-server` with `viam-agent`](/installation/viam-server-setup/).**
-
-{{< alert title="Support notice" color="note" >}}
-Please note this script works only under POSIX (MacOS and Linux) at the moment.
-{{< /alert >}}
-
-{{< table >}}
-{{% tablestep %}}
-**1. Download the preinstall script**
-
-Run the following commands to download the preinstall script and make the script executable:
-
-```sh {class="command-line" data-prompt="$"}
-wget https://storage.googleapis.com/packages.viam.com/apps/viam-agent/preinstall.sh
-chmod 755 preinstall.sh
-```
-
-{{% /tablestep %}}
-{{% tablestep %}}
-**2. Run the preinstall script**
-
-Run the preinstall script without options and it will attempt to auto-detect a mounted root filesystem (or for Raspberry Pi, bootfs) and also automatically determine the architecture.
-
-```sh {class="command-line" data-prompt="$"}
-sudo ./preinstall.sh
-```
-
-Follow the instructions.
-If you created a viam-provisioning.json, specify its location as an environment variable or when prompted.
-
-You can set optional arguments by defining the following environment variables:
-
-
-| Argument | Description |
-| -------- | ----------- |
-| `VIAM_JSON_PATH` | The path to the machine credentials viam.json file to be copied to the machine. The script will also prompt you for this file if not provided. |
-| `PROVISIONING_PATH` | The path to the viam-provisioning.json file. The script will also prompt you for this file if not provided. |
-| `VIAM_AGENT_PATH` | The path to a beta or local build of `viam-agent`. Used for testing. |
-
-
-
-{{% expand "Using a Raspberry Pi?" %}}
-
-{{< alert title="Important: Required customization" color="note" >}}
-
-You **must customize at least the hostname** when prompted by the Raspberry Pi Imager.
-
-{{< imgproc alt="Raspberry Pi Imager window showing gear-shaped settings icon is selected." src="/installation/rpi-setup/advanced-options-yes.png" resize="800x" declaredimensions=true >}}
-
-When you customize the hostname or other settings, the Raspberry Pi Imager creates `firstrun.sh` which is required to set up provisioning.
-
-If you do not customize anything, `firstrun.sh` is not present on the device and the `preinstall.sh` script fails.
-
-{{< /alert >}}
-
-For Raspberry Pis, the script will automatically perform the required next steps, it will:
-
-- create a tarball
-- update `firstrun.sh`.
-- extract the tarball to the mounted root filesystem
-
-```sh {class="command-line" data-prompt="$" data-output="2-40"}
-sudo ./preinstall.sh
-
-
-Found Raspberry Pi bootfs mounted at /Volumes/bootfs
-
-
-A Raspberry Pi boot partition has been found mounted at /Volumes/bootfs
-This script will modify firstrun.sh on that partition to install Viam agent.
-Continue pre-install? (y/n): y
-Path to custom viam-provisioning.json (leave empty to skip):
-Creating tarball for install.
-a opt
-a opt/viam
-a opt/viam/cache
-a opt/viam/bin
-a opt/viam/bin/viam-agent
-a opt/viam/bin/agent-provisioning
-a opt/viam/cache/viam-agent-provisioning-factory-aarch64
-a opt/viam/cache/viam-agent-factory-aarch64
-a etc
-a usr
-a usr/local
-a usr/local/lib
-a usr/local/lib/systemd
-a usr/local/lib/systemd/system
-a usr/local/lib/systemd/system/viam-agent.service
-a usr/local/lib/systemd/system/multi-user.target.wants
-a usr/local/lib/systemd/system/multi-user.target.wants/viam-agent.service
-
-
-Install complete! You can eject/unmount and boot the image now.
-```
-
-{{% /expand%}}
-
-{{% expand "Error: no valid image found at mountpoints (or manually provided path)" %}}
-
-If you get this error, you can run the script for the target system's architecture.
-It will create a tarball for the system's architecture which you will then need to manually extract.
-
-{{< tabs >}}
-{{% tab name="arm64" %}}
-
-```sh {class="command-line" data-prompt="$"}
-sudo ./preinstall.sh --aarch64
-```
-
-{{% /tab %}}
-{{% tab name="x86_64" %}}
-
-```sh {class="command-line" data-prompt="$"}
-sudo ./preinstall.sh --x86_64
-```
-
-{{% /tab %}}
-{{< /tabs >}}
-
-To extract the tarball, run:
-
-```sh {class="command-line" data-prompt="$"}
-sudo tar -xJvpf $TARBALL -C
-```
-
-{{% /expand%}}
-
-{{% expand "Refusing to install to unknown/unset ROOTFS" %}}
-
-If your root file system cannot be detected, you can specify it directly:
-
-```sh {class="command-line" data-prompt="$"}
-sudo ./preinstall.sh /path/to/rootfs
-```
-
-{{% /expand %}}
-
-{{% /tablestep %}}
-{{< /table >}}
-
-## Troubleshooting
-
-If you need to test the GRPC components of the provisioning service, there is a CLI client available.
-Get the code from the [`agent-provisioning` repo](https://github.com/viamrobotics/agent-provisioning) and run `go run ./cmd/client/` for info.
-
-## End user setup experience
-
-End users receive a machine, and use either a captive web portal or mobile app to complete the machine setup.
-
-The following steps show you the end user experience using the mobile app or the captive web portal and how your configuration influences it.
-
-For a guide you can give to end users for setting up their machine, see [Setup machine](/manage/fleet/provision/end-user-setup/).
-
-{{< tabs >}}
-{{% tab name="Mobile app" min-height="703px" %}}
-
-{{