diff --git a/docs/guides/chip_tool_guide.md b/docs/guides/chip_tool_guide.md
index 655cc226fb6e0c..f724b58f7bdb19 100644
--- a/docs/guides/chip_tool_guide.md
+++ b/docs/guides/chip_tool_guide.md
@@ -54,16 +54,73 @@ To check if the CHIP Tool runs correctly, execute the following command from the
$ ./chip-tool
```
-As a result, the CHIP Tool prints all available commands. These are called
-_clusters_ in this context, but not all listed commands correspond to the
-_clusters_ in the Data Model (for example, pairing or discover commands). Each
-listed command can however become the root of the new more complex command by
-appending it with sub-commands. Examples of specific commands and their use
-cases are described in the
+As a result, the CHIP Tool starts in the default
+[single-command mode](#single-command-mode-default) and prints all available
+commands. These are called _clusters_ in this context, but not all listed
+commands correspond to the _clusters_ in the Data Model (for example, pairing or
+discover commands). Each listed command can however become the root of the new
+more complex command by appending it with sub-commands. Examples of specific
+commands and their use cases are described in the
[Supported commands and options](#supported-commands-and-options) section.
+## CHIP Tool modes
+
+The CHIP Tool can run in one of the following modes:
+
+### Single-command mode (default)
+
+In this mode, the CHIP Tool will exit with a timeout error if any single command
+does not complete within a certain timeout period.
+
+The timeout error will look similar to the following one:
+
+```
+[1650992689511] [32397:1415601] CHIP: [TOO] Run command failure: ../../../examples/chip-tool/commands/common/CHIPCommand.cpp:392: CHIP Error 0x00000032: Timeout
+```
+
+Moreover, when using the single-command mode, the CHIP Tool will establish a new
+CASE session with every command sent.
+
+#### Modifying timeout duration in single-command mode
+
+This timeout can be modified for any command execution by supplying the optional
+`--timeout` parameter, which takes a value in seconds, with the maximum being
+65535 seconds.
+
+**Example of command:**
+
+```
+$ ./chip-tool otasoftwareupdaterequestor subscribe-event state-transition 5 10 0x1234567890 0 --timeout 65535
+```
+
+### Interactive mode
+
+In this mode, a command will terminate with an error if it does not complete
+within the timeout period. However, the CHIP Tool will not be terminated and it
+will not terminate processes that previous commands have started. Moreover, when
+using the interactive mode, the CHIP Tool will establish a new CASE session only
+when there is no session available yet. On the following commands, it will use
+the existing session.
+
+#### Starting the interactive mode
+
+For commands such as event subscriptions that need to run for an extended period
+of time, the CHIP Tool can be started in interactive mode first before running
+the command.
+
+To start the interactive mode, run the following command:
+
+```
+$ ./chip-tool interactive start
+```
+
+In this mode, you can subscribe to events or attributes. For detailed steps, see
+[Subscribing to events or attributes](#subscribing-to-events-or-attributes).
+
+
+
## Using CHIP Tool for Matter device testing
The following steps depend on the application clusters that you implemented on
@@ -398,55 +455,6 @@ $ ./chip-tool basic
This section contains a general list of various CHIP Tool commands and options,
not limited to commissioning procedure and cluster interaction.
-### Interactive mode versus single-command mode
-
-The CHIP Tool can run in one of the following modes:
-
-- Single-command mode (default) - In this mode, the CHIP Tool will exit with a
- timeout error if any single command does not complete within a certain
- timeout period.
-
- The timeout error will look similar to the following one:
-
- ```
- [1650992689511] [32397:1415601] CHIP: [TOO] Run command failure: ../../../examples/chip-tool/commands/common/CHIPCommand.cpp:392: CHIP Error 0x00000032: Timeout
- ```
-
- Moreover, when using the single-command mode, the CHIP Tool will establish a
- new CASE session with every command sent.
-
-- Interactive mode - In this mode, a command will terminate with an error if
- it does not complete within the timeout period. However, the CHIP Tool will
- not be terminated and it will not terminate processes that previous commands
- have started. Moreover, when using the interactive mode, the CHIP Tool will
- establish a new CASE session only when there is no session available yet. On
- the following commands, it will use the existing session.
-
-#### Modifying timeout duration in single-command mode
-
-This timeout can be modified for any command execution by supplying the optional
-`--timeout` parameter, which takes a value in seconds, with the maximum being
-65535 seconds.
-
-**Example of command:**
-
-```
-$ ./chip-tool otasoftwareupdaterequestor subscribe-event state-transition 5 10 0x1234567890 0 --timeout 65535
-```
-
-#### Starting the interactive mode
-
-For commands such as event subscriptions that need to run for an extended period
-of time, the CHIP Tool can be started in interactive mode first before running
-the command.
-
-**Example of command:**
-
-```
-$ ./chip-tool interactive start
-otasoftwareupdaterequestor subscribe-event state-transition 5 10 ${NODE_ID} 0
-```
-
### Printing all supported clusters
To print all clusters supported by the CHIP Tool, run the following command:
@@ -1013,3 +1021,226 @@ In this command:
```
$ ./chip-tool onoff toggle 1 1 --commissioner-name beta
```
+
+
+
+### Subscribing to events or attributes
+
+Subscribing to an event or an attribute lets you mirror the state of the event
+or the attribute as it changes in the Matter network. The list of events or
+attributes you can subscribe to depends on the chosen cluster.
+
+You can have more than one subscription at any given time and subscribe to more
+than one attribute or event within one subscription (those attributes or events
+can come from different clusters). However, you cannot subscribe to both
+attributes and events as part of a single subscription. In other words, each
+subscription must be dedicated exclusively to either attributes or events.
+
+For more information about subscriptions, see the Matter specification at
+chapter 8, section 5 (Subscribe Interaction).
+
+> **Note:** The subscription behavior will be different if you set the
+> subscription to be sent with the parameter `isUrgent` set to `True`. See the
+> Matter specification for more information.
+
+#### Subscribing to an attribute
+
+The following procedure will use the `doorlock` cluster as an example. Complete
+the following steps:
+
+1. Start the CHIP Tool in [interactive mode](#interactive-mode) by running the
+ following command:
+
+ ```
+ $ ./chiptool interactive start
+ ```
+
+ All of the commands that follow will be executed in the interactive mode
+ (`>>>`).
+
+1. Run the following command to display all the available attributes you can
+ subscribe to for the given ``:
+
+ ```
+ >>> subscribe
+ ```
+
+ The list of all available attributes for the cluster will appears.
+
+ > **Note:** Your accessory might not support all of these attributes. You
+ > will get an error if the controller sends an unsupported attribute.
+
+ For example, for the door lock cluster:
+
+ ```bash
+ >>> doorlock subscribe
+ ```
+
+ The following list will appear:
+
+ ```
+ +-------------------------------------------------------------------------------------+
+ | Attributes: |
+ +-------------------------------------------------------------------------------------+
+ | * lock-state |
+ | * lock-type |
+ | * actuator-enabled |
+ | * door-state |
+ | * door-open-events |
+ | * door-closed-events |
+ | * open-period |
+ | * number-of-total-users-supported |
+ | * number-of-pinusers-supported |
+ | * number-of-rfidusers-supported |
+ | * number-of-week-day-schedules-supported-per-user |
+ | * number-of-year-day-schedules-supported-per-user |
+ | * number-of-holiday-schedules-supported |
+ | * max-pincode-length |
+ | * min-pincode-length |
+ | * max-rfidcode-length |
+ | * min-rfidcode-length |
+ | * credential-rules-support |
+ | * number-of-credentials-supported-per-user |
+ | * language |
+ | * ledsettings |
+ | * auto-relock-time |
+ | * sound-volume |
+ | * operating-mode |
+ | * supported-operating-modes |
+ | * default-configuration-register |
+ | * enable-local-programming |
+ | * enable-one-touch-locking |
+ | * enable-inside-status-led |
+ | * enable-privacy-mode-button |
+ | * local-programming-features |
+ | * wrong-code-entry-limit |
+ | * user-code-temporary-disable-time |
+ | * send-pinover-the-air |
+ | * require-pinfor-remote-operation |
+ | * expiring-user-timeout |
+ | * generated-command-list |
+ | * accepted-command-list |
+ | * event-list |
+ | * attribute-list |
+ | * feature-map |
+ | * cluster-revision |
+ +-------------------------------------------------------------------------------------+
+ ```
+
+1. Add the argument of your choice to the subscription command, using the
+ following pattern:
+
+ ```bash
+ >>> subscribe
+ ```
+
+ In this command:
+
+ - __ is the name of the cluster.
+ - __ is the name of the chosen argument.
+ - __ specifies the minimum number of seconds that must elapse
+ since the last report for the server to send a new report.
+ - __ specifies the number of seconds that must elapse since
+ the last report for the server to send a new report.
+ - __ is the user-defined ID of the commissioned node.
+ - __ is the ID of the endpoint where the chosen cluster is
+ implemented.
+
+ For example:
+
+ ```bash
+ >>> doorlock subscribe lock-state 5 10 1 1
+ ```
+
+After this command is run, the CHIP Tool will check the state of the door lock
+every time it changes (for example, as a result of a button press or an external
+ecosystem action) and update it in its own records.
+
+#### Subscribing to an event
+
+The procedure for subscribing to an event is similar to
+[subscribing to an attribute](#subscribing-to-an-attribute).
+
+The following procedure will use the `doorlock` cluster as an example. Complete
+the following steps:
+
+1. Start the CHIP Tool in [interactive mode](#interactive-mode) by running the
+ following command:
+
+ ```
+ $ ./chiptool interactive start
+ ```
+
+ All of the commands that follow will be executed in the interactive mode
+ (`>>>`).
+
+1. Run the following command to display all the available events you can
+ subscribe to for the given ``:
+
+ ```
+ >>> subscribe-event
+ ```
+
+ The list of all available events for the cluster will appears.
+
+ > **Note:** Your accessory might not support all of these events. You will
+ > get an error if the controller sends an unsupported event.
+
+ For example, for the door lock cluster:
+
+ ```bash
+ >>> doorlock subscribe-event
+ ```
+
+ The following list will appear:
+
+ ```
+ +-------------------------------------------------------------------------------------+
+ | Events: |
+ +-------------------------------------------------------------------------------------+
+ | * door-lock-alarm |
+ | * door-state-change |
+ | * lock-operation |
+ | * lock-operation-error |
+ | * lock-user-change |
+ +-------------------------------------------------------------------------------------+
+ ```
+
+1. Add the event of your choice to the subscription command, using the following
+ pattern:
+
+ ```bash
+ >>> subscribe-event
+ ```
+
+ In this command:
+
+ - __ is the name of the cluster.
+ - __ is the name of the chosen event.
+ - __ specifies the minimum number of seconds that must elapse
+ since the last report for the server to send a new report.
+ - __ specifies the number of seconds that must elapse since
+ the last report for the server to send a new report.
+ - __ is the user-defined ID of the commissioned node.
+ - __ is the ID of the endpoint where the chosen cluster is
+ implemented.
+
+ For example:
+
+ ```bash
+ >>> doorlock subscribe-event door-lock-alarm 5 10 1 1
+ ```
+
+After this command is run, the CHIP Tool will check the state of the door lock
+every time it changes (for example, as a result of a button press or an external
+ecosystem action) and update it in its own records.
+
+#### Subscribing using attribute ID or event ID
+
+You can also use the following commands instead of `subscribe` to subscribe
+using the attribute ID or the event ID:
+
+- `subscribe-by-id`
+- `subscribe-event-by-id`
+
+The steps are the same as for the `subscribe` or `subscribe-event` commands.