 			eventObserver.send(value: SessionEvent(.sessionError, props: ["error": errorData.error.localizedDescription]))
 			delegateQueue.async { self.delegate?.sessionErrorReceived(errorData.error, details: nil) }
 		case .computeStatus(let status):
+			let sendPreCommands = !computeIsRunning && status == .running
 			computeStatus = status
 			informDelegate = true
+			if sendPreCommands {
+				preRunningRequests?.forEach {
+					send(command: $0)
+				}
+				preRunningRequests = nil
+			}
 		case .execComplete(let execData):
 			if !execData.images.isEmpty {
 				imageCache.cache(images: execData.images)

	func send(command: SessionCommand) -> Bool {
		do {
			let data = try conInfo.encode(command)
			let cmdStr = String(data: data, encoding:.utf8) ?? "foo"
			Log.info("sending:\n \(cmdStr)")
			self.webSocketWorker.send(data: data)
		} catch let err as NSError {
			Log.error("error sending message on websocket: \(err)", .session)
			return false
		}
		return true
	}
	
	private func webSocketStatusChanged(status: SessionWebSocketWorker.SocketStatus) {

	public weak var delegate: SessionDelegate?
	/// status of compute engine
	public private(set) var computeStatus: SessionResponse.ComputeStatus = .initializing
	public var computeIsRunning: Bool { return computeStatus == .running }
	
	
	// swiftlint:disable:next force_try
	public var project: AppProject { return try! conInfo.project(withId: workspace.projectId) }
