diff --git a/client/http.go b/client/http.go
index 77a1911..88a7126 100644
--- a/client/http.go
+++ b/client/http.go
@@ -7,6 +7,7 @@ import (
 	"net/http"
 	"time"
 
+	"gitea.com/gitea/act_runner/core"
 	"gitea.com/gitea/proto-go/ping/v1/pingv1connect"
 	"gitea.com/gitea/proto-go/runner/v1/runnerv1connect"
 
@@ -26,7 +27,7 @@ func New(endpoint, secret string, opts ...Option) *HTTPClient {
 
 	interceptor := connect.UnaryInterceptorFunc(func(next connect.UnaryFunc) connect.UnaryFunc {
 		return func(ctx context.Context, req connect.AnyRequest) (connect.AnyResponse, error) {
-			req.Header().Set("X-Runner-Token", secret)
+			req.Header().Set(core.UUIDHeader, secret)
 			return next(ctx, req)
 		}
 	})
diff --git a/config/config.go b/config/config.go
index 1e97a88..4a200fa 100644
--- a/config/config.go
+++ b/config/config.go
@@ -1,10 +1,14 @@
 package config
 
 import (
+	"encoding/json"
 	"fmt"
+	"io"
 	"os"
 	"runtime"
 
+	"gitea.com/gitea/act_runner/core"
+	"github.com/appleboy/com/file"
 	"github.com/joho/godotenv"
 	"github.com/kelseyhightower/envconfig"
 )
@@ -52,7 +56,19 @@ func FromEnviron() (Config, error) {
 		return cfg, err
 	}
 
-	cfg.Client.Secret = cfg.Runner.Token
+	// check runner config exist
+	if file.IsFile(cfg.Runner.File) {
+		jsonFile, _ := os.Open(cfg.Runner.File)
+		defer jsonFile.Close()
+		byteValue, _ := io.ReadAll(jsonFile)
+		var runner core.Runner
+		if err := json.Unmarshal(byteValue, &runner); err != nil {
+			return cfg, err
+		}
+		if runner.UUID != "" {
+			cfg.Client.Secret = runner.UUID
+		}
+	}
 
 	// runner config
 	if cfg.Runner.Environ == nil {
diff --git a/core/runner.go b/core/runner.go
index 0ea6559..d4ca3b7 100644
--- a/core/runner.go
+++ b/core/runner.go
@@ -1,5 +1,7 @@
 package core
 
+const UUIDHeader = "x-runner-uuid"
+
 // Runner struct
 type Runner struct {
 	ID    int64  `json:"id"`