diff --git a/scopes/harmony/application/app-context.ts b/scopes/harmony/application/app-context.ts
index 27796fd80783..c9e264c25594 100644
--- a/scopes/harmony/application/app-context.ts
+++ b/scopes/harmony/application/app-context.ts
@@ -3,7 +3,21 @@ import { Harmony } from '@teambit/harmony';
 import { Component } from '@teambit/component';
 import { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';
 
-export class AppContext extends ExecutionContext {
+export interface AppContextOptions {
+  appName: string;
+  harmony: Harmony;
+  dev: boolean;
+  appComponent: Component;
+  workdir: string;
+  execContext: ExecutionContext;
+  hostRootDir?: string;
+  port?: number;
+  args?: string;
+  workspaceComponentPath?: string;
+  envVariables?: Record<string, string>;
+};
+
+export class AppContext extends ExecutionContext implements AppContextOptions {
   constructor(
     /**
      * name of the app
@@ -85,19 +99,23 @@ export class AppContext extends ExecutionContext {
     return this.harmony.get<T>(aspectId);
   }
 
-  static compose(appContext: AppContext, overrides?: Partial<AppContext>) {
+  static fromOptions(appContext: AppContextOptions) {
     return new AppContext(
-      overrides?.appName || appContext?.appName,
-      overrides?.harmony || appContext?.harmony,
-      overrides?.dev || appContext?.dev,
-      overrides?.appComponent || appContext?.appComponent,
-      overrides?.workdir || appContext?.workdir,
-      overrides?.execContext || appContext?.execContext,
-      overrides?.hostRootDir || appContext?.hostRootDir,
-      overrides?.port || appContext?.port,
-      overrides?.args || appContext?.args,
-      overrides?.workspaceComponentPath || appContext?.workspaceComponentPath,
-      overrides?.envVariables || appContext?.envVariables
+      appContext.appName,
+      appContext.harmony,
+      appContext.dev,
+      appContext.appComponent,
+      appContext.workdir,
+      appContext.execContext,
+      appContext.hostRootDir,
+      appContext.port,
+      appContext.args,
+      appContext.workspaceComponentPath,
+      appContext.envVariables
     );
   }
+
+  static compose(appContext: AppContextOptions, overrides?: Partial<AppContextOptions>) {
+    return AppContext.fromOptions({ ...appContext, ...overrides });
+  }
 }