anchor.diff:    /// creates xake build script
     let xake options = new RulesBuilder(options)
   
  +  /// Gets the script options.
  +  let getCtxOptions() = action {
  +    let! (ctx: ExecContext) = getCtx()
  +    return ctx.Options
  +  }
  +
     /// key function implementation
     /// Executes and awaits specified artifacts
     let needFileset fileset =
         action {
  -        let! ctx = getCtx()
  -        do! fileset |> (toFileList ctx.Options.ProjectRoot >> List.map (fun f -> new Artifact (f.FullName) |> FileTarget)) |> Impl.needTarget
  +        let! options = getCtxOptions()
  +        do! fileset |> (toFileList options.ProjectRoot >> List.map (fun f -> new Artifact (f.FullName) |> FileTarget)) |> Impl.needTarget
         }
   
     /// Executes and awaits specified artifacts
  
positive.code: 
    /// Creates phony action (check if I can unify the operator name)
    let (=>) = Impl.makePhonyRule
  
    // Helper method to obtain script options within rule/task implementation
    let getCtxOptions() = action {
      let! (ctx: ExecContext) = getCtx()
      return ctx.Options
    }
negative.code:       |> function
          | Some action ->
            async {
              let! waitTask = run action |> ctx.TaskPool.PostAndAsyncReply
              do! waitTask
              return Dependency.ArtifactDep target
            }
          | None ->
            // should always fail for phony
            let (FileTarget file) = target
            match file.Exists with
            | true -> async {return Dependency.File (file,file.LastWriteTime)}
            | false -> raiseError ctx (sprintf "Neither rule nor file is found for '%s'" (getFullname target)) ""
  
      /// Executes several artifacts in parallel
      let private exec ctx = Seq.ofList >> Seq.map (execOne ctx) >> Async.Parallel
  