diff --git a/README.md b/README.md
index de0eeb5..ae25fd8 100644
--- a/README.md
+++ b/README.md
@@ -38,40 +38,37 @@ or [Gradle](https://gradle.com/) in the **Java** ecosystem.
## Features
1. **Everything is a plugin, simple yet powerful !**
-2. Build a tool chain and workflow without line code.
-3. Better interaction user experience
-
-Please refer [document](./docs/document.md) for details
+2. Build a tool chain and workflow without a line.
+3. Better user experience
## Quick Start
-- Install `gob` with below command
+1. Install `gob` with below command
```shell
go install github.com/kcmvp/gob
```
-- Initialize project with below comman d(in the project home directory)
+2. Initialize project with below command(in the project home directory)
```shell
gob init
```
+This command will generate two files
+>- gob.yaml : `gob` configuration
+>- .golangci.yaml: [golangci-lint](https://golangci-lint.run/) configuration. gob supports `golangci-lint` butilin
+> These two files need to be checked in with your source code
-This command will do below initializations:
-> 1. generate gob's configuration [gob.yaml](https://github.com/kcmvp/gob/blob/main/gob.yaml)
-> 2. install gob's builtin plugins: [golangci-lint](https://golangci-lint.run/) & [gotestsum](https://github.com/gotestyourself/gotestsum)
-> 3. setup three git hooks
-> 1. commit-msg
-> 2. pre-commit
-> 3. pre-push
-
-*`gob.yaml` and `.golangci.yaml` need to be checkin with your sources code
-
-## Screenshots
-
-- Git Hooks
+3. Make some changes in your source code and try to commit the code, you will see below screenshot.
>
-- Dependency tree
+
+4: Check project dependency
+```shell
+gob deps
+```
>
+Please refer [document](./docs/document.md) for details
+
+
## FAQ
diff --git a/docs/document.md b/docs/document.md
index 3966a38..eed118b 100644
--- a/docs/document.md
+++ b/docs/document.md
@@ -1,17 +1,19 @@
-## About gob.yaml configuration
-To unleash the powerful capabilities of gob, it is necessary to familiarize yourself with and understand its configuration file: gob.yaml.
-This file is to gob what pom.xml is to Maven, or settings.gradle.kts is to Gradle.
-All settings about the project are configured in this file. The gob program itself reads this file to perform the corresponding operations.
-By combining different configurations, you can almost achieve any powerful function you want.
-The following configuration is the configuration of the [gob.yaml](../gob.yaml) project itself (it is eating its own dog food)
-This configuration file is divided into two sections:
-
-- plugins
-- exec.
+## How gob works
+`Gob` takes everything defined in the `gob.yaml` as plugin.
+```mermaid
+flowchart TD
+ Gob --> gob.yaml
+ gob.yaml --> plugin1
+ gob.yaml --> plugin2
+ gob.yaml --> plugin3
+```
+You just need to tell `gob` 3W(where,when and what)
-They respectively define the plugins used in the project and when they will be invoked.
-Any tool can be referenced as a plugin in gob, just keep the basic principle in mind: define before use, the same is true in gob! (Same as coding)
+1. **Where** : where to download the tool
+2. **When** : when to execute to command
+2. **What** : what to do with the tool
+Below is from `gob` project itself
```yaml
exec:
commit-msg-hook: ^#[0-9]+:\s*.{10,}$
@@ -22,64 +24,19 @@ exec:
- test
plugins:
golangci-lint:
- alias: lint
- args: run ./...
- url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2
+ alias: lint #When : when issue `gob lint`
+ args: run ./... #What: execute `golangci-lint run ./...`
+ url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2 #Where: where to download the plugin
gotestsum:
alias: test
args: --format testname -- -coverprofile=target/cover.out ./...
url: gotest.tools/gotestsum@v1.11.0
```
-
-### Define a plugin
-
-```yaml
- golangci-lint:
- alias: lint
- args: run ./...
- url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2
-```
-above is a plugin declaration, which define golangci-lint as a plugin in the project. You don't need to manually edit `gob.yaml` to add a plugin.
-below command would take all stuffs for you.
-
-```shell
-gob plugin install xxxxxx
-```
-Below are the meanings of each section
-- golangci-lint : plugin's unique name
-- alias: lint : alias of this command, you can use `gob lint` to invoke this plugin
-- args: run ./... : The parameters passed to `gob lint`
-- url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2 : Use golangci-lint@v1.55.2 as the plugin
-> Compare to `go install`,`gob plugin install` would keep the version as suffix of the binary name. it's an enhanced version `go install`
-
-### Use a plugin
-There are **two** ways to use a defined plugin. Below is the first way, which will be invoked from an external program. Here are the git hooks.
-- commit-msg
-- pre-commit
-- pre-push
-
-As git local hooks are common requirements, gob implements them as built-in functionalities.
-```yaml
-exec:
- commit-msg-hook: ^#[0-9]+:\s*.{10,}$ // commit message must start with '#' then follows an issue number, the message length must bigger than 10 characters
- pre-commit-hook: // execute gob lint & gob test during pre-commit phrase. An error will stop the commit
- - lint
- - test
- pre-push-hook: // execue gob test during pre-push phrase. An error will stop the push
- - test
-```
-The second way to use declared plugins is invoking plugin directly by using gob. for example if you want to call `golangci-lint@v1.55.2` you can
-issue below command
-```shell
-gob lint
-```
+in most cases you don't need to edit the configuration manually. you can achieve this by commands
## Commands
-> principles apply to all commands:
-> every command must be executed from project root directory
-
-### init
+### gob init
```shell
gob init
```
@@ -91,26 +48,26 @@ gob init
6. Generate `gob.yaml` in project root directory
7. Set up git local hooks if current project has been version controlled
-### build
+### gob build
```shell
gob build
```
1. This command would build binaries in the project.(If there are more than one main method in main package)
2. Final binaries will be built in the ${project_home}/target folder and named the same as go source name which contains main method in main package
-### clean
+### gob clean
```shell
gob clean
```
This command will clean all stuffs in the ${project_home}/target folder
-### test
+### gob test
```shell
gob test
```
This command will test the project and generate coverage report
-### lint
+### gob lint
```shell
gob lint
```
@@ -120,7 +77,7 @@ This command will run lint against project based on the configuration.
new-from-rev: HEAD
```
-### gob plugin install (Enhanced version `go install`)
+### gob plugin install
```shell
gob plugin install
```
@@ -138,8 +95,7 @@ gob plugin install github.com/golangci/golangci-lint/cmd/golangci-lint
```shell
gob plugin list
```
-list all the definied plugins in project
-
+list all the defined plugins in project
### gob deps
```shell